2016-10-12 2 views
0

urlからjson値を取得しようとしましたが、recylerviewのアダプタでlistviewに表示されました。リストビューが空で、このエラーが発生しました 'アダプタが接続されていません。レイアウトをスキップします。私は以下のコードを試みたときにそのエラー:アダプターが接続されていません。 recyclerviewのレイアウトをスキップ

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

はコードの私の部分で作業し、必要であれば、私はこのコード行の値を取得しますが、couldn完全なコード

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

をアップロードしますリストビューで設定されていません。

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関数内にあることを願っています。 –

関連する問題