【发布时间】:2020-04-20 02:04:13
【问题描述】:
我是 android 编程新手,我想在我的 recyclerview 上显示这个 json,但我得到了 null,我对此一无所知。 我搜索了很多,但找不到任何有用的东西。
json_url http://192.168.1.200:5454/api/Goods/?CategoryId=0&PageSize=10&PageNumber=1&Filter=
主活动
private RetrofitAdapter retrofitAdapter;
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler);
fetchJSON();
}
private void fetchJSON(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(RecyclerInterface.JSONURL)
.addConverterFactory(ScalarsConverterFactory.create())
.build();
RecyclerInterface api = retrofit.create(RecyclerInterface.class);
Call<String> call = api.getString();
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
Log.i("Responsestring", response.body().toString());
if (response.isSuccessful()) {
if (response.body() != null) {
Log.i("onSuccess", response.body().toString());
String jsonresponse = response.body().toString();
onRecycler(jsonresponse);
} else {
Log.i("onEmptyResponse", "Returned empty response");
}
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});
}
private void onRecycler(String response){
try {
//getting the whole json object from the response
JSONObject obj = new JSONObject(response);
if(obj.optString("status").equals("200")){
ArrayList<ModelRecycler> modelRecyclerArrayList = new ArrayList<>();
JSONArray dataArray = obj.getJSONArray("data");
for (int i = 0; i < dataArray.length(); i++) {
ModelRecycler modelRecycler = new ModelRecycler();
JSONObject dataobj = dataArray.getJSONObject(i);
modelRecycler.setImageURL(dataobj.getString("imageURL"));
modelRecycler.setCategoryTitle(dataobj.getString("categoryTitle"));
modelRecycler.setNumber(dataobj.getString("number"));
modelRecycler.setTitle1(dataobj.getString("title1"));
modelRecycler.setTitle2(dataobj.getString("title2"));
modelRecyclerArrayList.add(modelRecycler);
}
retrofitAdapter = new RetrofitAdapter(this,modelRecyclerArrayList);
recyclerView.setAdapter(retrofitAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(),
LinearLayoutManager.VERTICAL, false));
}else {
Toast.makeText(MainActivity.this, obj.optString("message")+"",
Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
模型回收器
private String categoryTitle, number, title1, title2, imageURL;
public void setCategoryTitle(String categoryTitle) {
this.categoryTitle = categoryTitle;
}
public String getCategoryTitle() {
return categoryTitle;
}
public void setNumber(String number) {
this.number = number;
}
public String getNumber() {
return number;
}
public void setTitle1(String title1) {
this.title1 = title1;
}
public String getTitle1() {
return title1;
}
public void setTitle2(String title2) {
this.title2 = title2;
}
public String getTitle2() {
return title2;
}
public void setImageURL(String imageURL) {
this.imageURL = imageURL;
}
public String getImageURL() {
return imageURL;
}
回收站接口
String JSONURL = "http://192.168.1.200:5454/api/Goods/";
@GET("?CategoryId=0&PageSize=10&PageNumber=1&Filter=")
Call<String> getString();`
改装适配器
private LayoutInflater inflater;
private ArrayList<ModelRecycler> dataModelArrayList;
public RetrofitAdapter(Context ctx, ArrayList<ModelRecycler> dataModelArrayList){
inflater = LayoutInflater.from(ctx);
this.dataModelArrayList = dataModelArrayList;
}
@Override
public RetrofitAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.retro_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(RetrofitAdapter.MyViewHolder holder, int position) {
Picasso.get().load(dataModelArrayList.get(position).getImageURL()).into(holder.image);
holder.categoryTitle.setText(dataModelArrayList.get(position).getCategoryTitle());
holder.number.setText(dataModelArrayList.get(position).getNumber());
holder.title1.setText(dataModelArrayList.get(position).getTitle1());
holder.title2.setText(dataModelArrayList.get(position).getTitle2());
}
@Override
public int getItemCount() {
return dataModelArrayList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView number, title1, title2,categoryTitle;
ImageView image;
public MyViewHolder(View itemView) {
super(itemView);
categoryTitle = (TextView) itemView.findViewById(R.id.categoryTitle);
number = (TextView) itemView.findViewById(R.id.number);
title1 = (TextView) itemView.findViewById(R.id.title1);
title2 = (TextView) itemView.findViewById(R.id.title2);
image = (ImageView) itemView.findViewById(R.id.image);
}
}
【问题讨论】:
-
尝试添加
adapter.notifyDataSetChanged(); -
我试过不工作。
-
那么您需要尝试调试应用程序或查看在 logcat 中打印输出时得到的响应
标签: android json android-recyclerview retrofit