2017-03-07 47 views
-3

这里是我的代码任何一个帮助,为什么它显示响应为空?有一些我找不到的错误。改装调用JSON数据,但其响应显示为空

public void getAllTasksWithSuccess(){ 
    String url = ""+ RetrofitClient.baseURL +"here is my service code "; 
    RetrofitClient.createRetrofitInstance(); 
    Call<ResponseBody> call = RetrofitClient.getCallObject("getTodaysTask",url); 
    call.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 

      try { 
       Log.i("TAG",response.body().string()); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onFailure(Call<ResponseBody> call, Throwable t) { 
      Log.i("tag2", "Failed : " + t.getMessage()); 
     } 
    }); 
} 
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String okhttp3.ResponseBody.string()' on a null object reference 
                    at com.ra.ra.DashboardFragments.FragmentTasks$2.onResponse(FragmentTasks.java:83) 
+0

响应为空或res ponse.body()是空的? –

+0

检查响应码 – Vaibhavi

+0

yes ... response.body()为空。 –

回答

0

添加以下类ServiceGenerator:

public class ServiceGenerator { 

public static final String API_BASE_URL = AppConstants.BASE_URL; 


private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 

public static Retrofit retrofit = null; 

private static Retrofit.Builder builder = 
     new Retrofit.Builder() 
       .baseUrl(API_BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()); 

public static Retrofit retrofit() { 
    retrofit = builder.client(httpClient.build()).build(); 
    return retrofit; 
} 
} 

,并使用下面ErrorUtils类来解析您回应的errorBody:

public class ErrorUtils { 

public static ResponseBody parseError(Response<?> response) { 
    Converter<ResponseBody, ResponseBody> converter = 
      ServiceGenerator.retrofit() 
        .responseBodyConverter(ResponseBody.class, new Annotation[0]); 

    ResponseBody error; 

    try { 
     error = converter.convert(response.errorBody()); 
    } catch (IOException e) { 
     return new ResponseBody(); 
    } 

    return error; 
} 
} 

现在你onResponse做如下:

public void getAllTasksWithSuccess(){ 
String url = ""+ RetrofitClient.baseURL +"here is my service code "; 
RetrofitClient.createRetrofitInstance(); 
Call<ResponseBody> call = RetrofitClient.getCallObject("getTodaysTask",url); 
call.enqueue(new Callback<ResponseBody>() { 
    @Override 
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 
     if(response.isSuccessful()){ 
       // here your response.body() will not be null 
     }else{ 
       // here your response.body() will be null 
       // and here you might get your response in response.errorBody(); 


       ResponseBody res= ErrorUtils.parseError(response); 
       System.out.println("Response is:"+ res.toString()); 
     } 

    } 

    @Override 
    public void onFailure(Call<ResponseBody> call, Throwable t) { 
     Log.i("tag2", "Failed : " + t.getMessage()); 
    } 
}); 
}