2017-06-28 24 views
0

レトロフィットを使用してjsonレスポンスを取得できません。私はエラーがある行をコミントしました。Jsonレスポンスを取得できません

これがメインの活動にある

public class MainActivity extends AppCompatActivity { 

    private RecyclerView rvMain; 
    private RVMainAdapter mRVMainAdapter; 

    private ArrayList<Chef> data; 

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

     rvMain = (RecyclerView) findViewById(R.id.rv_prueba); 
     rvMain.setLayoutManager(new LinearLayoutManager(MainActivity.this)); 
     data= new ArrayList<>(); 
     mRVMainAdapter = new RVMainAdapter(data); 
     rvMain.setAdapter(mRVMainAdapter); 

     EndPointsInterface apiService = Conexion.getClient().create(EndPointsInterface.class); 

     Call<ChefResponse> call = apiService.GetChefsCercanos(5); 
     call.enqueue(new Callback<ChefResponse>() { 
      @Override 
      public void onResponse(Call<ChefResponse> call, Response<ChefResponse> response) { 
       int statusCode = response.code(); 

        data.clear(); 
        ChefResponse jsonResponse = response.body(); 
        //THE ERROR IS IN THE NEXT LINE 
        data = new ArrayList<>(Arrays.asList(jsonResponse.getresults())); 
        mRVMainAdapter= new RVMainAdapter(data); 
        rvMain.setAdapter(mRVMainAdapter); 
      } 
      @Override 
      public void onFailure(Call<ChefResponse> call, Throwable t) { 
       Log.d("Error",t.getMessage()); 
      } 
     }); 
    } 
} 

これはDHEアダプタです

public class RVMainAdapter extends RecyclerView.Adapter<RVMainAdapter.RVMainAdapterViewHolder> { 

    private List<Chef> mLstChef = new ArrayList<>(); 

    public void add(Chef chef){ 
     mLstChef.add(chef); 
     notifyItemInserted(mLstChef.size()-1); 
    } 

    @Override 
    public RVMainAdapter.RVMainAdapterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chef_item,parent,false); 
     RVMainAdapterViewHolder rvMainAdapterViewHolder = new RVMainAdapterViewHolder(view); 
     return rvMainAdapterViewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RVMainAdapter.RVMainAdapterViewHolder holder, int position) { 

     //List<Usuario> chefs=new ArrayList<>(); 
     Chef chefs = mLstChef.get(position); 
     holder.nombreschefscerca.setText(chefs.getNombre()); 
     holder.ratingchef.setText(chefs.getRating().toString()); 
    } 

    @Override 
    public int getItemCount() {return mLstChef.size(); 
    } 

    static class RVMainAdapterViewHolder extends RecyclerView.ViewHolder{ 
     TextView nombreschefscerca; 
     TextView ratingchef; 
     public RVMainAdapterViewHolder(View itemView) { 
      super(itemView); 
      nombreschefscerca = (TextView) itemView.findViewById(R.id.tv_nombreChefCercano); 
      ratingchef = (TextView) itemView.findViewById(R.id.tv_rating); 
     } 
    } 

    public RVMainAdapter(ArrayList<Chef> chefs){ 
     this.mLstChef=chefs; 
    } 

} 

これはインタフェース

public interface EndPointsInterface { 

    @GET("Chef/{idUser}") 
    Call<ChefResponse> GetChefsCercanos(@Path("idUser") Integer id); 
} 

これはResponseClass

public class ChefResponse   
{ 
    private Chef[] results; 

    public Chef[] getresults(){ 
     return results; 
    } 
} 
です

私は、Webサービスでは、このように見えるアプリで表示することをJSONレスポンス:

<string xmlns="http://smartchef.org/"> 
[{"nombre_chef":"Cesar","rating":"3.5"},{"nombre_chef":"Bruno","rating":"3.8"},{"nombre_chef":"Gean","rating":"2.5"}] 
</string> 

答えて

0

あなたコールバックが応答クラス

public class ChefResponse { 
    public ArrayList<Chef> getItems() { 
     return items; 
    } 

    public void setItems(ArrayList<Chef> items) { 
     this.items = items; 
    } 

    @SerializedName("items") 
    @Expose 
    private ArrayList<Chef> items = null; 
} 
を作成し、この

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    rvMain = (RecyclerView) findViewById(R.id.rv_prueba); 
    rvMain.setLayoutManager(new LinearLayoutManager(MainActivity.this)); 
    data= new ArrayList<>(); 
    EndPointsInterface apiService = Conexion.getClient().create(EndPointsInterface.class); 
    Call<ChefResponse> call = apiService.GetChefsCercanos(5); 
    call.enqueue(new Callback<ChefResponse>() { 
     @Override 
     public void onResponse(Call<ResponseBean> call, Response<ResponseBean> response) { 
      data.clear(); 
      if(response.isSuccessful()) { 
       data=response.body().getItems(); 
       mRVMainAdapter= new RVMainAdapter(data); 
       rvMain.setAdapter(mRVMainAdapter); 
      } 
     } 
     @Override 
     public void onFailure(Call<ChefResponse> call, Throwable t) { 
      Log.d("Error",t.getMessage()); 
     } 
    }); 
} 

ようにする必要があります

このシェフクラス

public class Chef { 
    public Owner getNombre_chef() { 
     return nombre_chef; 
    } 

    public void setNombre_chef(Owner nombre_chef) { 
     this.nombre_chef = nombre_chef; 
    } 

    public Owner getRating() { 
     return rating; 
    } 

    public void setRating(Owner rating) { 
     this.rating = rating; 
    } 

    @SerializedName("nombre_chef") 
    @Expose 
    private Owner nombre_chef; 

    @SerializedName("rating") 
    @Expose 
    private Owner rating; 
} 

もあんたの手順に従い、ラインでこの

{ 
    "items": [ 
    { 
     "nombre_chef": "Cesar", 
     "rating": "3.5" 
    }, 
    { 
     "nombre_chef": "Bruno", 
     "rating": "3.8" 
    }, 
    { 
     "nombre_chef": "Gean", 
     "rating": "2.5" 
    } 
    ] 
} 
+0

イムのようなあなたのJSONを変更します。データ= response.body ...エラーがあります:リスト:互換性のない型はArrayListに、見つかったが必要。 Jsonはすでにあなたのようだった – Pierre

+0

私は自分の答えを更新しました。基本的にchefresponseクラスはarraylist –

+0

にリストされていますので、chefresponseクラスのリストの代わりにarraylistを使用してください。 –

関連する問題