当 JSONArray 大于 261​​ 时应用程序崩溃

App crash when JSONArray is bigger than 261

有一个 JSON 包含公交车票信息。我们使用 volley 从网络服务中获取数据。之后,它获得了发送 adapterbroadcast 的这些总线信息。此外,某些仿真器设备也会出现此错误。

 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 private void sendRequest(final String owner, final Map header) {

        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);
    }

这是由于bundlebundle尺寸限制传递数据。如果要无线传输数据,请使用EventBus,它可以处理足够的数据传输

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

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

我建议使用选项 2。如果不是,则为此一次加载 10-20 个项目。