2016-12-07 114 views
0

我已經使用翻新文件上傳。它工作正常。但是如何處理改造成功的迴應。以及如何爲下面的Json數組和Json對象創建序列化模型類。如何從改造響應中獲取JSON ARRAY和JSON對象響應?

{ 
     "result": [{ 
      "fileId": 869, 
      "status": 1, 
      "pcData": { 
       "id": 652, 
       "filename": "IMG_20161122_175344.jpg", 
       "filepath": "uploads\/peoplecaddie\/files\/1743_1481109145_IMG_20161122_175344.jpg" 
      } 
     }] 
    } 

這裏是我的電話方法

Call<ServerResponse> call = service.upload("817b6ce98fd759e7f148b948246df6c1", map, idReq, fileCountReq, fileTypeReq, platformReq, externalIDReq); 
     call.enqueue(new Callback<ServerResponse>() { 
      @Override 
      public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) { 
       ServerResponse serverResponse = response.body(); 
       Log.e("serverResponse", "serverResponse" + serverResponse.toString()); 
       if (serverResponse != null) { 


       } 

      } 

      @Override 
      public void onFailure(Call<ServerResponse> call, Throwable t) { 

      } 
     }); 

我有疑問,如何實現用JSON陣列領域,JSON對象,領域和字符串值是JSON對象內部ServerResponse模型類。

public class ServerResponse { 
    //How to handle my response with in this model class. 

} 

請幫我解決這個問題。提前致謝。

+0

您的代碼看起來不錯。您可以使用serverResponse對象訪問數據。如果你想要一個JsonObject for ServerResponse,你可以讓Gson解析它。是否遇到onFailure或onSuccess回調? –

回答

2

創建類如下,並使用ServerResponse作爲th E型類而call

ServerResponse.class

public class ServerResponse { 

    @SerializedName("result") 
    private ArrayList<Result> mResult; 

    public ArrayList<Result> getResult() { 
     return mResult; 
    } 

    public void setResult(ArrayList<Result> result) { 
     mResult = result; 
    } 
} 

Result.class

public class Result { 

    @SerializedName("fileId") 
    private int mFileId; 

    @SerializedName("status") 
    private String mstatus; 

    @SerializedName("pcData") 
    private PcData mPcData; 

    public int getFileId() { 
     return mFileId; 
    } 

    public void setFileId(int fileId) { 
     mFileId = fileId; 
    } 

    public String getMstatus() { 
     return mstatus; 
    } 

    public void setMstatus(String mstatus) { 
     this.mstatus = mstatus; 
    } 

    public PcData getPcData() { 
     return mPcData; 
    } 

    public void setPcData(PcData pcData) { 
     mPcData = pcData; 
    } 
} 

PcData.class

private class PcData { 

    @SerializedName("id") 
    private int mId; 

    @SerializedName("filename") 
    private String mFileName; 

    @SerializedName("filepath") 
    private String mFilePath; 

    public int getId() { 
     return mId; 
    } 

    public void setId(int id) { 
     mId = id; 
    } 

    public String getFileName() { 
     return mFileName; 
    } 

    public void setFileName(String fileName) { 
     mFileName = fileName; 
    } 

    public String getFilePath() { 
     return mFilePath; 
    } 

    public void setFilePath(String filePath) { 
     mFilePath = filePath; 
    } 
} 

,您的電話應該是這樣的:

Call<ServerResponse> call = service.upload("817b6ce98fd759e7f148b948246df6c1", map, idReq, fileCountReq, fileTypeReq, platformReq, externalIDReq); 
    call.enqueue(new Callback<ServerResponse>() { 
     @Override 
     public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) { 
      ServerResponse serverResponse = response.body(); 
      if (serverResponse != null) { 
       //below is how you can get the list of result 
       List<Result> resultList = response.getResult(); 
      } 

     } 

     @Override 
     public void onFailure(Call<ServerResponse> call, Throwable t) { 

     } 
    }); 
+0

謝謝@AkshayBhat,工作正常 – karthik

+0

隨時歡迎:) –

3

您可以通過下面的代碼聲明你的服務

Call<ServerResponse<ArrayList<YourModel>>> 

public class ServerResponse<T> { 

private T result; 
public T getResult() { 
    return data; 
} 

public void setResult(T data) { 
    this.data = data; 
} 


} 

,那麼你將在onResponse方法接收ServerResponse,並通過調用SErverResponse的方法的getResult得到lsit。

0

你可以改造

使用RxJava

首先創建POJO的爲你的JSON響應,您可以使用http://www.jsonschema2pojo.org/這樣做。

那麼對於改造創建一個Singleton類

public class RetroSingleton { 
    private static RetroSingleton ourInstance = new RetroSingleton(); 

    public static RetroSingleton getInstance() { 
     return ourInstance; 
    } 

    private RetroSingleton() { 
    } 

    public RestApi getRestApi() { 
     HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 
     logging.setLevel(HttpLoggingInterceptor.Level.BODY); 

     OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); 
     httpClient.addInterceptor(logging); 
     OkHttpClient client = httpClient.build(); 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(ConstUrl.BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
       .client(client) 
       .build(); 

     return retrofit.create(RestApi.class); 
    } 
} 

然後創建一個界面,在這裏您可以定義做網絡所有的方法調用

public interface RestApi { 

/* 
*@POST or @GET type of call 

*/ 
    @POST("url")// either full url or path of url 
    Observable<YourResponsePojo> methodName(@Query("nameOfField") String field); 

    @GET("url") 
    Observable<YourResponsePojo> methodName(); 

} 

最後使用的呼叫時,可以使用

RetroSingleton.getInstance().getRestApi().methodName() 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Observer<YourResponsePojo>() { 
      @Override 
      public void onCompleted() { 
       hideProgressDialog(); 
      } 

      @Override 
      public void onError(Throwable e) { 

      } 

      @Override 
      public void onNext(YourResponsePojo yourResponsePojo) { 
// yourResponsePojo contains all of your response body 
      } 
     });