java.lang.IllegalStateException:BEGIN_ARRAYが必要でしたが、BEGIN_OBJECT -ANDROIDRETROFIT2でした

user8164155

私はstackoverflowでこの質問を何度か見ましたが、それらの答えは私の問題を修正せず、私はレトロフィットに不慣れです。ログインインターフェイスにレトロフィットを使用しています。ユーザー名とパスワードを送信すると、応答は内部に2つのトークンになります配列。ログインしようとすると、ログ猫が表示されます。 java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT

リクエスト

POST:フォーム-urlencorded

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(AllConstants.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();


  public void getUser(String username,String password){

        WebserviceAPI apiService =retrofit.create(WebserviceAPI.class);
        Call<UserResponse> call = apiService.getUsers("signin",username,password);
        call.enqueue(new Callback<UserResponse>() {
            @Override
            public void onResponse(Call<UserResponse> call, Response<UserResponse> response) {
                UserResponse result = response.body();
                Log.d("res",""+result.getData());

            }

            @Override
            public void onFailure(Call<UserResponse> call, Throwable t) {
                Log.d("res",""+t.getMessage());

            }
        });
    }

モデルクラス

public class User {

    String id;
    String username;
    String email;
    String access_token;
    String refresh_token;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAccess_token() {
        return access_token;
    }

    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }

    public String getRefresh_token() {
        return refresh_token;
    }

    public void setRefresh_token(String refresh_token) {
        this.refresh_token = refresh_token;
    }

}

UserResponse.java

public class UserResponse {
    List<User> data;

    public List<User> getData() {
        return data;
    }

    public void setData(List<User> data) {
        this.data = data;
    }

}

インターフェース

public interface WebserviceAPI {
    @FormUrlEncoded
    @POST("auth")
    Call<UserResponse> getUsers(@Field("module_action") String signin ,@Field("username") String username,@Field("password") String password);
}

サーバー側からの応答:PHP

$response = ['status' => true,
            'message' => "Successfully logged in",
            'data' => [
              'access_token' => $accessToken,
              'refresh_token' => $refreshToken
            ],
          ];
            $this->returnJson($response, 200);

Postmanで実行すると、応答は次のようになります

ここに画像の説明を入力してください

- - - - 更新 - - - - - -

いくつかの応答のみを含んstatusmessage

応答例:

{
    "status": false,
    "message": "Inactive User"
}

それから私は取得したいですmessage

私が編集したUserResponse以下のようにして取得しようmessage.then示しますjava.lang.NullPointerException at com.android.app.myapp.Login$3.onResponse(Login.java:92)

 public class UserResponse {
        @SerializedName("status")
        @Expose
        private String status;
    
        @SerializedName("message")
        @Expose
        private String message;
    
        User data;
    
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public User getData() {
            return data;
        }
    
        public void setData(User data) {
            this.data = data;
        }
    
    }

public void getUser(String username,String password){

        WebserviceAPI apiService =retrofit.create(WebserviceAPI.class);
        Call<UserResponse> call = apiService.getUsers("signin",username,password);
        call.enqueue(new Callback<UserResponse>() {
            @Override
            public void onResponse(Call<UserResponse> call, Response<UserResponse> response) {
                UserResponse result = response.body();
                //User data = result.getData();
                Log.d("userresponse",""+result.getMessage());
              
            }

            @Override
            public void onFailure(Call<UserResponse> call, Throwable t) {
                Log.d("res",""+t.getMessage());

            }
        });
    }
ニクヒル・グプタ

Postmanの応答データフィールドは、JSON配列としてではなく、JSONオブジェクトとして提供されます。これが当てはまり、UserResponseモデルのリストとして「データ」フィールドを使用している場合、それをマップすることはできません。これが私が思う問題です。これを解決するには、以下のUserResponseデータモデルを使用できます。

public class UserResponse {
    User data;

    public User getData() {
        return data;
    }

