RecycleViewer не имеет подключенного адаптера. Также ошибка на URL - PullRequest
0 голосов
/ 05 января 2019

Привет, ребята, я создаю приложение, в котором я хочу вызвать Api, используя модернизацию. И отображение объектов в Recycle Viewer. Я получаю ошибку, когда пытаюсь использовать свой метод, который вызывает Api и помещает объекты в просмотрщик Recycle.

Ниже приведен код для адаптера пейджера.

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);
    }
}

И код, где я вызываю модификацию, и метод, который создает представление recycle:

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 Called: https://priaid -symptom-checker-v1.p.mashape.com / диагноз? Пол = мужской & Симптомы = 10,5 & Язык = en-gb & Год% 20% 20Birth = 1994

E / RecyclerView: адаптер не подключен; пропускающий макет

Пожалуйста, если кто-нибудь может сказать мне, как преодолеть это и как мой повторный просмотр получит адаптер

Спасибо большое!

1 Ответ

0 голосов
/ 06 января 2019

Наиболее вероятный обратный вызов из call.enqueue (...) не вызывается в главном потоке. На Android это единственное место, где пользовательский интерфейс может быть обновлен. Настройка адаптера в главном потоке должна решить вашу проблему:

 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);
        }
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...