2013-07-16 1 views
0

저는 지금 안드로이드 프레임 워크를 가지고 놀기 위해 아주 기본적인 응용 프로그램을 개발하려고합니다. 3 가지 활동으로 간단한 애플리케이션을 만들었습니다. 하나는 데이터베이스에 데이터를 삽입하는 것이고, 하나는 확인 메시지를 처리하고 다른 하나는 지금까지 입력 된 데이터를 표시하는 것입니다.안드로이드 응용 프로그램에서 스레드 오류를 표시합니다.

나는 이런 일이 이유에 나는 매우 명확하지 않다 목록 활동에서이 오류 (마지막 실행) Check picture to see error

을받을 수 있지만,이 로그 캣 출력입니다. 내가하려는 것은 그 활동에서 다음과 같습니다 :

HttpResponse response = httpClient.execute(httpPost); 
      HttpEntity resEntity = response.getEntity(); 

      if (resEntity != null) { 

       String responseStr = EntityUtils.toString(resEntity).trim(); 
       Log.v(TAG, "Response: " + responseStr); 
        TextView responseSimpleText = new TextView(this); 
        responseSimpleText.setText(responseStr.toString()); 
       // you can add an if statement here and do other actions based on the response 

       setContentView(responseSimpleText); 
      }else{ 
       Log.v("ListingAcitivty.java", "Response is Null"); 
      } 

누군가가 무슨 일이 일어나고 있는지 지적 할 수 있습니까? AsyncTask를 사용하고 있는데 데이터가 성공적으로 삽입되었습니다.

+0

이것은 'AsynTask'의'doInBackground' 메소드의 일부라고 생각합니다. 이 메소드는 뷰를 갱신 할 수 없다는 것을주의하라. (당신은이 메소드 내부에서'setContentView (responseSimpleText); 그것은 UI 스레드가 아닌 백그라운드 스레드에서 실행되기 때문입니다. –

+0

나는 이것을 결코 알지 못했다! 감사. 이 경우 가장 좋은 일은 무엇입니까? –

+1

'onPreExecute()','onProgressUpdate (Progress ...)'또는'onPostExecute (Result)'에서 뷰를 업데이트하십시오. 자세한 내용은 [여기] (http://developer.android.com/reference/android/os/AsyncTask.html) –

답변

1

예외적으로 UI에서 다른 스레드에서 UI의 내용을 변경하려는 것 같습니다. 당신은 직접 할 수 없습니다.

스레드 풀의 스레드에서 실행하는 작업이 UI 스레드에서 실행되고 있지 않으므로 UI ​​개체에 액세스 할 수 없습니다.

은에서 : https://developer.android.com/training/multiple-threads/communicate-ui.html

그 페이지는이 시나리오에 접근해야하는 방법에 대해 설명합니다.

+0

내 코드와 관련하여이 문제를 해결할 수있는 방법에 대한 조언이 있으십니까? –

관련 문제