    public void setData(User data) {
        this.data = data;
    }

}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、1行2列目がBEGIN_OBJECTでした

分類Dev

java.lang.IllegalStateException:BEGIN_ARRAYが必要でしたが、パスでBEGIN_OBJECTでした

分類Dev

レトロフィット-java.lang.IllegalStateException:BEGIN_ARRAYが必要でしたが、BEGIN_OBJECTでした

分類Dev

java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、BEGIN_OBJECT Androidエラーでした

分類Dev

致命的な例外:java.lang.RuntimeException-java.lang.IllegalStateExceptionが原因で発生します。BEGIN_ARRAYが必要ですが、BEGIN_OBJECTでした

分類Dev

GSONを使用したJson解析:JsonSyntaxException:java.lang.IllegalStateException:BEGIN_OBJECTが必要ですが、行1、列2のパス$でBEGIN_ARRAYでした

分類Dev

java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、行1、列2のパスでBEGIN_OBJECTでした$ -Retrofit 2 Android kotlin

分類Dev

java.lang.IllegalStateException:BEGIN_ARRAYが必要でしたが、BEGIN_OBJECTRetrofitでした

分類Dev

Androidのレトロフィット:java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、行1、列2のパスでBEGIN_OBJECTでした

分類Dev

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、1行目101パスでBEGIN_OBJECTでした

分類Dev

java.lang.IllegalStateException:BEGIN_OBJECTが必要ですが、BEGIN_ARRAYKotlinでした

分類Dev

java.lang.illegalstateException:BEGIN_OBJECTが必要ですが、BEGIN_ARRAYRetrofitでした

分類Dev

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:文字列が必要でしたが、BEGIN_OBJECTでした

分類Dev

Google Gson-com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:文字列が必要でしたが、BEGIN_OBJECTでした

分類Dev

JSONエラー「java.lang.IllegalStateException:BEGIN_OBJECTが必要ですが、1行1列1パス$でSTRINGでした」

分類Dev

Java:BEGIN_OBJECTが必要ですが、行1、列2のパス$でBEGIN_ARRAYでした

分類Dev

Map <String、String>をPOJOのリストに変換します-java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、STRINGでした

分類Dev

BEGIN_ARRAYが必要でしたが、BEGIN_OBJECTでした

分類Dev

Android Javaはbegin_objectを期待していましたが、begin_arrayでした

分類Dev

GsonでJSON(ストリームモード)を解析するJAVAエラー:BEGIN_ARRAYが必要ですが、行1列2パス$でBEGIN_OBJECTでした

分類Dev

Java gsonエラー:BEGIN_OBJECTが必要ですが、BEGIN_ARRAYでした(ただし、タイプマップは正しいですか?)

分類Dev

JSON エラー: 原因: java.lang.IllegalStateException: BEGIN_OBJECT が予期されていましたが、行 1 列 1 パス $ で STRING でした

分類Dev

Retrofit 2.0.0 beta2:begin_arrayが必要でしたが、begin_objectでした

分類Dev

行1列828パス$ .data.user.agent.identity_typeでBEGIN_OBJECT期待されたがSTRING:java.lang.IllegalStateException

分類Dev

BEGIN_ARRAYが必要ですが、1行2列目がBEGIN_OBJECTでした

分類Dev

改造-BEGIN_ARRAYが必要でしたが、BEGIN_OBJECTでしたか?

分類Dev

Gradleのビルドはjava.lang.IllegalStateExceptionで失敗:期待BEGIN_ARRAYが、行1列1パス$でSTRINGました

分類Dev

"java.lang.illegalStateExpection:文字列が必要ですが、kotlinの1行目列145パス$ .docs [0] .descriptionでBEGIN_ARRAYでした"

分類Dev

GSON & ボレー => BEGIN_ARRAY が必要でしたが、行 1 列 2 パス $ で BEGIN_OBJECT でした

Related 関連記事

  1. 1

    java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、1行2列目がBEGIN_OBJECTでした

  2. 2

    java.lang.IllegalStateException:BEGIN_ARRAYが必要でしたが、パスでBEGIN_OBJECTでした

  3. 3

    レトロフィット-java.lang.IllegalStateException:BEGIN_ARRAYが必要でしたが、BEGIN_OBJECTでした

  4. 4

    java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、BEGIN_OBJECT Androidエラーでした

  5. 5

    致命的な例外:java.lang.RuntimeException-java.lang.IllegalStateExceptionが原因で発生します。BEGIN_ARRAYが必要ですが、BEGIN_OBJECTでした

  6. 6

    GSONを使用したJson解析:JsonSyntaxException:java.lang.IllegalStateException:BEGIN_OBJECTが必要ですが、行1、列2のパス$でBEGIN_ARRAYでした

  7. 7

    java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、行1、列2のパスでBEGIN_OBJECTでした$ -Retrofit 2 Android kotlin

  8. 8

    java.lang.IllegalStateException:BEGIN_ARRAYが必要でしたが、BEGIN_OBJECTRetrofitでした

  9. 9

    Androidのレトロフィット:java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、行1、列2のパスでBEGIN_OBJECTでした

  10. 10

    com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、1行目101パスでBEGIN_OBJECTでした

  11. 11

    java.lang.IllegalStateException:BEGIN_OBJECTが必要ですが、BEGIN_ARRAYKotlinでした

  12. 12

    java.lang.illegalstateException:BEGIN_OBJECTが必要ですが、BEGIN_ARRAYRetrofitでした

  13. 13

    com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:文字列が必要でしたが、BEGIN_OBJECTでした

  14. 14

    Google Gson-com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:文字列が必要でしたが、BEGIN_OBJECTでした

  15. 15

    JSONエラー「java.lang.IllegalStateException:BEGIN_OBJECTが必要ですが、1行1列1パス$でSTRINGでした」

  16. 16

    Java:BEGIN_OBJECTが必要ですが、行1、列2のパス$でBEGIN_ARRAYでした

  17. 17

    Map <String、String>をPOJOのリストに変換します-java.lang.IllegalStateException:BEGIN_ARRAYが必要ですが、STRINGでした

  18. 18

    BEGIN_ARRAYが必要でしたが、BEGIN_OBJECTでした

  19. 19

    Android Javaはbegin_objectを期待していましたが、begin_arrayでした

  20. 20

    GsonでJSON(ストリームモード)を解析するJAVAエラー:BEGIN_ARRAYが必要ですが、行1列2パス$でBEGIN_OBJECTでした

  21. 21

    Java gsonエラー:BEGIN_OBJECTが必要ですが、BEGIN_ARRAYでした(ただし、タイプマップは正しいですか?)

  22. 22

    JSON エラー: 原因: java.lang.IllegalStateException: BEGIN_OBJECT が予期されていましたが、行 1 列 1 パス $ で STRING でした

  23. 23

    Retrofit 2.0.0 beta2:begin_arrayが必要でしたが、begin_objectでした

  24. 24

    行1列828パス$ .data.user.agent.identity_typeでBEGIN_OBJECT期待されたがSTRING:java.lang.IllegalStateException

  25. 25

    BEGIN_ARRAYが必要ですが、1行2列目がBEGIN_OBJECTでした

  26. 26

    改造-BEGIN_ARRAYが必要でしたが、BEGIN_OBJECTでしたか?

  27. 27

    Gradleのビルドはjava.lang.IllegalStateExceptionで失敗:期待BEGIN_ARRAYが、行1列1パス$でSTRINGました

  28. 28

    "java.lang.illegalStateExpection:文字列が必要ですが、kotlinの1行目列145パス$ .docs [0] .descriptionでBEGIN_ARRAYでした"

  29. 29

    GSON & ボレー => BEGIN_ARRAY が必要でしたが、行 1 列 2 パス $ で BEGIN_OBJECT でした

ホットタグ

アーカイブ