2016-05-24 11 views
0

私はListView持っているデータを持っています。データはサーバーからのもので、私はListViewを5秒ごとに更新します。これを行う方法?私はアンドロイド開発に新しいです。私を助けてください。ここに私のコードは...あるandroidどのように5秒ごとにリストビューを更新する

protected void showList() { 
    try { 
     JSONObject jsonObj = new JSONObject(myJSON); 
     peoples = jsonObj.getJSONArray(TAG_RESULTS); 

     for (int i = 0; i < peoples.length(); i++) { 
      JSONObject c = peoples.getJSONObject(i); 
      String data = c.getString(TAG_DATA); 
      final String dataaaa = rcdata.getText().toString().trim(); 
      HashMap<String, String> user_data = new HashMap<String, String>(); 
      user_data.put(TAG_DATA, data); 
      personList.add(user_data); 
     } 
     ListAdapter adapter = new SimpleAdapter(
       DataSendActivity.this, personList, R.layout.layout_chat, 
       new String[]{TAG_DATA}, 
       new int[]{R.id.data} 
     ); 

     list.setAdapter(adapter); 

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

も、私はこの方法

public void getData() { 
    class GetDataJSON extends AsyncTask<String, Void, String> { 
     //String recID = ; 
     //String userID = email; 
     @Override 
     protected String doInBackground(String... params) { 
      DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); 
      HashMap<String, String> user = db.getUserDetails(); 

      //String name = user.get("name"); 
      // Semail = user.get("email"); 

      String semail = user.get("email"); 
      final String remail = rremail; 

      HttpPost httppost = new HttpPost("http://samplechatapp.gear.host/myphpfile.php?sender_email="+semail+"&reciver_email="+remail+"&fatch_server_data=true"); 

      // Depends on your web service 
      httppost.setHeader("Content-type", "application/json"); 

      InputStream inputStream = null; 
      String result = null; 
      Log.i("","processing entity"); 
      try { 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 

       inputStream = entity.getContent(); 
       // json is UTF-8 by default 
       BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
       StringBuilder sb = new StringBuilder(); 

       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
        Log.i("",line); 
       } 
       result = sb.toString(); 
       Log.i("",result); 
      } catch (Exception e) { 
       // Oops 
      } finally { 
       try { 
        if (inputStream != null) inputStream.close(); 
       } catch (Exception squish) { 
       } 
      } 
      return result; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      myJSON = result; 
      showList(); 
     } 
    } 
    GetDataJSON g = new GetDataJSON(); 
    g.execute(); 
} 

しかし、私は、リストビューアプリのクラッシュをしてください開いてデータを取得し、このonCreate

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     adapter.notifyDataSetChanged(); 
     handler.postDelayed(this, 5000); 
    } 
}, 5000); 

を試してみました私は非常に新しいアンドロイドで助けてください

+0

java.util.Timerおよびjava.util.TimerTaskを使用してタイマータスクを作成できます。 Asynctaskを使用するか、サーバーからデータを取得するために新しいスレッドを作成する必要があります。データを取得するのに時間がかかることがあり、メインスレッドをブロックし、最終的にクラッシュする可能性があります。 –

+0

あなたは最初にjsonをもう一度解析して配列(personList)をポップしてからadapter.notifydatasetchangedを呼び出す必要があります –

+0

@MarkoNiciforovic私のコードを編集してください私は新しいAndroidです – Malik

答えて

0

最初のAPI呼び出しから応答を受け取ったら、apiを呼び出す必要があります。あなたはnotifyDataSetChanged()投稿することができます。

+0

私のコードを編集してください。 – Malik

+0

私のデータはリストビューの問題で表示されます – Malik

0

データが変更されるたびにnotifyDataSetChanged()と呼び出してください。 さらに、RecyclerViewを使用する代わりにListViewを使用しないでください。

関連する問題