如何封装一个volly的网络请求方法

Android 码拜 5年前 (2015-04-24) 315次浏览 0个评论

我先使用人家的办法,重写了一个方法,通过map提交,json返回、
这个方法可以正常使用。调用过程如:

RequestQueue mQueue = Volley.newRequestQueue(getBaseContext());
        Request<JSONObject> request = new HuaguHttpPost(Method.POST, "http://192.168.1.118/1.php", new Response.Listener<JSONObject>() {

			@Override
			public void onResponse(JSONObject response) {
				Log.i("json", response.toString());
			}
		}, new Response.ErrorListener() {
			@Override
			public void onErrorResponse(VolleyError error) {
				// TODO Auto-generated method stub
				Log.i("json",error.getMessage(),error);
			}
		}, map);
        
        mQueue.add(request);

问题在于:
我想把整个http请求封装成一个方法,简单调用,于是我写了一个函数,如下:

public function Func{
        public static JSONObject json;
	public static JSONObject postMap(Map<String, String> map, final Activity act){
	RequestQueue mQueue = Volley.newRequestQueue(act);
        Request<JSONObject> request = new HuaguHttpPost(Method.POST, Constant.ServerURL, new Response.Listener<JSONObject>() {
			@Override
			public void onResponse(JSONObject response) {
				json = response;
			}
		}, new Response.ErrorListener() {
			@Override
			public void onErrorResponse(VolleyError error) {
				Log.i("json",error.getMessage(),error);
				try {
					json = new JSONObject().put("error", 1);
				} catch (JSONException e) {
					e.printStackTrace();
				}
				Toast.makeText(act, "服务器连接错误,请检查网络连接", Toast.LENGTH_LONG).show();
			}
		}, map);
        
        mQueue.add(request);
               //如果在这里输出json.tostring()  一定会报空指针。
		return json;//可是这里好像没有返回。
	}
}

请问  怎样写才可以让外部调用能接收到json呢?为什么我在最下面写log输出的时候会空指针呢?
我在类下意见声明了json,不知道为何还是这样
java大牛 

如何封装一个volly的网络请求方法
 mQueue.add(request);
请求和返回都是需要时间的,你刚添加进去,请求刚开始,还不知请求是否成功或返回,你就retun了,json当然是空。
如何封装一个volly的网络请求方法
引用 1 楼 dalor 的回复:

 mQueue.add(request);
请求和返回都是需要时间的,你刚添加进去,请求刚开始,还不知请求是否成功或返回,你就retun了,json当然是空。

那我应该如何处理啊?

如何封装一个volly的网络请求方法
引用 1 楼 dalor 的回复:

 mQueue.add(request);
请求和返回都是需要时间的,你刚添加进去,请求刚开始,还不知请求是否成功或返回,你就retun了,json当然是空。

你这也一说我也觉得好有道理。可是好像不知道有什么办法处理。

如何封装一个volly的网络请求方法
我c前也封装过,不过,能使用的情况有限,所以就放弃了。
如何封装一个volly的网络请求方法
引用 4 楼 dalor 的回复:

我c前也封装过,不过,能使用的情况有限,所以就放弃了。

那你平时是怎么用的呢? 就那样一起写2个listener吗?

如何封装一个volly的网络请求方法
用你说的这样用过,不过,后来用的少了。
如何封装一个volly的网络请求方法
引用 6 楼 dalor 的回复:

用你说的这样用过,不过,后来用的少了。

啊  大牛  求告诉我怎么搞啊?

我是新手,昨天才下的volly   难道有更无脑的办法吗?

如何封装一个volly的网络请求方法
基本的网络请求无非使用httpconnection或httpclient,写一个工具类,里面包含常用的get或post请求的方法,返回请求结果。
如何封装一个volly的网络请求方法
引用 8 楼 dalor 的回复:

基本的网络请求无非使用httpconnection或httpclient,写一个工具类,里面包含常用的get或post请求的方法,返回请求结果。

你的意思是你是自己写的没用框架。 

如何封装一个volly的网络请求方法
是那意思,又不是多复杂的事。框架的使用达不到要求,只能选择性使用了。
如何封装一个volly的网络请求方法
自己重新封装 StringRequest;简单实用。我最近在在搞一个基于fastjson+volley;非常好用;支持复杂的json, 可以非常方便的json javabean转换;后面会开源出来;可以关注一下
如何封装一个volly的网络请求方法
引用 11 楼 hvk687 的回复:

自己重新封装 StringRequest;简单实用。我最近在在搞一个基于fastjson+volley;非常好用;支持复杂的json, 可以非常方便的json javabean转换;后面会开源出来;可以关注一下

引用 10 楼 dalor 的回复:

是那意思,又不是多复杂的事。框架的使用达不到要求,只能选择性使用了。

 

我只是一个使用拿项目直接做,学习安卓没一个星期的新手。、

如何封装一个volly的网络请求方法
10分
我c前也封装过,不过,能使用的情况有限,所以就放弃了。
如何封装一个volly的网络请求方法
回调啊,Handler什么的撒
如何封装一个volly的网络请求方法
30分
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,
url, object, new Listener<JSONObject>() {

@Override
public void onResponse(JSONObject response) {
if (Constants.DEBUG) {
Log.i(“yjz”, “获取验证码success:” + response);
try {
boolean isBizSuccess = response.getBoolean(“isBizSuccess”);
if (isBizSuccess) {
JSONObject data = response.getJSONObject(“data”);
if (null != data) {
boolean isSend = data.getBoolean(“isSend”);
if (isSend) {
showErrorDialog(“验证码已发送”);
mc = new MyCount(120000, 1000);
mc.start();
}
}
} else {
showErrorDialog(response.getString(“bizErrorMsg”));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
System.out.println(“数据加载失败!”);
}
});
Application.getInstance().getRequestQueue().add(request);

如何封装一个volly的网络请求方法
很详细~
如何封装一个volly的网络请求方法
volley之所以为框架,就是因为他已经给你处理好了很多事情,你是用他原本的请求,他会在收到返回数据后调用你重写的onResponse,如果网络异常或错误,则是调用onErrorResponse,也就是说你只需要在这两个方法里写你对应的动作就可以了
如何封装一个volly的网络请求方法
大家都来学习了吧。
如何封装一个volly的网络请求方法
致敬…….

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明如何封装一个volly的网络请求方法
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!