2011-11-18 64 views
0

請幫助這個錯誤....在下面的代碼get info函數能正常工作,但它給出了一個錯誤,說線程在退出時發生異常....我試圖使用標籤主機和第一標籤頁如下......在此我顯示一個進度對話框,直到我得到我的數據,然後將其顯示在列表視圖線程在android中退出錯誤

public class History extends Activity implements OnItemClickListener 
{ 
/** Called when the activity is first created. */ 
ListView list; 

//LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS 
ArrayList<String> listItems; 

//DEFINING STRING ADAPTER WHICH WILL HANDLE DATA OF LISTVIEW 
ArrayAdapter<String> adapter; 
private String resDriver,resPassenger,ID; 
private ProgressDialog dialog; 
ArrayList<HashMap<String, Object>> listInfo = new ArrayList<HashMap<String, Object>>(); 
HashMap<String, Object> item; 
JSONObject jDriver; 
//JSONObject jPassenger; 

// Make strings for logging 
private final String TAG = this.getClass().getSimpleName(); 
private final String RESTORE = ", can restore state"; 
private final String state = "Home Screen taking care of all the tabs"; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    Intent loginIntent = getIntent(); 
    ID = loginIntent.getStringExtra("ID"); 
    listItems = new ArrayList<String>(); 
    Log.i(TAG, "Started view active rides"); 
    setContentView(R.layout.searchresults); 
    list = (ListView)findViewById(R.id.ListView01); 
    list.setOnItemClickListener(this); 
    adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,listItems); 

    list.setAdapter(adapter); 
    getInfo(); 
} 

功能getInfo用來啓動一個線程,其顯示對話框並啓動http請求以獲取一些數據...

public void getInfo(){ 
    GetInfoThread checkUpdate = new GetInfoThread(); 
    checkUpdate.start(); 
    dialog = ProgressDialog.show(History.this, "Retrieving Info","Please Wait ...", true); 
} 

private class GetInfoThread extends Thread 
{ 
    public void run() { 
     jDriver = new JSONObject(); 
     try { 
      jDriver.put("ID", ID); 
      jDriver.put("task", "GET DATES"); 

     } catch (JSONException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     listItems = new ArrayList<String>(); 
     Log.i(TAG,"Sending data for the driver rides"); 
     resDriver = HTTPPoster.sendJson(jDriver,"http://dsadsada"); // Any Server URL 

     JSONObject driver; 
     try { 
      driver = new JSONObject(resDriver); 
      Log.i(TAG,"Recieved Driver details"); 

        listItems.add(array[0]); 
        handler.sendEmptyMessage(0); 
       } 
      } 
     } catch (JSONException e) { 
     // TODO Auto-generated catch block 
      listItems.add("No driver rides created"); 
      handler.sendEmptyMessage(0); 
     } 

    } 

    private Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      dialog.dismiss(); 
      Log.i(TAG,"hello 123"); 
      adapter.notifyDataSetChanged(); 
     } 
    }; 
} 
+0

是否有強制使用線程?如果可能的話,只需使用asyncTask,它可以爲您提供處理UI的所有內容,並且您可以在後臺工作完成時輕鬆顯示進度對話框。 – user370305

+0

你可以發佈錯誤日誌 –

回答

1

我不確定究竟是什麼原因導致你的錯誤,但我懷疑它與UI更改沒有在實際的UI線程上運行有關。在Android中有一個名爲AsyncTask的類,它將爲您執行線程並處理後臺線程和UI線程之間的數據傳遞。我會建議您重新編寫代碼以利用AsyncTask類。

+0

你可以看看我的問題http://stackoverflow.com/questions/8188429/async-task-in-android-not-working – user671805