2016-09-24 31 views
-1

だから私はどうすればいいのか分かりません。私はjsonDataを取得し、同じActivtiyからこのデータを持つアダプタを設定したいと思います。これも可能ですか?はいの場合、どうすればいいですか?なぜなら、それは「ダウンロード」の遅延のためにいつも私のためにクラッシュするからです。アダプタはデータを取得するよりも早く設定したいので、長さがnullの配列のためにクラッシュする可能性があります。recyclerViewアダプタの設定方法を教えてください。

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

あなたのダウンローダーの中でsetAdapter()を設定してください...... – sushildlh

+0

どこに設定すればいいですか?どのダウンローダですか? – Marci

+0

JSONデータはどこですか? – sushildlh

答えて

0

あなたがそれを実装する方法の概要を取得するように、以下の従ってしまってください

Webサービスを呼び出してから、あなたがデータを取得した後にのみ、アダプタを設定していることを確認してください:

 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 

      } 

       } 
      } 
+0

ありがとう答えのために!しかし、私はOkHttpでそれをやりたい私はそれをすべて設定した後、私はsetAdapterを呼び出していますが、今は例外としてクラッシュします。レイアウトをスキップする – Marci

+0

応答成功後、あなたのokhttpレスポンス 'setAdapter()'を呼び出してください.... – sushildlh

+0

onPostExecute(String result)のコードをすべてあなたのresponseSuccessブロックにコピーしてください –

関連する問題