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

标签 java android json broadcastreceiver android-json

有一个包含公交车票信息的 JSON。我们使用 volley 从 Web 服务获取数据。之后,它获取这些总线信息并通过广播发送给适配器。此外,某些模拟器设备也会出现此错误。

 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 为什么会出现此问题?如何解决这个问题并将所有数据发送到适配器?

总线.java private void sendRequest(最终字符串所有者,最终映射头) {

        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,它可以处理足够的数据传输

关于java - 当 JSONArray 大于 261​​ 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57805388/

相关文章:

Java 扫描对象

java - 类测试期间出现 NullPointerException

android - 使用改造在服务器上上传文件

android - 如何在不抑制警告的情况下解决android中的Unchecked cast

android - Api 调用失败无法为类 Retrofit/Moshi 创建转换器

java - 决定不使用 SQL 的图书列表分页策略

java - 我无法使用 JAX-WS 返回数组 String[]

java - 如何将 SQL 数据映射到 Java JSON 对象和 JSON 数组?

java - 如何使用 jackson 将 Json 数组写入文件

php - PHP SQL 查询中的 JSON 问题