web-dev-qa-db-ja.com

ArrayIndexOutOfBoundsException-レトロフィットコール

PUTインスタンスでRetrofitメソッドを呼び出そうとしています。

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

updateUserProfile()のパラメーターは、String、Boolean、および1つの_List<MyObject>_の混合です。このメソッドを呼び出すと、次のエラーが発生します。

_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
_

更新

問題を見つけました。問題を引き起こしている2つの_RealmList<BackgroundString>_があります。両方のRealmListsを評価すると、次のようになります。

_Unable to evaluate the expression method threw 'Java.lang.IllegalStateException' exception._

17
Subby

この質問に出くわした他の人にとって、実際の問題はおそらくこれです: https://issuetracker.google.com/issues/3707819 すなわちMarshmallow/23(そしておそらく24)でのインスタント実行はAndroidランタイム。Android 8/26 +には公式の修正がありますが、ほとんどの人にとって、インスタント実行を無効にするだけで十分です。

また再:
https://github.com/square/retrofit/issues/1486
https://github.com/square/retrofit/issues/1506

33
qix

新しい例外をスローします 'length = 1120; index = 2310 '、予期しない保留中の例外:Java.lang.ArrayIndexOutOfBoundsException:length = 1120;インデックス= 2310

Android NougatとOreoで正常に動作していますが、マシュマロで問題が発生していました。「インスタント実行」をオフにして修正しました。[ファイル]-> [設定]-> [設定]に移動して修正してください。ビルド、実行、展開->インスタント実行およびインスタント実行オプションを無効にする

17
Abraham Mathew

私も同じ問題に直面しています:

無効にするInstant Run問題を解決します。

以下のパスに従ってください:

設定->ビルド、実行、開発-> Instant Run

10

これをバックグラウンドで使用している場合スレッドまたは任意の新しいHandler()。postDelayed()次に、このAPI呼び出しをIスレッドで使用します。

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) {

                        }
                    });
                }
            });

このコードを試してください

1
Karan

たとえば私がしたように、コードをtrycatchブロックにラップします

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