如何在android中使用volley获取自定义对象列表的响应

时间:2017-03-09 13:25:15

标签: android spring-mvc android-volley

如何在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(); 
}

1 个答案:

答案 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();
                                }
                            }