2017-05-31 35 views
-3

我剛開始研究Retrofit庫,所以真的要求一點幫助。我試圖從響應中獲取數據,但我只能鏈接到對象。改造:試圖從響應中獲得結果

interface IApi { 
@GET("api") 
Call<PostModel> getData(); 
} 

/*---------------------------------------------------------------------*/ 

public class App extends Application { 

private static IApi siteApi; 

@Override 
public void onCreate() { 
    super.onCreate(); 

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); 


    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl("https://yesno.wtf/") 
      .addConverterFactory(GsonConverterFactory.create()) 
      .client(client) 
      .build(); 
    siteApi = retrofit.create(IApi.class); 
} 

public static IApi getApi() { 
    return siteApi; 
} 
} 

/*------------------------------------------------------------------------*/ 

class PostModel { 

    @SerializedName("answer") 
    @Expose 
    private String answer; 
    @SerializedName("forced") 
    @Expose 
    private Boolean forced; 
    @SerializedName("image") 
    @Expose 
    private String image; 

    public String getAnswer() { 
     return answer; 
    } 

    public void setAnswer(String answer) { 
     this.answer = answer; 
    } 

    public Boolean getForced() { 
     return forced; 
    } 

    public void setForced(Boolean forced) { 
     this.forced = forced; 
    } 

    public String getImage() { 
     return image; 
    } 

    public void setImage(String image) { 
     this.image = image; 
    } 

    } 

/*------------------------------------------------------------------------*/ 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    App.getApi().getData().enqueue(new Callback<PostModel>() { 

     @Override 
     public void onResponse(Call<PostModel> call, Response<PostModel> response) { 

      Log.e("Response", response.body().toString()); 

     } 

     @Override 
     public void onFailure(Call<PostModel> call, Throwable t) { 
      t.printStackTrace(); 
      Toast.makeText(MainActivity.this, "An error occurred during networking", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
} 

我想,有一些變量類型的問題,但我不知道...我會很感激任何幫助。

UPD: 我的logcat:

...

d/OkHttp { 「答案」: 「沒有」, 「強迫」:假的, 「形象」: 「https://yesno.wtf/assets/no/27-8befe9bcaeb66f865dd3ecdcf8821f51.gif」 }

d/OkHttp:< - END HTTP(108字節體)

E /響應:[email protected]

所以問題是我如何能得到我的迴應的身體? (「答案」:「沒有」,「強迫」:假的,「形象」:「https://yesno.wtf/assets/no/27-8befe9bcaeb66f865dd3ecdcf8821f51.gif」)

+0

你所說的 '鏈接對象' 呢? 'response.body()'中沒有值? – RadekJ

+0

可否請您指定問題以及logcat –

+0

您的問題是什麼?你可以發佈日誌貓 –

回答

0

根據您迴應

模型PostModel看起來不錯, 嘗試在你的方式

我的工作示例

接口

public interface ServiceInterface { 

     @GET(HttpConstants.USERDATAJSON) 
     Call<ListData>taskData(@Query("method")String method,@Query("stdID")int stdID); 
    } 

服務類

public class ServiceClass { 
     static ServiceInterface serviceInterface; 
    // public static final String baseUrl= HttpConstants.BASE_URL_GEONAME; 
     public static final String baseUrl= HttpConstants.baseUrl; 

     public static ServiceInterface connection(){ 
      if(serviceInterface==null){ 
       HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
       interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
       OkHttpClient client = new OkHttpClient(); 
       client.interceptors().add(new Interceptor() { 
        @Override 
        public Response intercept(Chain chain) throws IOException { 
         Response response=chain.proceed(chain.request()); 
         return response; 
        } 
       }); 
       Retrofit retrofit = new Retrofit.Builder() 
         .client(client) 
         .addConverterFactory(GsonConverterFactory.create()) 
         .baseUrl(baseUrl) 
         .build(); 
       serviceInterface=retrofit.create(ServiceInterface.class); 
      } 
      return serviceInterface; 
     } 
    } 

呼叫

public void getTaskData(){ 
     ServiceInterface serviceInterface=ServiceClass.connection(); 
     Call<ListData> call=serviceInterface.taskData("getAllUsersSimple",0); 
     call.enqueue(new Callback<ListData>() { 
      @Override 
      public void onResponse(Response<ListData> response, Retrofit retrofit) { 
       Log.v("@@@Response",""+response.toString()); 
       if(response.isSuccess()){ 
        listData=response.body(); 
        dataList=listData.getData(); 
        printStudentDetails(dataList); 

       } 
      } 

      @Override 
      public void onFailure(Throwable t) { 
       Log.v("@@@Failure"," Message"+t.getMessage()); 
      } 
     }); 
    } 

示範

public class ListData { 

    @SerializedName("data") 
    @Expose 
    private List<DataPojo> data = null; 
    @SerializedName("code") 
    @Expose 
    private Integer code; 
    @SerializedName("message") 
    @Expose 
    private String message; 

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

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

    public Integer getCode() { 
     return code; 
    } 

    public void setCode(Integer code) { 
     this.code = code; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

} 

public class DataPojo { 

    @SerializedName("user_id") 
    @Expose 
    private String userId; 
    @SerializedName("user_name") 
    @Expose 
    private String userName; 
    @SerializedName("user_age") 
    @Expose 
    private String userAge; 

    public String getUserId() { 
     return userId; 
    } 

    public void setUserId(String userId) { 
     this.userId = userId; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public String getUserAge() { 
     return userAge; 
    } 

    public void setUserAge(String userAge) { 
     this.userAge = userAge; 
    } 

} 

更多的全球化志願服務青年,請訪問 https://github.com/pratikvyas1991/NetworkingExample/tree/master/app/src/main/java/com/ims/tasol/networkingexample

+0

@ I.Ardel試圖從上面得到參考,它是工作示例 –

+0

謝謝你。我會用它 –