2017-01-10 8 views
1

私は多くの情報を提供するサーバからリクエストを出す必要があります。検索で見つかったものから、モデルクラスでのみこれを行うことができるようです。サーバーが私に送るすべての応答をカバーするためには、情報を格納する53のモデルクラスを作成する必要があります。JSONObjectでretrofitを呼び出します。

JSONなどの情報を保存するなどの簡単な方法があるのだろうかと思っていました。

私はOKHttpでRetrofitを使用しています。

getTimeSessionsCall.enqueue(new Callback<JSONObject>() { 
     @Override 
     public void onResponse(Call<JSONObject> call, Response<JSONObject> response) { 

      Log.i("getTimeSessions",Integer.toString(response.code())); 

     } 

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

     } 
    }); 

私はこの種の呼び出しを試みて何も保存しませんでした。コードは200ですが、JSONは空のままです。

ありがとうございます!

+0

GSONのJsonObjectを代わりに使用することをお勧めします。これは、Retrofit 2ですでに利用可能なGsonConverterFactoryによって簡単にマップされます.APIインターフェイスコールの結果としてコールを設定できます。 –

答えて

5

JSONObjectがnullの理由は、Retrofitがレスポンスの解析方法を知らないためです。あなたができることは、レスポンスを文字列として取得し、そこからJsonObjectを構築することです。あなたがScalarConvertorsFactoryを使用する必要がありますし、あなたの方法は

getTimeSessionsCall.enqueue(new Callback<String>() { 
     @Override 
     public void onResponse(Call<String> call, Response<String> response) { 

      // Get the string and convert to JSONObject 

     } 

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

     } 
    }); 

のようになります。

compile 'com.squareup.retrofit2:converter-scalars:2.1.0'を追加し、addConvertorFactory(ScalarsConvertorFactory.create())

+1

これははるかに簡単です、ありがとうございます! –

+0

変換の最新バージョンを使用するには、この[link](https://futurestud.io/tutorials/retrofit-2-introduction-to-multiple-converters)にアクセスしてください。 –

1
を使用してレトロフィットインスタンスを作成するときにコンバータの工場を追加することを忘れないでくださいことを行うために

GsonConverterFactoryを使用することをお勧めします。

Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl("https://api.example.com") 
    .addConverterFactory(GsonConverterFactory.create()) 
    .build(); 

あなたのJSONレスポンスのスキーマに基づいて、あなたのJSONオブジェクトを作成するためにthis toolを使用することができます。これらのツールを使用すると、JSONをJavaオブジェクトに変換するときに、魔法を楽しむことができます。

+0

jsonに変換しようとしている理由はモデルクラスが生成され、それらのすべてが必要でない可能性があります。そのため、プロジェクトのサイズを増やし、複雑さとメモリ消費を増加させます – akash93

関連する問題