2012-02-11 3 views
1
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    switch (requestCode) 
    { 
    case REQUEST_VOICE: 
     if (resultCode != RESULT_OK) break; 
     ArrayList<String> raw = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
     dialogAdapter.add(raw.get(0)); 
     dialogAdapter.notifyDataSetChanged(); // Doesn't work?! 
     String res = "http://192.168.0.197/xyz.php?v=1"; 
     res = getFromUrl(res); // Get content from internet 
     if (!res.startsWith("{")) res = "Error."; 
     else { 
      try { 
       JSONObject json = new JSONObject(res); 
       dialog.set(dialog.lastIndexOf(raw.get(0)), json.getString("in")); // Should update the row that was added before the call of getFromUrl() 
       res = json.getString("out"); 
      } catch (Exception e) { 
       res = "Error"; 
      } 
     } 
     dialogAdapter.add(res); 
     dialogAdapter.notifyDataSetChanged(); // Works? 
     break; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

(Я сократил код, указанный выше.) элемент управления ListView (dialogAdapter это адаптер) будет обновляться после функции (onActivityResult) полностью выполнена, , но я хочу добавить рядом с ним, прежде чем я вызову getFromUrl().Android - Refresh ListView, прежде чем HTTP запрос

Пожалуйста, помогите.

ответ

1

код работает отлично, как это ожидалось

Проблемы, которая возникает здесь это вы выполнение приложения продолжается до здесь ..

dialogAdapter.add(raw.get(0)); 
dialogAdapter.notifyDataSetChanged(); // Doesn't work?! 

на самом деле он работает, но вы вызываете другую задачу, которая нависает интерфейс нить, вот она:

res = getFromUrl(res); 

он висит потока пользовательского интерфейса, чтобы обновить себя, и после того, как данные былипринес 210 эта строка выполняется снова.

dialogAdapter.notifyDataSetChanged(); // Works? 

и ListView обновлен.

Solutino: никогда не выполнять запрос URL-адреса в потоке пользовательского интерфейса. Использовать AsyncTask

+0

Спасибо, это сработало. :) – DragonWork

Смежные вопросы