2016-10-05 4 views
-3

Retrofit으로 json 형식을 읽으려면 어떻게해야합니까?json with Retrofit - Android를 읽으시겠습니까?

{"Key":null,"Response":1} 

주의 사항

내가 사용하고 :

compile 'com.squareup.okhttp3:okhttp:3.4.1' 
compile 'com.google.code.gson:gson:2.6.1' 
compile 'com.squareup.retrofit2:retrofit:2.1.0' 
compile 'com.squareup.retrofit2:converter-gson:2.1.0' 

내 코드 것은 :

private void loadJSON(String username, String password) { 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl("http://192.168.8.11:8087/") 
      .addConverterFactory(GsonConverterFactory.create(new Gson())) 
      .build(); 

    RequestInterface_Login request = retrofit.create(RequestInterface_Login.class); 
    Call<JSONResponseLogin> call = request.getJSON(username, password); 
    call.enqueue(new Callback<JSONResponseLogin>() { 
     @Override 
     public void onResponse(Call<JSONResponseLogin> call, Response<JSONResponseLogin> response) { 

      JSONResponseLogin jsonResponse = response.body(); 
      data = new ArrayList<>(Arrays.asList(jsonResponse.getLogin())); 
     } 

     @Override 
     public void onFailure(Call<JSONResponseLogin> call, Throwable t) { 
      Log.d("Error", t.getMessage()); 
     } 
    }); 
} 

그리고 JSONResponseLogin :

public class JSONResponseLogin { 
    private ModelLogin[] login; 

    public ModelLogin[] getLogin() { 
     return login; 
    } 
} 

그리고 ModelLogin :

public class ModelLogin { 
    private Object Key; 
    private Integer Response; 

    public Object getKey() { 
     return Key; 
    } 

    public Integer getResponse() { 
     return Response; 
    } 
} 

그리고 RequestInterface_Login :

public interface RequestInterface_Login { 

    @GET("/courier.svc/login") 
    Call<JSONResponseLogin> getJSON(@Query("username") String username, @Query("password") String password); 
} 

충돌 나 :

java.lang.NullPointerException: storage == null 

enter image description here

+0

귀하가 올린 코드가 귀하의 코드 줄을 가리 키지 않으므로 전체 스택 트레이스를 넣으십시오. – jakubbialkowski

답변

0

{ "키": NULL, "응답": 1}

사용 위의 JSON이 POJO 클래스 ....

public class Result { 

@SerializedName("Key") 
@Expose 
private Object key; 
@SerializedName("Response") 
@Expose 
private Integer response; 

/** 
* 
* @return 
* The key 
*/ 
public Object getKey() { 
return key; 
} 

/** 
* 
* @param key 
* The Key 
*/ 
public void setKey(Object key) { 
this.key = key; 
} 

/** 
* 
* @return 
* The response 
*/ 
public Integer getResponse() { 
return response; 
} 

/** 
* 
* @param response 
* The Response 
*/ 
public void setResponse(Integer response) { 
this.response = response; 
} 

} 

이 메소드를 호출 ....

Call<Result> call = request.getJSON(username, password); 
    call.enqueue(new Callback<Result>() { 
     @Override 
     public void onResponse(Call<Result> call, Response<Result> response) { 
      if (response.isSuccessful()) { 
       //statements on sucesss  
       }else{ 
       //statements when server have problem or Api problem 
        } 
     } 

     @Override 
     public void onFailure(Call<Result> call, Throwable t) { 
      Log.d("Error", t.getMessage()); 
     } 
    }); 
} 
0

값이 null이 될 것으로 예상 될 때마다 Stirng 또는 int 대신 오브젝트 유형을 사용해야합니다. 적절한 응답을 얻으려면 Pojo 클래스 아래에서 사용하십시오.

public class Response { 

    private Object Key; 
    private int Response; 

    public Object getKey() { 
     return Key; 
    } 

    public void setKey(Object Key) { 
     this.Key = Key; 
    } 

    public int getResponse() { 
     return Response; 
    } 

    public void setResponse(int Response) { 
     this.Response = Response; 
    } 
}