【问题标题】:How do I set up the recyclerView adapter?如何设置 recyclerView 适配器?
【发布时间】:2016-09-24 11:39:10
【问题描述】:

所以,我不知道该怎么做。我想获取 jsonData 并使用来自同一个 Activtiy 的这些数据设置一个适配器。这甚至可能吗?如果是,我应该怎么做,因为由于“下载”的延迟,它总是对我崩溃。适配器希望在我获取数据之前进行设置,因此它会因为空长度数组而崩溃。

private SzabadEuMusorok[] mSzabadEuMusoroks;

@InjectView(R.id.archivumReyclerView)
RecyclerView mRecyclerView;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_archivum);
    ButterKnife.inject(this);

    setArray();

    CollectionsAdapter adapter = new CollectionsAdapter(this, mSzabadEuMusoroks);
    mRecyclerView.setAdapter(adapter);

    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(layoutManager);

    mRecyclerView.setHasFixedSize(true);
}

【问题讨论】:

  • 在你的下载器中设置 setAdapter() ......
  • 我应该在哪里设置它?什么下载器?
  • 你的 JSON 数据在哪里??
  • 我在 setArray() 方法中得到它,然后我解析它并将它提供给 mSzabadEuMusoroks 变量
  • setAdapter() 中设置setArray() 方法中的所有数据...。

标签: android json asynchronous android-asynctask


【解决方案1】:

请务必在调用webservice获取数据后才设置适配器

请关注以下内容,以便您大致了解如何实施它:

      public class MainActivity extends Activity implements OnClickListener {
            private SzabadEuMusorok[] mSzabadEuMusoroks;

            @InjectView(R.id.archivumReyclerView)
            RecyclerView mRecyclerView;
            RecyclerView.LayoutManager layoutManager ;
            @Override
            protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_archivum);
                ButterKnife.inject(this);

                setArray();


                layoutManager = new LinearLayoutManager(this);

      new LongOperation().execute("");//call your webservice
            }



                private class LongOperation extends AsyncTask<String, Void, String> {

                    @Override
                    protected String doInBackground(String... params) {
                        for (int i = 0; i < 5; i++) {
                            try {

            //call your webservice here
                            } catch (InterruptedException e) {
                                Thread.interrupted();
                            }
                        }
                        return serviceResult;// this will be passed to onPostExecute
                    }

                    @Override
                    protected void onPostExecute(String result) {
mRecyclerView.setLayoutManager(layoutManager);

                mRecyclerView.setHasFixedSize(true);
                   CollectionsAdapter adapter = new CollectionsAdapter(this, mSzabadEuMusoroks);
            mRecyclerView.setAdapter(adapter);   //set your adapter using result in webservice called in doinbackground
                    }

                    @Override
                    protected void onPreExecute() {
            // show a progress dialog 

            }

                }
            }

【讨论】:

  • 感谢您的回答!但我想用 OkHttp 来做。在我全部设置好之后,我正在调用 setAdapter,现在它崩溃并出现异常:没有附加适配器;跳过布局
  • 在响应成功后调用您的 okhttp 响应 setAdapter() ....
  • 请将 onPostExecute(String result) 中的所有代码复制到您的 responseSuccess 块中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
相关资源
最近更新 更多