JSONArray大于261时应用崩溃

时间:2019-09-05 12:21:45

标签: java android json broadcastreceiver android-json

我有JSON,其中包含公交车票信息。我使用排球从Web服务获取数据。之后,它将获取这些总线信息,并以adapter发送broadcast。此外,某些仿真器设备也会发生此错误。

 android.app.RemoteServiceException: can't deliver broadcast
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

我意识到,如果JSONArray的长度大于261,则它不运行适配器。然后,我检查JSONArray是否大于261,并发送到261,为什么会出现此问题?我该如何解决并将所有数据发送到适配器?

Bus.java        私人无效sendRequest(最终字符串拥有者,最终Map头){

        StringRequest stringRequest = new StringRequest(Request.Method.POST, MyConstants.URL + owner,
                new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {

                //   Log.e("AAAA" + owner, response);
                try {

                    JSONObject object = new JSONObject(response);
                    if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_NOTAVAILABLE)) {
                        // servisten gelen cevap not_available ise
                        //// owner
                        sendVoyagesErrorBroadcast(owner, MyConstants.ERROR_NOTAVAILABLE);
                    } else if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_SUCCESS)) {
                        // servisten gösterilebilecek bir sonuç geldiyse
                        JSONArray result = object.getJSONArray(MyConstants.SERVICE_RESULT);
                        if (result.length()>0) {
                            JSONArray resultGoing = result.getJSONObject(0).getJSONArray("going");
                            sendVoyagesArrayBroadcast(owner + MyConstants.DIRECTION_GOING, resultGoing);
                        }

// sendVoyagesArrayBroadcast
private void sendVoyagesArrayBroadcast(String target, JSONArray resultArray_) {

       JSONArray resultArray = new JSONArray();
        if (resultArray_.length()>261)
        {
            for(int i = 0; i < 261; i++) {
                try {
                    resultArray.put(resultArray_.get(i));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            Log.e("resultArray","");

        }
        else
            resultArray=resultArray_; 



        Intent intent = new Intent();
        intent.setAction(BROADCAST_TAG + target);

        intent.putExtra("data", resultArray.toString());
    /*if(!target.contains("bus2")){
     Log.e("sendSuccessBroadcast",target);
     intent.putExtra("data", resultArray.toString());
     }*/

        context.sendBroadcast(intent);
    }

2 个答案:

答案 0 :(得分:1)

这是由于bundlebundle的大小仅限于传递数据。如果您想在不使用电线的情况下传递数据,请使用EventBus,它可以处理足够的数据传输

答案 1 :(得分:1)

使用分页。您可以通过两种方式执行此操作:

  1. 在您的应用中本地
  2. 使用Web服务

我建议使用选项2。如果没有,则一次加载10-20个项目。