有一个包含公交车票信息的 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);
}
最佳答案
这是由于bundle
,bundle
大小仅限于传递数据。如果你想在没有电线的情况下传递数据,请使用EventBus
,它可以处理足够的数据传输
关于java - 当 JSONArray 大于 261 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57805388/