2017-09-05 7 views
-1

今日、私はRetrofitがgson(または他のコンバータ)を使ってjsonの応答(okhttpや関連するライブラリを使って得た応答)を直列化または逆シリアル化することを知りました。 私は(ある意味ではまだまだ)素朴で、Volleyを使用していましたが、当時私はGsonや関連ライブラリを使用していませんでしたが、okhttpでも同じでした。私は私の応答を得て、再生回数GsonなしでVolleyを使う

1.今、VolleyはGsonとOkhttpを使用してRetrofitの機能を内部的に行いますか? そうでない場合は、 2.それでは、何も使わずにどのように値を解析することができましたか?以下は

私が書くために使用するサンプル・コードである: -

JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(
      Request.Method.POST, URL_THUMB, null, new Response.Listener<JSONObject>() { 

     @Override 
     public void onResponse(JSONObject response) { 
      try { 
       JSONArray jsonArray=response.getJSONArray("server_response"); 
       for(int i=0;i<jsonArray.length();i++) 
       { 
        JSONObject jsonObject=(JSONObject)jsonArray.get(i); 
        String id=jsonObject.getString("id"); 
        String artist_name=jsonObject.getString("artist_name"); 
        String img_id=jsonObject.getString("img_id"); 

        listId.add(id); 
        listArtistName.add(artist_name); 
        listImgID.add(img_id); 

       } 

       recyclerView.setAdapter(comedy_adapter); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

     } 
    } 
    ); 

、今ちょうど私の意見にこれらのリスト値を膨らませます。私は間違って行くのです

? (私はものがうまくいってコードが常に正常に実行されるので間違っているとは思わない)

答えて

1

あなたの例では、JSON配列とオブジェクトへの応答を手動で解析しています。 Gsonなどのコンバーターでは、応答をカスタムオブジェクトの変数に1行で解析することができます。例えば

、私は次のモデルがある場合:

public class Model { 
    private int id; 
    private String name; 
} 

を私は次のコードを使用して文字列の応答を解析することができます

Model model = gson.fromJson(str, Model.class); 

をそうでない場合は、手動で行う必要があり、何のような現時点であなたがやっていること:

JSONObject jsonObject = response.getJSONObject("str"); 
int id = jsonObject.getInt("id"); 
String name = jsonObject.getString("name"); 
Model model = new Model(id, name); 

レトロフィット2では、に電話する必要はありません- あなたは、入力パラメータとして期待するオブジェクトをonResponseに受け取ります。より複雑なモデルを扱う際には非常に便利です。