ArrayIndexOutOfBoundsException - Retrofit Call

杀马特。学长 韩版系。学妹 提交于 2019-12-14 04:17:27

问题


I am trying to call a PUT method on my Retrofit instance:

Response<UpdateUserProfileResponse> response = App.getService().updateUserProfile(//A good 26 parameters).execute();

The parameters in the updateUserProfile() are a mixture of String, Boolean and one List<MyObject>. When I call this method, I get the following error:

Throwing new exception 'length=238; index=1366' with unexpected pending exception: java.lang.ArrayIndexOutOfBoundsException: length=238; index=1366
06-28 21:53:12.458 3928-6610/com.subby.development A/art: art/runtime/thread.cc:1329]   at retrofit2.Response

Update

I found the issue. There are two RealmList<BackgroundString> which are causing the issue. When I evaluate both RealmLists, I get:

Unable to evaluate the expression method threw 'java.lang.IllegalStateException' exception.


回答1:


For anyone else stumbling upon this question, the actual issue most likely is this: https://issuetracker.google.com/issues/37078190 i.e. Instant Run on Marshmallow/23 (and maybe even 24) has issues in the android runtime. Android 8/26+ have an official fix, but for most people disabling Instant Run should be sufficient.

also re:
https://github.com/square/retrofit/issues/1486
https://github.com/square/retrofit/issues/1506




回答2:


Throwing new exception 'length=1120; index=2310' with unexpected pending exception: java.lang.ArrayIndexOutOfBoundsException: length=1120; index=2310

It's working fine in Android Nougat and Oreo but i was facing the issue in Marshmallow.I just fixed it by turning off the "Instant run". Do it by going to File->Settings -> Build, Execution, Deployment -> Instant Run and disable the instant run option




回答3:


I am also facing same issue:

Disable Instant Run solves the problem.

Follow path below:

Setting ->Build,Execution,Development -> Instant Run




回答4:


If you are using this in background thread or any new Handler().postDelayed() then use this API call in UI Thread.

runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    APIClient.getAPIService().getEffects(Constants.apiKey).enqueue(new Callback<POJOCLASS>() {
                        @Override
                        public void onResponse(Call<POJOCLASS> call, Response<POJOCLASS> response) {
                            if (response.body().error.msg == null) {

                            }
                        }

                        @Override
                        public void onFailure(Call<POJOCLASS> call, Throwable t) {

                        }
                    });
                }
            });

try this code




回答5:


wrap your code into try catch block, like i did for example

 Call<JsonObject> call = null;
        try
        {
            call = apiService.getUserList(getUsersListRequestModel);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }


来源:https://stackoverflow.com/questions/38086208/arrayindexoutofboundsexception-retrofit-call

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!