我先使用人家的办法,重写了一个方法,通过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); 问题在于: 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输出的时候会空指针呢? |
|
mQueue.add(request);
请求和返回都是需要时间的,你刚添加进去,请求刚开始,还不知请求是否成功或返回,你就retun了,json当然是空。 |
|
那我应该如何处理啊? |
|
你这也一说我也觉得好有道理。可是好像不知道有什么办法处理。 |
|
我c前也封装过,不过,能使用的情况有限,所以就放弃了。
|
|
那你平时是怎么用的呢? 就那样一起写2个listener吗? |
|
用你说的这样用过,不过,后来用的少了。
|
|
啊 大牛 求告诉我怎么搞啊? 我是新手,昨天才下的volly 难道有更无脑的办法吗? |
|
基本的网络请求无非使用httpconnection或httpclient,写一个工具类,里面包含常用的get或post请求的方法,返回请求结果。
|
|
你的意思是你是自己写的没用框架。 |
|
是那意思,又不是多复杂的事。框架的使用达不到要求,只能选择性使用了。
|
|
自己重新封装 StringRequest;简单实用。我最近在在搞一个基于fastjson+volley;非常好用;支持复杂的json, 可以非常方便的json javabean转换;后面会开源出来;可以关注一下
|
|
我只是一个使用拿项目直接做,学习安卓没一个星期的新手。、 |
|
10分 |
我c前也封装过,不过,能使用的情况有限,所以就放弃了。
|
回调啊,Handler什么的撒
|
|
30分 |
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,
url, object, new Listener<JSONObject>() { @Override @Override |
很详细~
|
|
volley之所以为框架,就是因为他已经给你处理好了很多事情,你是用他原本的请求,他会在收到返回数据后调用你重写的onResponse,如果网络异常或错误,则是调用onErrorResponse,也就是说你只需要在这两个方法里写你对应的动作就可以了
|
|
大家都来学习了吧。
|
|
致敬…….
|