无法使用Retrofit和RxJava2填充回收器视图

问题描述 投票:0回答:1

[我正在尝试从服务器获取数据并在回收器视图中显示。我正在使用改造库和RxJava2,但无法从服务器获取数据。它在LogCat中显示总数,但在回收器视图中不显示数据。

来自服务器的响应:

[
 {
  "term_id": "4",
  "name": "Entertainment"
 },
 {
  "term_id": "5",
  "name": "Tech & Gadgets"
 },
 {
  "term_id": "6",
  "name": "Sports"
 },
 {
  "term_id": "7",
  "name": "Health and Fitness Tips"
 }
]

下面是我的代码:

RetrofitClient.java

public class RetrofitClient {

private static Retrofit retrofit = null;

public static Retrofit getInstance(){


OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .connectTimeout(22,TimeUnit.SECONDS)
        .readTimeout(22, TimeUnit.SECONDS)
        .writeTimeout(22, TimeUnit.SECONDS)
        .build();

if(retrofit == null)
    retrofit = new Retrofit.Builder()
            .baseUrl("https://www.flypped.com/api/")
            .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient().create()))
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .client(okHttpClient)
            .build();

return retrofit;

   }
 }

ApiService.class

public interface ApiService {

@GET("Categoery_api")
Observable<List<Model>> getData();
}

Model.java

public class Model {

@SerializedName("catId")
@Expose
String catId;

@SerializedName("catName")
@Expose
String catName;

public Model(){

}

public Model(String catId, String catName) {
this.catId = catId;
this.catName = catName;
}

public String getCatId() {
return catId;
}

public void setCatId(String catId) {
this.catId = catId;
}

public String getCatName() {
return catName;
}

public void setCatName(String catName) {
this.catName = catName;
}

}

MainActivity.java

 public class MainActivity extends AppCompatActivity {

RecyclerView recycler;
ProgressBar progress;

List<Model> list = new ArrayList<>();;
PostAdapter adapter;

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

    progress = findViewById(R.id.progress);
    recycler = findViewById(R.id.recycler);
    recycler.setHasFixedSize(true);
    recycler.setLayoutManager(new LinearLayoutManager(this));


    fetchData();
}

private void fetchData(){

Retrofit retrofit = RetrofitClient.getInstance();
ApiService myApi = retrofit.create(ApiService.class);

 myApi.getData().subscribeOn(Schedulers.io())
                                       .observeOn(AndroidSchedulers.mainThread())
                                       .subscribe(new Observer<List<Model>>() {
                                           @Override
                                           public void onSubscribe(Disposable d) {

                                           }

                                           @Override
                                           public void onNext(List<Model> models) {

                                               if(models.size() > 0){

                                                   progress.setVisibility(View.INVISIBLE);
                                                   Log.d("count",String.valueOf(models.size())); 
                                                  adapter = new PostAdapter(getApplicationContext(),list);
                                                   recycler.setAdapter(adapter);
                                               }
                                           }

                                           @Override
                                           public void onError(Throwable e) {

                                               Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
                                           }

                                           @Override
                                           public void onComplete() {


                                           }
                                       });

                       }

PostAdapter.java

 public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder> {

 List<Model> list = new ArrayList<>();
 Context context;

 public PostAdapter(Context context,List<Model> list) {
   this.context = context;
   this.list = list;
}

@NonNull
@Override
public PostAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_row,parent,false);

ViewHolder view = new ViewHolder(v);
return view;
}

@Override
public void onBindViewHolder(@NonNull PostAdapter.ViewHolder holder, int position) {

Model model = list.get(position);

holder.catName.setText(model.getCatName());
holder.catId.setText(model.getCatId());
}

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

public class ViewHolder extends RecyclerView.ViewHolder {

TextView catId,catName,comp,titl;

public ViewHolder(@NonNull View itemView) {
    super(itemView);

    catId = itemView.findViewById(R.id.catId);
    catName = itemView.findViewById(R.id.catName);
  }
 }
}

有人请让我知道为什么在回收者视图中未显示数据。请提供任何帮助。

谢谢

android retrofit2 rx-java2
1个回答
0
投票
首先,以onCreteMainActivity方法创建适配器。然后将方法添加到适配器中

public void setItems(List<Model> data){ list.clear() list.addAll(data) notifyDataSetChanged() }

© www.soinside.com 2019 - 2024. All rights reserved.