2016-03-31 11 views
1

URLからjsonオブジェクトを解析して隣接する2つのリストビューに表示するアプリケーションがあります(jsonオブジェクト自体はMySQLデータベースのクエリの結果です)。隣接する2つのリストビューにjsonデータを表示

私は次のコードを試しましたが、このタスクを実行するにはAsyncTaskクラスが必要です。

誰かが、対応するAsyncTaskクラスを書くのを手伝ってくれますか?doinbackground、onPreExecute()、onPostExecuteで何を書くか教えてください。

MainActivity

public class MainActivity extends Activity 
{ 


    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     connect(); 
    } 

    private void connect() 
    { 

     String data; 
     List<String> r = new ArrayList<String>(); 

     ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,r); 
     ListView list=(ListView)findViewById(R.id.leftListView); 
     ListView list2=(ListView)findViewById(R.id.rightListView); 
     list2.setBackgroundColor(Color.BLUE); 

     try 

     { 
      DefaultHttpClient client = new DefaultHttpClient(); 
      HttpGet request = new HttpGet("http://192.168.1.16:89/Derdeery/Zaki.php"); 
      HttpResponse response = client.execute(request); 
      HttpEntity entity=response.getEntity(); 
      data=EntityUtils.toString(entity); 
      Log.e("STRING", data); 


      try { 


     JSONArray json=new JSONArray(data); 

     for(int i=0;i<json.length(); i++) 
     { 

     JSONObject obj=json.getJSONObject(i); 
     String name=obj.getString("Part_NAME"); 
     String id = obj.getString("Part_ID") ; 
     Log.e("name", name); 
     r.add(name+"-"+id); 

     list.setAdapter(adapter); 

      } 

      } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 

     } catch (ClientProtocolException e) { 
      Log.d("HTTPCLIENT", e.getLocalizedMessage()); 
     } catch (IOException e) { 
      Log.d("HTTPCLIENT", e.getLocalizedMessage()); 
     } 


    } 
} 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <ListView 
     android:id="@+id/leftListView" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_margin="2dp" 
     android:layout_weight=".75" /> 

    <ListView 
     android:id="@+id/rightListView" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_margin="2dp" 
     android:layout_weight=".25" /> 

</LinearLayout> 

編集:私はこのコードを試してみましたが、私は残念ながらアプリがエラーを停止しています。以下のよう

public class MainActivity extends Activity { 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    new GetData().execute(); 

} 


private class GetData extends AsyncTask<Void, Void, Void> 
{ 
    ProgressDialog progressDialog; 
    String data; 
    List<String> r = new ArrayList<String>(); 
    ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,r);  
    ListView list = (ListView)findViewById(R.id.right); 
    ListView list2= (ListView)findViewById(R.id.left); 

    public GetData() 
    { 


    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog = new ProgressDialog(MainActivity.this); 


     progressDialog.setCancelable(false); 
     if (!progressDialog.isShowing()) { 
      progressDialog.show(); 
     } 

    } 



    @Override 
    protected Void doInBackground(Void... params) { 
    try 

    { 
     DefaultHttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet("http://192.168.1.5:89/Derdeery/Zaki.php"); 
     HttpResponse response = client.execute(request); 
     HttpEntity entity=response.getEntity(); 
     data=EntityUtils.toString(entity); 
     Log.e("STRING", data); 

    } 
    catch (ClientProtocolException e) 
    { 
     Log.d("HTTPCLIENT", e.getLocalizedMessage()); 
    } 
    catch (IOException e) 
    { 
     Log.d("HTTPCLIENT", e.getLocalizedMessage()); 
    } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     try { 

     if (progressDialog.isShowing()) { 
      progressDialog.dismiss(); 
     } 
      JSONArray json=new JSONArray(data); 

      for(int i=0;i<json.length(); i++) 
      { 

      JSONObject obj=json.getJSONObject(i); 
      String name=obj.getString("Part_NAME"); 
      String id = obj.getString("Part_ID") ; 
      Log.e("name", name); 
      r.add(name+"-"+id); 



      } 
      adapter.notifyDataSetChanged(); 


     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     }} 


     } 
+0

http://www.compiletimeerror.com/2013/01/why-and-how-to-use-asynctask.htmlを参照してください。 –

答えて

0

試してみてください。この

private class GetData extends AsyncTask<Void, Void, Void> { 
    ProgressDialog progressDialog; 
    public GetData() { 


    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog = new ProgressDialog(getActivity()); 
     progressDialog.setTitle(getResources().getString(
       R.string.progress_title)); 
     progressDialog.setMessage(getResources().getString(
       R.string.progress_message)); 
     progressDialog.setCancelable(false); 
     if (!progressDialog.isShowing()) { 
      progressDialog.show(); 
     } 

    } 

    @Override 
    protected Void doInBackground(Void... params) { 
    try 

    { 
     DefaultHttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet("http://192.168.1.16:89/Derdeery/Zaki.php"); 
     HttpResponse response = client.execute(request); 
     HttpEntity entity=response.getEntity(); 
     data=EntityUtils.toString(entity); 
     Log.e("STRING", data); 

    } catch (ClientProtocolException e) { 
     Log.d("HTTPCLIENT", e.getLocalizedMessage()); 
    } catch (IOException e) { 
     Log.d("HTTPCLIENT", e.getLocalizedMessage()); 
    } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     try { 

     if (progressDialog.isShowing()) { 
      progressDialog.dismiss(); 
     } 
      JSONArray json=new JSONArray(data); 

      for(int i=0;i<json.length(); i++) 
      { 

      JSONObject obj=json.getJSONObject(i); 
      String name=obj.getString("Part_NAME"); 
      String id = obj.getString("Part_ID") ; 
      Log.e("name", name); 
      r.add(name+"-"+id); 



      } 
      adapter.notifyDataSetChanged(); 


     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
1
私はあなたの目安与えることができます

1)、すなわちサーバー側で(あなたのデータベースからデータをフェッチするネットワーク操作を実行し、それを変換しますjsonなどに)doInBackGround()の中に。

2.)doInBackground()は結果を返します。これはonPostExecute()内のonPostExecuteで受信され、その結果を2つのリストビューに設定します。

3.)onPreExecute()には、doInBackgroundが実行されるときに表示される進捗ダイアログロジックが含まれます。

一度お試しください。そうでなければ私に教えてください、私はあなたをさらに助けます。

+0

doInbackgroundメソッドから返されるjsonはonPostexecuteメソッドのパラメータである必要があります。同じデータ型ですか? – JEREEF

+0

このdoInbackgroundメソッド\t JSONArray doInBackground(String ... params) \t { \t String url = params [0]; \t文字列データ。 \t JSONArray json = null ;; \tは を試し\t { \t DefaultHttpClientクライアント=新しいDefaultHttpClient(); \t HttpGetリクエスト=新しいHttpGet(url); \t HttpResponse応答; \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t応答=クライアント。実行(要求); \t \t \t HttpEntity entity = response.getEntity(); \t data = EntityUtils.toString(エンティティ); \t \t \t json = new JSONArray(data); \t} \tキャッチ(例外e) \t {\t \t \t} \t \t \t \t 戻りJSON。 \t} – JEREEF