2011-10-06 18 views
9

私は、ユーザーからの入力を受け取り、サーバーに渡してJSON文字列を返し、その解析された内容をListViewに表示するアプリケーションを作成しています。設定後、onPostExecute方法でAndroidのadapter.notifyDataSetChanged()が機能していませんか?

//stripped down version 
public class main extends ListActivity { 

ArrayList<String> listItems = new ArrayList<String>(); 
ArrayAdapter<String> adapter; 
final EditText input = (EditText)findViewById(R.id.input); 


input.addTextChangedListener(new TextWatcher() {  
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if(!input.getText().toString().equals("")) { 
      new GetDataTask().execute(input.getText().toString()); 
     } 

    } 
}); 

private class GetDataTask extends AsyncTask<String, Void, ArrayList<String>> { 
     protected ArrayList<String> doInBackground(String... query) { 

     URL url = new URL("http://myserversaddressgoeshere.com/search/thequerygoeshere"); 
     URLConnection conn = url.openConnection(); 
     BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      ArrayList<String> items = new ArrayList<String>(); 
     //the code that parses the JSON goes here; it writes some strings to items 
     return items; 
     } 

     protected void onPostExecute(ArrayList<String> items) { 
      listItems = items; 
     adapter.notifyDataSetChanged(); 
     } 
} 

} 

(私の試みは、コードブロックに障害が発生したことを確認する場合、これは私の最初の投稿ですので、私は事前に謝罪)

:私は現在、AsyncTaskを拡張することによってこれを達成していますlistItemsはitemと同じですが、listItemsの内容を印刷すると、まさに私が欲しいものです。しかし、何らかの理由で、onPostExecuteから実行すると、adapter.notifyDataSetChanged()は何もしないように見えます(メインスレッドから呼び出されたときは正常に動作します)。

誰かが何が起こっているのか、どのように修正しているのか分かっていれば、本当に感謝しています。ありがとう!

答えて

21

あなたはこの

protected void onPostExecute(ArrayList<String> items) { 
     listItems.clear(); 
     listItems.addAll(items); 
     adapter.notifyDataSetChanged(); 
    } 

を試すことができますし、私はあなたがすでにこの

adapter = new ArrayAdapter<String>(listItems); 
+0

おっと、何かをやっている願っています、私はその宣言を残しました。 アダプタ=新しいArrayAdapter (this、 \t \t android.R.layout.simple_list_item_1、listItems); –

+0

あなたは** clear()**と** addAll()** – Samuel

+0

を試しましたか?どうもありがとうございました!好奇心のために、なぜclear - > addAll - > notifyDSCが動作するのか知っていますか? –

関連する問題