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

zqq8419792 2015-03-31 09:20:28
加精
我先使用人家的办法,重写了一个方法,通过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大牛
...全文
2707 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
a574772622 2016-02-04
  • 打赏
  • 举报
回复
同17楼。。。。。。。。。。
林朝昆 2015-08-27
  • 打赏
  • 举报
回复
我和你想过同样的问题,封装成一个方法,后来我用的是hander解决的。你可以试试。
小小慕穆 2015-06-29
  • 打赏
  • 举报
回复
要不到原因可以通过debug工具分析,一步一步来
  • 打赏
  • 举报
回复
frss1234 2015-04-10
  • 打赏
  • 举报
回复
致敬.......
伊顺鸣 2015-04-08
  • 打赏
  • 举报
回复
大家都来学习了吧。
只为搞笑 2015-04-07
  • 打赏
  • 举报
回复
volley之所以为框架,就是因为他已经给你处理好了很多事情,你是用他原本的请求,他会在收到返回数据后调用你重写的onResponse,如果网络异常或错误,则是调用onErrorResponse,也就是说你只需要在这两个方法里写你对应的动作就可以了
cattpon 2015-04-06
  • 打赏
  • 举报
回复
很详细~
Kimokiko 2015-04-02
  • 打赏
  • 举报
回复
回调啊,Handler什么的撒
  • 打赏
  • 举报
回复
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);
qq_27038467 2015-03-31
  • 打赏
  • 举报
回复
我c前也封装过,不过,能使用的情况有限,所以就放弃了。
开发者_android 2015-03-31
  • 打赏
  • 举报
回复
用你说的这样用过,不过,后来用的少了。
zqq8419792 2015-03-31
  • 打赏
  • 举报
回复
引用 4 楼 dalor 的回复:
我c前也封装过,不过,能使用的情况有限,所以就放弃了。
那你平时是怎么用的呢? 就那样一起写2个listener吗?
开发者_android 2015-03-31
  • 打赏
  • 举报
回复
我c前也封装过,不过,能使用的情况有限,所以就放弃了。
zqq8419792 2015-03-31
  • 打赏
  • 举报
回复
引用 1 楼 dalor 的回复:
mQueue.add(request); 请求和返回都是需要时间的,你刚添加进去,请求刚开始,还不知请求是否成功或返回,你就retun了,json当然是空。
你这也一说我也觉得好有道理。可是好像不知道有什么办法处理。
zqq8419792 2015-03-31
  • 打赏
  • 举报
回复
引用 1 楼 dalor 的回复:
mQueue.add(request); 请求和返回都是需要时间的,你刚添加进去,请求刚开始,还不知请求是否成功或返回,你就retun了,json当然是空。
那我应该如何处理啊?
开发者_android 2015-03-31
  • 打赏
  • 举报
回复
mQueue.add(request); 请求和返回都是需要时间的,你刚添加进去,请求刚开始,还不知请求是否成功或返回,你就retun了,json当然是空。
zqq8419792 2015-03-31
  • 打赏
  • 举报
回复
引用 11 楼 hvk687 的回复:
自己重新封装 StringRequest;简单实用。我最近在在搞一个基于fastjson+volley;非常好用;支持复杂的json, 可以非常方便的json javabean转换;后面会开源出来;可以关注一下
引用 10 楼 dalor 的回复:
是那意思,又不是多复杂的事。框架的使用达不到要求,只能选择性使用了。
我只是一个使用拿项目直接做,学习安卓没一个星期的新手。、
hvk687 2015-03-31
  • 打赏
  • 举报
回复
自己重新封装 StringRequest;简单实用。我最近在在搞一个基于fastjson+volley;非常好用;支持复杂的json, 可以非常方便的json javabean转换;后面会开源出来;可以关注一下
开发者_android 2015-03-31
  • 打赏
  • 举报
回复
是那意思,又不是多复杂的事。框架的使用达不到要求,只能选择性使用了。
加载更多回复(3)

80,469

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