您的位置:首页 > 其它

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

2014-08-21 11:04 501 查看
在项目中使用到的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>() {
@Override
public void onResponse(String response) {
callBack.jsonStringCallBack(response);

}
}, new Response.ErrorListener() {

@Override
public 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>() {
@Override
public void onResponse(JSONArray response) {
// TODO Auto-generated method stub
callBack.jsonArrayCallBack(response);
}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
Log.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>() {
@Override
public void onResponse(JSONObject response) {
callBack.jsonObjectCallBack(response);
}
}, new Response.ErrorListener() {
@Override
public 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>() {
@Override
public 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() {
@Override
public void onErrorResponse(VolleyError error) {
ToastUtils.show(getApplicationContext(), "数据请求出错");
}
}, map));
}


这样简单的传一个Id给后台,使用Post请求得到评论的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: