Gson은 API 응답을 변환 할 수 없습니다.

Enayet Hossain

Retrofit을 사용하여 API를 누른 후 사용자 데이터를 표시하려고합니다. 내 API 응답은 다음과 같습니다.

{ 
   "password":"111222333",
   "name":"test name",
   "email":"[email protected]",
   "username":"test1",
   "customer_id":"201060",
   "phone":"0196789"
}

하지만 안타깝게도

"BEGIN_OBJECT가 필요하지만 행 1 열 1 경로 $에서 STRING입니다."오류.

나는 내 json 응답을 보여주기 위해 완전히 붙어 있습니다.

내 User.java 클래스 :


    public class User {
      @SerializedName("name")
      @Expose
      private String name;
      @SerializedName("email")
      @Expose
      private String email;
      @SerializedName("username")
      @Expose
      private String username;
      @SerializedName("customer_id")
      @Expose
      private String customerId;
      @SerializedName("phone")
      @Expose
      private String phone;
      @SerializedName("password")
      @Expose
      private String password;
      public String getName() {
        return name;
      }
      public String getEmail() {
        return email;
      }
      public String getUsername() {
        return username;
      }
      public String getCustomerId() {
        return customerId;
      }
      public String getPhone() {
        return phone;
      }
      public String getPassword() {
        return password;
      }
    }

내 로그인 클래스 :


    Gson gson = new GsonBuilder().setLenient().create();
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("https://us-central1-gmx-notification.cloudfunctions.net/")
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
            all_api = retrofit.create(allApi.class);
    private void getUserDetails(String userName,String passWord){
            Call<User> call = all_api.getUserDetails(userName,passWord);
            call.enqueue(new Callback<User>() {
                @Override
                public void onResponse(Call<User> call, Response<User> response) {
                    if(!response.isSuccessful()){
                        Log.d(response.body());
                    }
                    else{
                        User user = response.body();
                        String content = "";
                        content+= "Name: "+user.getName()+"\n";
                        content+= "Email: "+user.getEmail()+"\n";
                        content+= "Customer ID: "+user.getCustomerId()+"\n";
                        content+= "Phone: "+user.getPhone()+"\n";
                        Log.d(content);
                  }
    });
    }

및 내 개조 API 클래스 :


    package com.material.components;
    import java.util.List;
    import retrofit2.Call;
    import retrofit2.http.GET;
    import retrofit2.http.Query;
    public interface allApi {
      @GET("login")
      Call <User> getUserDetails(
              @Query("email") String email,
              @Query("password") String password
      );
    }

유진 트로 얀 스키

내가 당신을 때리면 api https://us-central1-gmx-notification.cloudfunctions.net/[email protected]&password=12345678

이 응답을 받았습니다

오류 : 요청을 처리 할 수 ​​없습니다.

따라서 오류가 Object를 예상했지만 문자열이 있다고 말합니다. 그래서 또는 백엔드 측의 오류 또는 요청이 올바르지 않거나 요청에 무언가를 추가하는 것을 잊었습니다 (헤더 또는 다른 것 ...).

모델에없는 문제는 응답에서 기대하는 모델이 아닙니다. OkHttpClient에 인터셉터를 추가하여 확실한 것을 확인하십시오.

이 종속성을 gradle에 추가해야합니다.

implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'

다음은 로그에있는 모든 네트워킹 항목을 인쇄하는 API 코드 예제입니다.

public class NetworkManager {

    private static RESTAuthService restAuthService;

    /*timeout values in seconds*/
    private static final int CONNECTION_TIMEOUT = 10;
    private static final int WRITE_TIMEOUT = 10;
    private static final int READ_TIMEOUT = 10;

    static RESTAuthService getRESTAuthService() {
        if (restAuthService == null) {
            synchronized (NetworkManager.class) {
                if (restAuthService == null) {

                    OkHttpClient client = new OkHttpClient.Builder()
                            .addInterceptor(new RESTInterceptor())
                            .connectTimeout(CONNECTION_TIMEOUT, TimeUnit.SECONDS)
                            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
                            .build();

                    Retrofit retrofit = new Retrofit.Builder()
                            .baseUrl(NetworkConfig.BASE_AUTH_URL)
                            .addConverterFactory(GsonConverterFactory.create())
                            .client(client)
                            .build();

                    restAuthService = retrofit.create(RESTAuthService.class);
                }
            }
        }
        return restAuthService;
    }

    private static class RESTInterceptor implements Interceptor {

        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();

            Buffer buffer = new Buffer();
            if (request.body() != null) {
                request.body().writeTo(buffer);
            }
            Log.d("HTTP Request", "Request to " + request.url().toString()
                    + "\n" + request.headers().toString()
                    + "\n" + buffer.readUtf8());
            long t1 = System.nanoTime();
            Response response = chain.proceed(request);
            long t2 = System.nanoTime();

            String msg = response.body().string();
            msg = msg.replace("\r", ""); // Note: Messages with '\r' not displayed correctly in logcat

            Log.d("HTTP Response", String.format("Response from %s in %.1fms%n\n%s",
                    response.request().url().toString(), (t2 - t1) / 1e6d, msg));

            Log.d("HTTP Response", "Response code = " + response.code());

            return response.newBuilder()
                    .body(ResponseBody.create(response.body().contentType(), msg))
                    .build();
        }
    }
    }

MyLogin 클래스는 다음과 같습니다.

public class MuLogin {
/*timeout values in seconds*/
    private static final int CONNECTION_TIMEOUT = 10;
    private static final int WRITE_TIMEOUT = 10;
    private static final int READ_TIMEOUT = 10;

    allApi = all_api;

    OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(new RESTInterceptor())
        .connectTimeout(CONNECTION_TIMEOUT, TimeUnit.SECONDS)
        .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
        .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
        .build();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://us-central1-gmx-notification.cloudfunctions.net/")
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();

    all_api =retrofit.create(allApi.class);

    public void getUserDetails(String userName, String passWord) {
        Call<User> call = all_api.getUserDetails(userName, passWord);
        call.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                if (!response.isSuccessful()) {
                    Log.d(response.body());
                } else {
                    User user = response.body();
                    String content = "";
                    content += "Name: " + user.getName() + "\n";
                    content += "Email: " + user.getEmail() + "\n";
                    content += "Customer ID: " + user.getCustomerId() + "\n";
                    content += "Phone: " + user.getPhone() + "\n";
                    Log.d(content);
                }
            });
        }
    }
    private static class RESTInterceptor implements Interceptor {

        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();

            Buffer buffer = new Buffer();
            if (request.body() != null) {
                request.body().writeTo(buffer);
            }
            Log.d("HTTP Request", "Request to " + request.url().toString()
                    + "\n" + request.headers().toString()
                    + "\n" + buffer.readUtf8());
            long t1 = System.nanoTime();
            Response response = chain.proceed(request);
            long t2 = System.nanoTime();

            String msg = response.body().string();
            msg = msg.replace("\r", ""); // Note: Messages with '\r' not displayed correctly in logcat

            Log.d("HTTP Response", String.format("Response from %s in %.1fms%n\n%s",
                    response.request().url().toString(), (t2 - t1) / 1e6d, msg));

            Log.d("HTTP Response", "Response code = " + response.code());

            return response.newBuilder()
                    .body(ResponseBody.create(response.body().contentType(), msg))
                    .build();
        }
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

응답을 배열로 변환 할 수 없습니다.

분류에서Dev

AWS API Gateway 오류 : 응답을 변환하도록 프록시 통합을 구성 할 수 없습니다.

분류에서Dev

Zoho Docs API 응답을 역 직렬화 할 수 없습니다.

분류에서Dev

JSON REST API 응답을 구문 분석 할 수 없습니다.

분류에서Dev

변수에 getDownloadUrl ()의 응답을 저장할 수 없습니다

분류에서Dev

Twitter API가 부분 응답을 반환 할 수 있습니까?

분류에서Dev

문자열 목록은 gson.JsonElement로 변환 할 수 없습니다.

분류에서Dev

CS0266은 유형을 변환 할 수 없습니다.

분류에서Dev

http 응답을 전달할 때 java.lang.String 유형의 값을 JSONObject로 변환 할 수 없습니다.

분류에서Dev

HTTP 요청의 응답은 문자열에서 JSON으로 변환 할 수 없습니다.

분류에서Dev

WPF 양식에 웹 API 응답을 표시 할 수 없습니다.

분류에서Dev

ember에서 API 응답을 구문 분석 할 수 없습니다.

분류에서Dev

AdonisJS가 함수 내에서 응답을 반환 할 수 없습니다 (SAP HANA).

분류에서Dev

SQL 쿼리 응답을 C # 변수에 매핑 할 수 없습니다.

분류에서Dev

samba : net usershare add : "Everyone"이름을 SID로 변환 할 수 없습니다. 네트워크가 잘못 응답 함

분류에서Dev

EndRequest 이벤트에서 응답 내용을 변경할 수 없습니다.

분류에서Dev

RestTemplate에서받은 JSON 응답을 구문 분석 할 수 없습니다.

분류에서Dev

ImageMagick 변환은 webp로 변환 할 수 없습니다

분류에서Dev

이 OSX 버전은 필요한 dSYM 변환을 수행 할 수 없습니다.

분류에서Dev

json 응답을 구문 분석 할 수 없습니다. 실제로 비어 있지는 않지만 정의되지 않은 것을 반환합니다.

분류에서Dev

n + = 1은 0을 반환합니다. 파이썬 함수는 변수를 변경할 수 없습니다.

분류에서Dev

Google Apps Script : API 응답에서 특정 개체를 선택하려고 할 때 "null"을 반환하지만 원래 응답에서 볼 수 있습니다.

분류에서Dev

잭슨은 열거에 빈 문자열 값을 변환 할 수 없습니다

분류에서Dev

C #은 system.data.entity 집합을 변환 할 수 없습니다.

분류에서Dev

HTML을 Javascript 변수로 변환 할 수 없습니다.

분류에서Dev

빠른 응답을 반환하는 spyOn 함수, 'Response <any>'유형의 인수는 'Response'유형의 매개 변수에 할당 할 수 없습니다.

분류에서Dev

XML의 API 응답이 잘못 인코딩되었습니다. 문자열을 수정 / 변환하는 방법은 무엇입니까?

분류에서Dev

Microsoft Graph 베타 getAllMessage API를 사용할 때 항상 '알 수없는 오류'응답을받습니다.

분류에서Dev

jquery 응답 후 dataTable을 다시로드 할 수 없습니다.

Related 관련 기사

  1. 1

    응답을 배열로 변환 할 수 없습니다.

  2. 2

    AWS API Gateway 오류 : 응답을 변환하도록 프록시 통합을 구성 할 수 없습니다.

  3. 3

    Zoho Docs API 응답을 역 직렬화 할 수 없습니다.

  4. 4

    JSON REST API 응답을 구문 분석 할 수 없습니다.

  5. 5

    변수에 getDownloadUrl ()의 응답을 저장할 수 없습니다

  6. 6

    Twitter API가 부분 응답을 반환 할 수 있습니까?

  7. 7

    문자열 목록은 gson.JsonElement로 변환 할 수 없습니다.

  8. 8

    CS0266은 유형을 변환 할 수 없습니다.

  9. 9

    http 응답을 전달할 때 java.lang.String 유형의 값을 JSONObject로 변환 할 수 없습니다.

  10. 10

    HTTP 요청의 응답은 문자열에서 JSON으로 변환 할 수 없습니다.

  11. 11

    WPF 양식에 웹 API 응답을 표시 할 수 없습니다.

  12. 12

    ember에서 API 응답을 구문 분석 할 수 없습니다.

  13. 13

    AdonisJS가 함수 내에서 응답을 반환 할 수 없습니다 (SAP HANA).

  14. 14

    SQL 쿼리 응답을 C # 변수에 매핑 할 수 없습니다.

  15. 15

    samba : net usershare add : "Everyone"이름을 SID로 변환 할 수 없습니다. 네트워크가 잘못 응답 함

  16. 16

    EndRequest 이벤트에서 응답 내용을 변경할 수 없습니다.

  17. 17

    RestTemplate에서받은 JSON 응답을 구문 분석 할 수 없습니다.

  18. 18

    ImageMagick 변환은 webp로 변환 할 수 없습니다

  19. 19

    이 OSX 버전은 필요한 dSYM 변환을 수행 할 수 없습니다.

  20. 20

    json 응답을 구문 분석 할 수 없습니다. 실제로 비어 있지는 않지만 정의되지 않은 것을 반환합니다.

  21. 21

    n + = 1은 0을 반환합니다. 파이썬 함수는 변수를 변경할 수 없습니다.

  22. 22

    Google Apps Script : API 응답에서 특정 개체를 선택하려고 할 때 "null"을 반환하지만 원래 응답에서 볼 수 있습니다.

  23. 23

    잭슨은 열거에 빈 문자열 값을 변환 할 수 없습니다

  24. 24

    C #은 system.data.entity 집합을 변환 할 수 없습니다.

  25. 25

    HTML을 Javascript 변수로 변환 할 수 없습니다.

  26. 26

    빠른 응답을 반환하는 spyOn 함수, 'Response <any>'유형의 인수는 'Response'유형의 매개 변수에 할당 할 수 없습니다.

  27. 27

    XML의 API 응답이 잘못 인코딩되었습니다. 문자열을 수정 / 변환하는 방법은 무엇입니까?

  28. 28

    Microsoft Graph 베타 getAllMessage API를 사용할 때 항상 '알 수없는 오류'응답을받습니다.

  29. 29

    jquery 응답 후 dataTable을 다시로드 할 수 없습니다.

뜨겁다태그

보관