2016-10-12 3 views
0

Я попытался извлечь значения json из url и показать в listview с адаптером в recylerview. но listview пуст и получает эту ошибку «Не подключен адаптер; пропуская макет ". Когда я попытался с код ниже его работыПолучение ошибки: адаптер не прилагается; пропуская макет в recyclerview

for (int i = index; i < end; i++) { 
    User user = new User(); 
    user.setName("Name " + i); 
    mUsers.add(user); 
} 

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

public class OtherNews extends AppCompatActivity { 

JSONArray jsonarray; 
private RecyclerView mRecyclerView; 
private List<User> mUsers = new ArrayList<>(); 
private UserAdapter mUserAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main2); 
    mRecyclerView = (RecyclerView) findViewById(R.id.recycleView); 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); 
    mUserAdapter = new UserAdapter(); 

    new DownloadJSON().execute(); 

    mUserAdapter.setOnLoadMoreListener(new OnLoadMoreListener() { 
     @Override 
     public void onLoadMore() { 
      Log.e("haint", "Load More"); 
      mUsers.add(null); 
      mUserAdapter.notifyItemInserted(mUsers.size() - 1); 
      //Load more data for reyclerview 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        Log.e("haint", "Load More 2"); 
        //Remove loading item 
        mUsers.remove(mUsers.size() - 1); 
        mUserAdapter.notifyItemRemoved(mUsers.size()); 
        //Load data 
        int index = mUsers.size(); 
        int end = index + 20; 
        for (int i = index; i < end; i++) { 
         User user = new User(); 
         user.setName("Name " + i); 
         user.setEmail("alibaba" + i + "@gmail.com"); 
         mUsers.add(user); 
        } 
        mUserAdapter.notifyDataSetChanged(); 
        mUserAdapter.setLoaded(); 
       } 
      }, 5000); 
     } 
    }); 
} 

// DownloadJSON AsyncTask 
private class DownloadJSON extends AsyncTask<Void, Void, Void> { 
    private static final String TAG = ""; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 
    @Override 
    protected Void doInBackground(Void... params) { 
     // Create an array 
     HttpHandler sh = new HttpHandler(); 
     // Making a request to url and getting response 
     String jsonStr = sh.makeServiceCall("http://xxxxxxxxx.in/projects/falcon/getallnews.php?page=2"); 
     if (jsonStr != null) { 
      try { 
       JSONObject jsonobject = new JSONObject(jsonStr); 
       jsonarray = jsonobject.getJSONArray("news"); 
       // Getting JSON Array node 
       for (int i = 0; i < jsonarray.length(); i++) { 
        User user = new User(); 
        String title = jsonobject.getString("title"); 
        user.setName(title); 
        mUsers.add(user); 
       } 
      } catch (final JSONException e) { 
      } 
     } else { 
      Log.d(TAG, "someOther)"); 
     } 
     return null; 
    } 
    @Override 
    protected void onPostExecute(Void args) { 
     mRecyclerView.setAdapter(mUserAdapter); 
    } 
} 

я получаю значение в этой строке кода, но не мог 't в списке списка.

String title = jsonobject.getString("title"); 
user.setName(title); 

ответ

0

Проблема в том, что звучит так, адаптер не подключается, когда он в ней нуждается. Вы не прикрепляете его до onPostExecute. Просто прикрепите его с самого начала:

mRecyclerView = (RecyclerView) findViewById(R.id.recycleView); 
mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); 
mUserAdapter = new UserAdapter(); 
mRecyclerView.setAdapter(mUserAdapter); 

Как изменить адаптер в других частях коды, ваш RecyclerView будет обновляться автоматически, до тех пор, как вы называете notifyDataSetChanged() или некоторые из них связан метода.

+0

Надеюсь, код должен быть в функции oncreate –

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