使用Volley框架的Post请求得到评论内容

来源:互联网 发布:如何进行c盘数据备份 编辑:程序博客网 时间:2024/05/17 02:37

在项目中使用到的Volley框架,而对于Get的请求方法:自己封装一个工具类使用,直接调用就好

package com.example.tools;import org.json.JSONArray;import org.json.JSONObject;import android.content.Context;import android.util.Log;import com.android.volley.DefaultRetryPolicy;import com.android.volley.Request;import com.android.volley.RequestQueue;import com.android.volley.Response;import com.android.volley.Response.Listener;import com.android.volley.RetryPolicy;import com.android.volley.VolleyError;import com.android.volley.toolbox.JsonArrayRequest;import com.android.volley.toolbox.JsonObjectRequest;import com.android.volley.toolbox.StringRequest;import com.example.college.R;public class JsonTools {public JsonTools() {}static {}/** * 解析json数据的工具类 *  * @param context * @param json_path * @param callBack * @param queue */public static void parseJsonString(Context context, String json_path,final JsonStringCallBack callBack, RequestQueue queue) {getRetryPolicy();StringRequest request=new StringRequest(json_path, new Listener<String>() {@Overridepublic void onResponse(String response) {callBack.jsonStringCallBack(response);}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {Log.i("TAG", error.getMessage());}});queue.add(request);}/** * 解析数组开始的json字符串 *  * @param context * @param json_path * @param callBack * @param queue */public static void parseJsonArray(Context context, String json_path,final JsonArrayCallBack callBack, RequestQueue queue){getRetryPolicy();JsonArrayRequest request=new JsonArrayRequest(json_path, new Listener<JSONArray>() {@Overridepublic void onResponse(JSONArray response) {// TODO Auto-generated method stubcallBack.jsonArrayCallBack(response);}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {// TODO Auto-generated method stubLog.i("TAG", error.getMessage());}});queue.add(request);}/** * 解析对象的json数据的工具 * @param context * @param json_path * @param callBack */public static void parseJsonObject(Context context, String json_path,final JsonObjectCallBack callBack, RequestQueue queue) {getRetryPolicy();JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, json_path, null,new Response.Listener<JSONObject>() {@Overridepublic void onResponse(JSONObject response) {callBack.jsonObjectCallBack(response);}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {}});queue.add(jsonObjectRequest);}// 解析json对象的回调接口public interface JsonObjectCallBack {public void jsonObjectCallBack(JSONObject jsonObject);}// 解析json数组的回调接口public interface JsonArrayCallBack {public void jsonArrayCallBack(JSONArray jsonArray);}// 解析json字符串的回调接口public interface JsonStringCallBack {public void jsonStringCallBack(String jsonString);}public static RetryPolicy getRetryPolicy()     {  RetryPolicy retryPolicy = new DefaultRetryPolicy(10000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);  return retryPolicy;     }  }
这只是使用了Get的请求方式。

对于Post请求,看着Get的工具类,同样封装成一个类,直接调用就好:

package com.example.tools;import java.io.UnsupportedEncodingException;import java.util.Map;import org.json.JSONException;import org.json.JSONObject;import com.android.volley.AuthFailureError;import com.android.volley.NetworkResponse;import com.android.volley.ParseError;import com.android.volley.Request;import com.android.volley.Response;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.toolbox.HttpHeaderParser;public class NormalPostRequest extends Request<JSONObject> {      private Map<String, String> mMap;      private Listener<JSONObject> mListener;        public NormalPostRequest(String url, Listener<JSONObject> listener,ErrorListener errorListener, Map<String, String> map) {          super(Request.Method.POST, url, errorListener);                        mListener = listener;          mMap = map;      }            //mMap是已经按照前面的方式,设置了参数的实例      @Override      protected Map<String, String> getParams() throws AuthFailureError {          return mMap;      }            //此处因为response返回值需要json数据,和JsonObjectRequest类一样即可      @Override      protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {          try {              String jsonString = new String(response.data,HttpHeaderParser.parseCharset(response.headers));                                return Response.success(new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response));          } catch (UnsupportedEncodingException e) {              return Response.error(new ParseError(e));          } catch (JSONException je) {              return Response.error(new ParseError(je));          }      }        @Override      protected void deliverResponse(JSONObject response) {          mListener.onResponse(response);      }  }  

在Activity中:

public void GetTellShowDataPost(String path) {Map<String, String> map = new HashMap<String, String>();map.put("id", id);// JSONObject jsonObject = new JSONObject(map);queue.add(new NormalPostRequest(path,new Response.Listener<JSONObject>() {@Overridepublic void onResponse(JSONObject response) {try {System.out.println("--->>>" + response);JSONArray jsonArray = response.getJSONArray("list");for (int i = 0; i < jsonArray.length(); i++) {JSONObject object = jsonArray.getJSONObject(i);Tell data = new Tell();data.setId(object.getString("id"));data.setCid(object.getString("cid"));data.setUid(object.getString("uid"));data.setUname(object.getString("uname"));data.setContent(object.getString("content"));data.setWritetime(object.getString("writetime"));list.add(data);}if (list.isEmpty()) {ToastUtils.show(getApplicationContext(), "暂无评论");} else {tellAdapter.addzxlist(list);tListView.setAdapter(tellAdapter);tellAdapter.notifyDataSetChanged();}} catch (JSONException e) {e.printStackTrace();}}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {ToastUtils.show(getApplicationContext(), "数据请求出错");}}, map));}

这样简单的传一个Id给后台,使用Post请求得到评论的数据。

0 0
原创粉丝点击