通过GsonRequest接收大的json消息

时间:2017-12-14 13:44:25

标签: java android gson android-volley

  

这是我在注销时遇到错误的意图服务

 public class intentService extends IntentService {

        @Override
        protected void onHandleIntent(Intent intent) {

            RequestQueue queue = MyVolley.getRequestQueue(this);
            queue = MyVolley.getRequestQueue(this);
            GsonRequest<Routes> gsonRequest = new GsonRequest<Routes>(
                        url_routes + key, Routes.class, null, createMyReqSuccessListenerRoutes(key),
                        createMyReqErrorListenerRoutes());
            queue.add(gsonRequest);
  

在intentservice中接收的功能

private Response.Listener<Routes> createMyReqSuccessListenerRoutes(final int key) {
    return new Response.Listener<Routes>() {
        @SuppressLint("LongLogTag")
        @Override
        public void onResponse(Routes response) {
            if (ds.checkTable(DataBaseHelper.TABLE_NAME_TRANSPORT)) {
                ds.createTableRoute();

                final int size = response.getResults().size();

                if (size > 0) {

                    final int part = 100 / size;
                    int i;

                    for (i = 0; i < size; i++) {

                        ds.insertRoutes(DataBaseHelper.TABLE_NAME_ROUTE,
                                response.getResults().get(i).getRoute(),
                                response.getResults().get(i).getStop_id(),
                                response.getResults().get(i).getNum(),
                                response.getResults().get(i).getLat(),
                                response.getResults().get(i).getLon(),
                                response.getResults().get(i).getRadius(),
                                response.getResults().get(i).getAudio(),
                                response.getResults().get(i).getEnd(),
                                response.getResults().get(i).getMove_time(),
                                response.getResults().get(i).getStop_time(),
                                response.getResults().get(i).getPlayonce(),
                                response.getResults().get(i).getName(),
                                key
                        );
                    }
                }
            }
        }
    }
}

从其他活动中调用

serviceintentRoute = new Intent(DataBase.this, intentService.class);
startService(serviceintentRoute.putExtra("key", idp));

我的RouteData类

public class RoutesData {

    private Integer route;
    private Integer stop_id;
    private Integer num;
    private String name;
    private String lat;
    private String lon;
    private Integer radius;
    private String audio;
    private Integer stop_time;
    private Integer move_time;
    private Integer end;
    private Integer trid;


    public RoutesData() {

    }

    public Integer getRoute() {
        return route;
    }

    public void setRoute(Integer route) {
        this.route = route;
    }

    public Integer getStop_id() {
        return stop_id;
    }

    public void setStop_id(Integer stop_id) {
        this.stop_id = stop_id;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public Integer getRadius() {
        return radius;
    }

    public void setRadius(Integer radius) {
        this.radius = radius;
    }

    public String getAudio() {
        return audio;
    }

    public void setAudio(String audio) {
        this.audio = audio;
    }

    public String getLat() {
        return lat;
    }

    public void setLat(String lat) {
        this.lat = lat;
    }

    public String getLon() {
        return lon;
    }

    public void setLon(String lon) {
        this.lon = lon;
    }

    public Integer getEnd() {
        return end;
    }

    public void setEnd(Integer end) {
        this.end = end;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getTrid() {
        return trid;
    }

    public void setTrid(Integer trid) {
        this.trid = trid;
    }

    public Integer getStop_time() {
        return stop_time;
    }

    public void setStop_time(Integer stop_time) {
        this.stop_time = stop_time;
    }

    public Integer getMove_time() {
        return move_time;
    }

    public void setMove_time(Integer move_time) {
        this.move_time = move_time;
    }
}

和路线

public class Routes {

    public ArrayList<RoutesData> data;

    public Routes(ArrayList<RoutesData> data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "Response [results=" + data + "]";
    }

    public ArrayList<RoutesData> getResults() {
        return data;
    }
}

Class MyVolley

 public class MyVolley {
        private static RequestQueue mRequestQueue;
        private Context context;
        public MyVolley() {
        }    
        static void init(Context context) {
            mRequestQueue = Volley.newRequestQueue(context);
            int memClass = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE))
                    .getMemoryClass();
            // Use 1/8th of the available memory for this memory cache.
            int cacheSize = 1024 * 1024 * memClass / 8;
    //        mImageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache(cacheSize));
        }
        public static RequestQueue getRequestQueue(Context mContext) {
            if (mRequestQueue == null) {
                mRequestQueue = Volley.newRequestQueue(mContext);
            }
            return mRequestQueue;
        }    
    }

class gsonrequest

public class GsonRequest<T> extends Request<T> {
private final Gson gson = new Gson();
private final Class<T> clazz;
private final Map<String, String> headers;
private final Response.Listener<T> listener;

/**
 * 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<T> listener, Response.ErrorListener errorListener) {
    super(Method.GET, url, errorListener);
    this.clazz = clazz;
    this.headers = headers;
    this.listener = listener;
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    return headers != null ? headers : super.getHeaders();
}

@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));
        Log.d("Response.success", json.toString());
        return Response.success(
                gson.fromJson(json, clazz),
                HttpHeaderParser.parseCacheHeaders(response));
    } catch (UnsupportedEncodingException e) {
        return Response.error(new ParseError(e));
    } catch (JsonSyntaxException e) {
        return Response.error(new ParseError(e));
    }
}

}

  

我不知道如何接收所有数据

     

Android Studio中的Logcat输出

注销

D/Response.success: {"status":true,"data"

:[{"route":1,"num":1,"stop_id":30,"name":"\u043f\u043b.......etc.. 没有完整的线,下一行我有错误

 D/ERROR RESPONSE: ERROR RESPONSE Routes

如果我理解正确,内存不足以满足所有json数组的需求 我试图通过

增加它
int cacheSize = 2048 * 2048 * memClass / 8;

但不是运气 我不得不接受所有大规模没有划分的

抱歉我的格式化代码

0 个答案:

没有答案