Android 实现获取服务器的字符串响应

学习内容:

例一、使用StringRequest实现获取服务器的字符串响应...

 
Android的Volley中到底实现了哪些请求才是我们在开发中需要进行使用的...Volley实现的东西其实并不是很多,它的主要功能是实现异步进行网络请求和图片加载,其实就是异步加载解析Json数据,异步获取服务器的字符串数据,异步实现网络图片的动态加载,还有一个请求就是清空缓存的请求,不过使用的地方不是很多,主要还是前面三个方面,因此Volley相对于AndBase来说,其实还算是一个轻量级的框架,而AndBase涉及到的东西就更加的广泛,全面,但是网络请求这一部分使用Volley基本算是够用了...

1.StringRequest.java

package com.android.volley.toolbox;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import java.io.UnsupportedEncodingException;
public class StringRequest extends Request<String> {
    private final Listener<String> mListener; //请求成功的监听...
    //根据指定的请求方式和url创建一个StringRquest对象...
    public StringRequest(int method, String url, Listener<String> listener,
            ErrorListener errorListener) {
        super(method, url, errorListener); //设置请求方式,url,以及错误监听..
        mListener = listener; //设置成功监听...
    }
    //根据指定的url来创建一个StringRequest对象,请求方式默认为GET..
    public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {
        this(Method.GET, url, listener, errorListener);
    }
    //这里涉及到发送响应的过程了...表示整个请求的响应已经返回...
    @Override
    protected void deliverResponse(String response) {
        mListener.onResponse(response);
    }
    //对响应的解析过程...
    @Override
    protected Response<String> parseNetworkResponse(NetworkResponse response) {
        String parsed;
        try {
            parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); //对响应数据封装,解析字符集...
        } catch (UnsupportedEncodingException e) {
            parsed = new String(response.data);
        }
        return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));//返回请求成功...
    }
}

  上面只是StringRequest的源码实现,非常的简单...那么我们来具体的看看怎么用...

  一般使用在简单的响应方式,返回一些基本的数据信息,比如说用户登录中,在发送Post请求发送用户的账号信息和密码的时候,需要服务器调取数据库进行相关查找...在完成这个响应之后需要为服务端返回响应信息,一般就是以字符串的形式进行发送的...

package com.example.oop;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity implements OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    public void init(){
        RequestQueue queue=Volley.newRequestQueue(MainActivity.this); //首先创建一个请求队列...
     //然后需要向请求队列中添加相关请求...
     queue.add(new StringRequest("http://www.baidu.com/",new Listener    <StringRequest>(){
        //请求成功,接收请求方法的重写...
        @Override
        public void onResponse(String response){
            System.out.println(response.toString());
        }
    },new ErrorListener(){ //请求失败,对错误的获取...
        @Override
        public void onErrorResponse(VolleyError error){
            System.out.println(error.toString());
        }
    });  
        
}
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

  这里我们想百度页面发送了相关的请求,那么毫无疑问,请求成功是必然的,那么返回的东西就是百度页面的原生数据,其实就是Html页面代码...那么我们无法去解析这个页面,但是浏览器却是可以的,我们可以通过浏览器去加载这个页面...这只是一个简单的小例子而已,目的是我们需要清楚,服务器返回给我们的是什么数据...

  第二个例子:

  这是一个中间用于过程处理的JSP方法...用于处理账户和密码,只是一个简单的方式,我们当然也可以通过它去连接数据库,完善化这个函数...这里只是一个简单的小例子...

 <%
  String name=request.getParameter("name");
  String password=request.getParameter("password");
  if("darker".equals(name)&& "49681888".equals(password)){
      out.println("Receive name is:"+name);
    out.println("Receive password is:"+password);%>
    Your Message are right!
  <%}else{
      out.println("Receive name is:"+name);
    out.println("Receive password is:"+password);%>
    Your Message are wrong!
  <%}%>

  那么Activity中需要通过Post请求发送请求参数,才能够通过这个函数来进行下一步的判断...由于Post请求中没有传递参数的方法...但是我们可以通过重写getParam()方法...来指定相关参数,服务端会自动调用getParam()中的参数....

package com.example.oop;
//有一部分包没有引用,在编写的时候会自动引用的...
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
 
    TextView tv;
    String url="192.168.19.172:8080/JSP/post.jsp"
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv=(TextView)findViewById(R.id.tv_1);
        init();
    }
    public void init(){
        RequestQueue queue=Volley.newRequestQueue(MainActivity.this); //首先创建一个请求队列...
       queue.add(new StringRequest(Method.POST, url, new Listener<String>() {
    
    @Override
    public void onResponse(String response) {
        // TODO Auto-generated method stub
        System.out.println(response.toString());
        tv.setText(response.toString()); //对获取的数据进行显示...
    }
}, new ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        // TODO Auto-generated method stub
          System.out.println(error.toString());            
    }
}){
      //在这个方法里完成参数的相关传递....
    @Override
    protected Map<String, String>getParams() throws AuthFailureError{
        Map<String, String>map=new HashMap<String, String>();
        map.put("name", "darker");
        map.put("password", "49681888");
        return map;
    }
});
}
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

  使用Post请求来完成验证,毫无疑问,这里由于我们传递的参数时正确的,因此客户端会获取到Receive name is:darker,Receive password is:49681888,Your Message are right!这段信息...

  StringRequest请求非常的简单,涉及的东西也并不是很多,适合于发送网络请求来获取相应的字符串数据,呈递给客户端

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索服务器
, 字符串
, 数据
, 参数
new
dns服务器未响应、lol登陆服务器未响应、lol登录服务器未响应、代理服务器没有响应、imap服务器没有响应,以便于您获取更多的相关知识。

时间: 2024-09-20 04:04:47

Android 实现获取服务器的字符串响应的相关文章

android如何获取网页中特定标记之间的代码并作为字符串返回?

问题描述 android如何获取网页中特定标记之间的代码并作为字符串返回? 比如 我要获取某个网页上fhh jkl 这两个标记之间的代码 并返回该怎么弄? 解决方案 正则表达式提取 (?<=fhh).*?(?<jkl) 解决方案二: 除了用正则之外你也可以用Jsoup提取

软件-关于android,如何实现在手机客户端中获取服务器上的资源,文件。【谢谢】

问题描述 关于android,如何实现在手机客户端中获取服务器上的资源,文件.[谢谢] 就比如说我手机上一个软件,怎么进入服务器上下载文件呢?,...感激不尽 解决方案 用httpclient这个类. 解决方案二: 1.如果只是文件的话,可以在服务器上开一个FTP服务.一般的,可以在服务器上开WEB服务 2.如果用WEB的话,需要在服务器上开发服务器端程序. 3.手机上用相应的客户端连接服务器(例如HttpClient),发出命令并接受数据. 解决方案三: 一:基于Http协议获取数据方法.二:

android怎样从服务器获取图片?

问题描述 android怎样从服务器获取图片? 我通过eclipse连接上了SQLServer,然后Android访问Eclipse上的服务器(socket通信). 现在能从服务器里获取SQL里面的数据了,不过都是string类型.都是通过bufferedwriter() inputstreamreader()等函数实现的.现在想实现图片传递功能. 可以把图片存在电脑,然后把绝对路径保存在SQL的表里.然后eclipse根据路径解析出图片,并传递给android吗?能的话怎么实现 或者有没啥更简

android获取服务器上的图片,如何用网格的形式显示出来(类似于相册)

问题描述 android获取服务器上的图片,如何用网格的形式显示出来(类似于相册) 用ListView只能一行显示一块内容,我想一行显示两个item,或者三个,同时支持下拉刷新,下拉加载更多的功能,求大神给我个思路.. 解决方案 1.使用gridview, 2.直接使用listview,每个item中包含两个或者三个bitmap,然后刷新时一次加载2的倍数或者3的倍数的元素 3.下拉刷新,加载更多直接参考pulltorefresh 解决方案二: http://www.cnblogs.com/li

服务器 下载-Android开发向服务器获取图片

问题描述 Android开发向服务器获取图片 Android开发向服务器获取图片吧图片放到listview中服务器是svn服务器,怎么写代码啊? 解决方案 //loadImageFromUrl() --------- listviewhttp://cindy-lee.iteye.com/blog/1300818

安卓程序下标越界-android客户端从服务器获取图片报数组下标越界

问题描述 android客户端从服务器获取图片报数组下标越界 速求:各位大神好,帮忙给看一下,刚才运行安卓客户端从服务器获取图片报"数组下标越界",程序挂掉了,啥原因呢:public class MainActivity extends Activity implements OnScrollListener { private static final String TAG = null; private int count=0; public SimpleAdapter simpl

VS2012的VSPackage开发时如何获取服务器资源管理器已经配置好的数据库连接字符串

问题描述 最近几天在做VS的扩展包时,遇到一个难题.如下图:红框中的按钮是我在服务器资源管理器中扩展出来的右键菜单按钮.我希望在点击"模板代码生成"时,获取服务器中PosNew数据库对应的连接字符串.按我的理解,这个字符串应该是在IDE的全局配置文件中,但是MSDN的VSPackgeSDK中并未找到相关介绍,希望各路大神可以提供相关文章.思路!PS:我并不希望在点击"模板代码生成"时,通过弹出窗口让用户配置一个数据库连接字符串,以达到访问数据库的目的.如果这样的话,

Android获取服务器时间?

问题描述 Android获取服务器时间? 解决方案 只有离线的时候拿到的是服务器时间在线的状态情况下,是用的本地时间

Socket 通信原理(Android客户端和服务器以TCP&amp;amp;&amp;amp;UDP方式互通)

ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当,还望指教. 一.Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那