以前写项目搭框架的时候,从服务器获取数据刚开始自己写相应的异步获取的类,后来再做项目发现用自己写的,不怎么好,开始研究afinal,用finalhttp感觉还可以,用着还行,后来大牛说afinal没有volley用着爽,再说了,volley毕竟是Google出的,所以这次写项目的时候,就试着用了下,下面是我用vooley请求数据的例子,我写的只是vooley的冰山一角哦
(1)这是一个接口,需要使用接口回调,才写的
public interface VolleyListener {
void onComplete(int tag,String json);
void onException(int tag,String error);
}
(2)自己定义的添加参数的类
public class VolleyParams extends HashMap<String, String>{
public void add(String key,String value){
this.put(key, value);
}
}
(3)从服务器请求数据的核心类
这一步的大致步骤是:
1、创建RequestQueue 对象
2、无论是get请求还是post请求,都需要StringRequest对象
3、实现里面的ErrorListener,Listener接口,并重写里面的方法,如果需要传递参数重写getParams()方法
4、向RequestQueue 对象中添加StringRequest对象
public class VolleyRequest {
public static void request(final int tag,Context context, String method, String url,final VolleyParams params,
final VolleyListener listener) {
StringRequest request=null;
RequestQueue queue=Volley.newRequestQueue(context);
if("GET".equals(method)){//get方式请求数据
request = new StringRequest(
Request.Method.GET,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// TODOAuto-generated method stub //
// 这里我们可以拿到成功返回的json值用来进一步解析
Log.e("ssy", "成功=" + response);
listener.onComplete(tag, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODOAuto-generated method stub // 这里是返回失败的
Log.d("ssy", "失败=" + error);
listener.onException(tag, error.toString());
}
});
}else if("POST".equals(method)){//post方式请求数据
request = new StringRequest(
Request.Method.POST,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// TODOAuto-generated method stub //
// 这里我们可以拿到成功返回的json值用来进一步解析
Log.e("tcyx", "成功=" + response);
listener.onComplete(tag, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODOAuto-generated method stub // 这里是返回失败的
Log.d("tcyx", "失败=" + error);
listener.onException(tag, error.toString());
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
// TODO Auto-generated method stub
// org.apache.http.NameValuePair key = new
// BasicNameValuePair("key","123456");
/**
* 这里是post方式需要传递的参数
*/
return params;
}
};
}else{
Log.d("ssy", "传入的请求方式有误");
}
queue.add(request);
}
}
(4)这是一个主activity,里面用到接口回调,其他的就没有什么值得说的啦,XML布局很简单,就一个textView自己写吧
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
VolleyParams params=new VolleyParams();
VolleyRequest.request(
1,
this,
"GET",
"http://shishangyuan.coding-coder.cn/ClientApi/user.php?act=user_register&debug=true&api_version=1.0&user_name=15090653904&password=123456&user_rand=78573&next_password=123456",
null,
new VolleyListener() {
@Override
public void onException(int tag, String error) {
// TODO Auto-generated method stub
Log.d("ssy", "onException------->"+error);
tv.setText(error);
}
@Override
public void onComplete(int tag, String json) {
// TODO Auto-generated method stub
Log.d("ssy", "onComplete------->"+json);
tv.setText(json);
}
});
}
}