如何在android.i中使用volley作为自定义对象的列表获得响应尝试了一些示例但没有得到正确的答案,任何人都可以帮助我请新的角色
我对小枝休息服务的反应
[
{
id:01,
firstName:"naresh"
lastName:"kumar"
},
{
id:02,
firstName:"suresh",
lastName:"kumar"
}
]
GsonRequest:
package com.example.dh.nareshlearning;
import android.util.Log;
import android.widget.Toast;
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.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by Darkhorse on 07-03-2017.
*/
public class GsonRequest<T> extends Request<T> {
public final Gson gson = new Gson();
private final Class<T> clazz;
private final Map<String, String> headers;
private final Response.Listener<List<T>> listener;
private final Object dataIn;
/**
* Make a GET request and return a parsed object from JSON.
*
* @param url URL of the request to make
* @param clazz Relevant class object, for Gson's reflection
* @param headers Map of request headers
*/
public GsonRequest(String url, Class<T> clazz, Map<String, String> headers,
Response.Listener<List<T>> listener, Response.ErrorListener errorListener) {
super(Method.GET, url, errorListener);
this.clazz = clazz;
this.headers = headers;
this.listener = listener;
this.dataIn = null;
}
/* public GsonRequest(String url, Object dataIn, Class<T> clazz, Map<String, String> headers,
Response.Listener<T> listener, Response.ErrorListener errorListener) {
super(Method.POST, url, errorListener);
this.dataIn = dataIn;
this.clazz = clazz;
this.headers = headers;
this.listener = listener;
}*/
@Override
public byte[] getBody() throws AuthFailureError {
return gson.toJson(dataIn).getBytes();
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return headers;
}
@Override
protected void deliverResponse(T response) {
listener.onResponse(response);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json = new String(
response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(
gson.fromJson(json, clazz),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
}
}
MainActivity:
public class MainActivityextends Activity {
Button mybtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.volley_test);
mybtn=(Button)findViewById(R.id.call_service);
mybtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Map<String, String> headers = new HashMap<>();
Type type = new TypeToken<ArrayList<Vehicle>>() {}.getType();
headers.put("Content-Type", "application/json");
final String requestPayload = new Gson().toJson(new Vehicle(), Vehicle.class);
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
GsonRequest<List> myReq = new GsonRequest<List>("http://192.168.10.111:8087/getData",
List.class,
headers,
new Response.Listener<List<Vehicle>>() {
@Override
public void onResponse(List<Vehicle> response) {
Gson gson=new Gson();
List<Vehicle> lv=new ArrayList<Vehicle>();
// gson.fromJson(response,lv.getClass());
// ObjectMapper mapper = new ObjectMapper();
//List<Vehicle> vehicless = mapper.readValue(response, lv.getClass());
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(),"error", Toast.LENGTH_SHORT).show();
}
});
queue.add(myReq);
}
});
}
}
我的spring实体和android中的Vehicle类
Class Vehicle{
int id;
String firstName;
String lastName;
//setters and getters
}
春季休息服务
@Requestmapping("getData")
public List<Vehicles> getData(){
return repository.findAll();
}
答案 0 :(得分:0)
试图添加List我添加了JsonArray并且我已经使用Gson转换为我的对象类型列表。它工作正常
new Response.Listener<JsonArray>() {
@Override
public void onResponse(JsonArray json) {
Gson gson=new Gson();
TypeToken<List<Vehicle>> token = new TypeToken<List<Vehicle>>(){};
List<Vehicle> personList = gson.fromJson(json, token.getType());
Log.d("TAG","ReLs:: "+personList.get(0).getVehicleType());
Toast.makeText(getApplicationContext(),personList.get(0).getVehicleType(), Toast.LENGTH_SHORT).show();
}
}