2017-07-12 13 views
0

MySQLから常にRecycleViewに更新されたデータを表示したいとします。しかし、私が別のデバイスからデータを追加すると、私のデバイスでは更新できません。これは私のコードonCreateView()です。どこにnotifyDataSetChanged()を置くことができますか?

requestQueue = Volley.newRequestQueue(getContext()); 

    list_data = new ArrayList<HashMap<String, String>>(); 

    stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      Log.d("response", response); 
      try { 
       JSONObject jsonObject = new JSONObject(response); 
       JSONArray jsonArray = jsonObject.getJSONArray("result"); 
       for (int a = 0; a < jsonArray.length(); a++) { 
        JSONObject json = jsonArray.getJSONObject(a); 
        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put("nama", json.getString("nama")); 
        map.put("isi", json.getString("isi")); 
        map.put("poto", json.getString("poto")); 
        map.put("id", json.getString("id")); 
        list_data.add(map); 
        AdapterChat adapter = new AdapterChat(chat.this, list_data); 
        lvhape.setAdapter(adapter); 
        adapter.notifyDataSetChanged(); 
       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
       Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    requestQueue.add(stringRequest); 

と、これは私のアダプターのコードです:

Context context; 

ArrayList<HashMap<String, String>> list_data; 
public AdapterChat(chat chat, ArrayList<HashMap<String, String>> list_data) { 
    this.context = chat.getContext(); 
    this.list_data = list_data; 
    notifyDataSetChanged(); 
} 

私はnotifyDataSetChangedを置くことができますか?

あなたがこれを行うことができ、私に

+0

この質問は、「RecycleView」または「notifyDataSetChanged」とは関係ありません。 複数のデバイスを「ポーリング」または即時通知(ソケットやプッシュ通知など)と同期させる必要があります – Codus

+0

google firebase ここhttps://firebase.google.com/docs/android/setup – Dennis

+0

Firebaseを同期できるかどうかmysqlで? –

答えて

0
  • を助けてください。

requestQueue = Volley.newRequestQueue(getContext());

list_data = new ArrayList<HashMap<String, String>>(); 
AdapterChat adapter = new AdapterChat(chat.this, list_data); 
lvhape.setAdapter(adapter); 
stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
    @Override 
    public void onResponse(String response) { 
     Log.d("response", response); 
     try { 
      JSONObject jsonObject = new JSONObject(response); 
      JSONArray jsonArray = jsonObject.getJSONArray("result"); 
      for (int a = 0; a < jsonArray.length(); a++) { 
       JSONObject json = jsonArray.getJSONObject(a); 
       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put("nama", json.getString("nama")); 
       map.put("isi", json.getString("isi")); 
       map.put("poto", json.getString("poto")); 
       map.put("id", json.getString("id")); 
       list_data.add(map); 
       adapter.notifyDataSetChanged(); 
      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
      Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
}); 
requestQueue.add(stringRequest); 
+0

- list_data.size()!= 0であることを確認してください –

0

あなたがリクエストからretrivedデータをリサイクル業者ビューにアダプタを設定している場合は、notifyDataSetChanged()を呼び出す必要はありません。このように

requestQueue = Volley.newRequestQueue(getContext()); 

list_data = new ArrayList<HashMap<String, String>>(); 

stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
    @Override 
    public void onResponse(String response) { 
     Log.d("response", response); 
     try { 
      JSONObject jsonObject = new JSONObject(response); 
      JSONArray jsonArray = jsonObject.getJSONArray("result"); 
      for (int a = 0; a < jsonArray.length(); a++) { 
       JSONObject json = jsonArray.getJSONObject(a); 
       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put("nama", json.getString("nama")); 
       map.put("isi", json.getString("isi")); 
       map.put("poto", json.getString("poto")); 
       map.put("id", json.getString("id")); 
       list_data.add(map); 
      } 
      AdapterChat adapter = new AdapterChat(chat.this, list_data); 
      lvhape.setAdapter(adapter); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
      Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
}); 
requestQueue.add(stringRequest); 

ただし、毎回アダプタインスタンスを作成して設定することはお勧めできません。したがって、より良い解決策は次のようになります

アダプタクラスで更新メソッドを作成します。

public void updateData(List<HashMap<String, String>> list){ 
    this.listData = list; 
    notifyDataSetChanged();  
} 

次に、このような要求コードを変更します。

requestQueue = Volley.newRequestQueue(getContext()); 

list_data = new ArrayList<HashMap<String, String>>(); 
AdapterChat adapter = new AdapterChat(chat.this, list_data); 
lvhape.setAdapter(adapter); 

stringRequest = new StringRequest(Request.Method.GET, url, new 
    Response.Listener<String>() { 
    @Override 
    public void onResponse(String response) { 
     Log.d("response", response); 
     try { 
      JSONObject jsonObject = new JSONObject(response); 
      JSONArray jsonArray = jsonObject.getJSONArray("result"); 
      for (int a = 0; a < jsonArray.length(); a++) { 
       JSONObject json = jsonArray.getJSONObject(a); 
       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put("nama", json.getString("nama")); 
       map.put("isi", json.getString("isi")); 
       map.put("poto", json.getString("poto")); 
       map.put("id", json.getString("id")); 
       list_data.add(map); 
      } 
      adapter.updateData(list_data); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
       Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show(); 
} 
}); 
requestQueue.add(stringRequest); 
関連する問題