2016-09-24 3 views
-1

Итак, я не знаю, как мне это сделать. Я хочу получить jsonData и настроить адаптер с этими данными из той же Activtiy. Возможно ли это? Если да, то как мне это сделать, потому что он всегда вылетает из-за задержки «загрузки». Адаптер хочет настроить раньше, чем я получаю данные, чтобы он выходил из строя из-за массива нулевой длины.Как настроить адаптер 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

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

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

 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

вызов внутри вашего ответа ochttp 'setAdapter()' после успешного ответа ответа. – sushildlh

+0

Скопируйте весь код в onPostExecute (результат строки) в ваш блок ответовSuccess –

Смежные вопросы