0

私はサーバーからJSONデータをダウンロードするためにvolleyを使って、データを読み込んで解析する関数内でアダプタを設定しています。ただし、アダプターが認識されていません。問題は、エラーなしで同じメソッドを使用して別のアクティビティでアダプターを正常に実装したことです。以下は、私のコードです:これまでアダプタが接続されていません。レイアウトをスキップする - 初心者の問題

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Bundle extras = getIntent().getExtras(); 
    if (extras!=null) { 
     user_id = getIntent().getStringExtra("user_id"); 
    } else { 
     Intent logIn = new Intent(JoinedActivity.this, LoginActivity.class); 
     startActivity(logIn); 
    } 
    setContentView(R.layout.activity_joined); 

    recyclerView = (RecyclerView) findViewById(R.id.recyclerView1); 
    recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this)); 
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
    recyclerView.setLayoutManager(mLayoutManager); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 

    GetJoinedEvents(); 
} 

public void GetJoinedEvents(){ 

    String tag_string_req = "req_getJoinedEvents"; 

    StringRequest stringRequest = new StringRequest(Request.Method.GET, Config.URL_USER_lIST_EVENTS+user_id, new Response.Listener<String>(){ 
     @Override 

     public void onResponse(String response) { 
      // progressDialog.dismiss(); 
      Log.i("responseTest",response); 

      try { 

       JSONObject jsonObject = new JSONObject(response); 
       JSONArray result = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY); 
       int length = result.length(); 

       HashMap<String, String> events; 
       for (int i = 0; i < length; i++) { 
        JSONObject jo = result.getJSONObject(i); 
        String event_id = jo.getString(Config.TAG_EVENT_ID); 
        String name = jo.getString(Config.TAG_EVENT_NAME); 
        String date = jo.getString(Config.TAG_EVENT_START_DT); 
        String weekday = jo.getString(Config.TAG_EVENT_WEEKDAY); 
        String event_type = jo.getString(Config.TAG_EVENT_TYPE); 

        events = new HashMap<>(); 
        events.put(Config.TAG_EVENT_ID, event_id); 
        events.put(Config.TAG_EVENT_NAME, name); 
        events.put(Config.TAG_EVENT_START_DT, date); 
        events.put(Config.TAG_EVENT_WEEKDAY, weekday); 
        events.put(Config.TAG_EVENT_TYPE, event_type); 
        eventList.add(events); 
       } 

       listAdapter = new RecyclerViewAdapter(JoinedActivity.this,eventList, user_id); 
       recyclerView.setAdapter(listAdapter); 

      } 
      catch (JSONException e) { 
       e.printStackTrace(); 

      } 
     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e("Error", "Bad internet connection"); 

     } 
    }) {}; 
    AppController.getInstance().addToRequestQueue(stringRequest, tag_string_req); 
    Log.i("URL", stringRequest.toString()); 
} 

}

答えて

0

より良いアプローチはただのonCreate上リサイクラービューとアダプタを初期化することです。その後、データがあるときに、アダプタを介してrecyclerview内のデータを変更する目的だけで、アクティビティの開始時にRecyclerViewとそのアダプタの両方がインスタンス化されるようにswapItemsメソッドを作成できます。あなたは以下のような何か行うことができ、あなたのswapItems上

public void swapItems(List<Events> eventList) { 
    if (eventList != null) { 
     this.items = eventList; 
     notifyDataSetChanged();// should call this to let the recyclerview know that our data set has changed 
    } 
} 

を次に、あなただけの

listAdapter.swapItems(eventList);// this is done the moment you already got your list of events 
での活動を経て、それを呼び出すことができます
関連する問題