2011-11-18 4 views
0

이 오류와 함께 도와주세요 .... 다음 코드에서 정보 얻기 기능은 올바르게 작동하지만 스레드가 종료시 예외를 잡았다 고 말하는 오류가 발생합니다. 탭 호스트와 첫 번째 탭 페이지는 다음과 ... 난 내 데이터를 얻을 다음 목록보기에 표시 될 때까지이에서 내가 진행 대화 상자를 보여안드로이드에서 스레드 종료 오류

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 처리에 필요한 모든 것을 제공 할 수 있으며 backgroun 작업이 진행되는 동안 진행 대화 상자를 쉽게 표시 할 수 있습니다. – user370305

+0

오류 로그를 게시 할 수 있습니까 –

답변

1

정확히 무엇이 오류의 원인인지는 잘 모르겠지만 실제 UI 스레드에서 실행되지 않는 UI 변경과 관련 있다고 생각됩니다. 안드로이드에는 AsyncTask이라는 클래스가 있습니다.이 클래스는 사용자를 위해 스레딩을 수행하고 백그라운드 스레드와 UI 스레드 간의 데이터 전달을 처리합니다. AsyncTask 클래스를 활용하도록 코드를 다시 작성하는 것이 좋습니다.

+0

내 질문을 볼 수 있습니까 http://stackoverflow.com/questions/8188429/async-task-in-android-not-working – user671805