【问题标题】:RecycleViewer doesnt have adapter attached. Also Error on URLRecyclerView 没有附加适配器。网址也有错误
【发布时间】:2019-05-31 23:51:53
【问题描述】:

大家好,我正在创建一个应用程序,我想在其中使用改造来调用 Api。并在回收查看器中显示对象。当我尝试使用调用 Api 并将对象放入回收查看器的方法时出现错误。

以下是寻呼机适配器的代码。

public class IssueAdapter2 extends RecyclerView.Adapter<IssueAdapter2.SymptomViewHolder> {
    private ArrayList<Issue> dataList;

public IssueAdapter2(ArrayList<Issue> dataList){
    this.dataList = dataList;
}

@NonNull
@Override
public SymptomViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    LayoutInflater layoutInflater = LayoutInflater.from(viewGroup.getContext());
    View view = layoutInflater.inflate(R.layout.row_item, viewGroup, false);
    return new SymptomViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull SymptomViewHolder symptomViewHolder, int position) {
    symptomViewHolder.symptomTitle.setText(dataList.get(position).getName());

}

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

public class SymptomViewHolder extends RecyclerView.ViewHolder {

    TextView symptomTitle;

    public SymptomViewHolder(@NonNull View itemView) {
        super(itemView);
        symptomTitle = itemView.findViewById(R.id.IssueName);
    }
}

以及我调用改造的代码和创建回收视图的方法:

public class MainActivity extends AppCompatActivity {

    private Button btnDiagnosis;
    private RadioButton radioButton;
    public TextView textResults;
private RecyclerView recyclerView;
private IssueAdapter2 issueAdapter2;

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

    btnDiagnosis = findViewById(R.id.bDiagnosis);

    radioButton = findViewById(R.id.feverYes);

    btnDiagnosis.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startButtonActivity();
        }
    });


}

   public void startButtonActivity(){
        //create Retrofit instance
       setContentView(R.layout.results);
       //textResults = findViewById(R.id.resultsview);

       Retrofit.Builder builder = new Retrofit.Builder()
               .baseUrl("https://priaid-symptom-checker-v1.p.mashape.com/diagnosis/")
               .addConverterFactory(GsonConverterFactory.create());

       Retrofit retrofit = builder.build();

       //get Symptoms


       JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);
       Call<ArrayList<Issue>> call = jsonPlaceHolderApi.searchForIssues(

               "male",
               "10,5",
               "en-gb",
               1994);

       Log.wtf("URL Called", call.request().url() + "");
       call.enqueue(new Callback<ArrayList<Issue>>() {
           @Override
           public void onResponse(Call<ArrayList<Issue>> call, Response<ArrayList<Issue>> response) {

               if(response.isSuccessful()){
                   configViews(response.body());
               }
           }
           @Override
           public void onFailure(Call<ArrayList<Issue>> call, Throwable t) {
               Toast.makeText(MainActivity.this, "Something went wrong...Error message: " + t.getMessage(),
                       Toast.LENGTH_LONG).show();
           }
       });
   }

    private void configViews(ArrayList<Issue> issueArrayList) {



        recyclerView = findViewById(R.id.recyclerview);

        issueAdapter2 = new IssueAdapter2(issueArrayList);
        recyclerView.setHasFixedSize(true);
        recyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(recyclerView.getContext());
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(issueAdapter2);

    }

}

我得到的错误:

E/URL 调用:https://priaid-symptom-checker-v1.p.mashape.com/diagnosis?Gender=male&Symptoms=10,5&Language=en-gb&Year%20of%20Birth=1994

E/RecyclerView:没有附加适配器;跳过布局

如果有人能告诉我如何克服这个问题以及我的 recycleview 将如何获得适配器

非常感谢!

【问题讨论】:

    标签: java android android-studio retrofit android-recyclerview


    【解决方案1】:

    最可能来自 call.enqueue(...) 的回调不会在主线程上调用。在 Android 上,它是唯一可以更新 UI 的地方。在主线程上设置适配器应该可以解决您的问题:

     private void configViews(ArrayList<Issue> issueArrayList) {
        recyclerView = findViewById(R.id.recyclerview);
        issueAdapter2 = new IssueAdapter2(issueArrayList);
        recyclerView.setHasFixedSize(true);
        recyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(recyclerView.getContext());
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                recyclerView.setLayoutManager(layoutManager);
                recyclerView.setAdapter(issueAdapter2);
            }
        );
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-07
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      相关资源
      最近更新 更多