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>
イムのようなあなたのJSONを変更します。データ= response.body ...エラーがあります:リスト:互換性のない型はArrayListに、見つかったが必要。 Jsonはすでにあなたのようだった – Pierre
私は自分の答えを更新しました。基本的にchefresponseクラスはarraylist –
にリストされていますので、chefresponseクラスのリストの代わりにarraylistを使用してください。 –