2012-08-03 2 views
0

저는 Android가 비교적 새롭습니다. AsyncTask를 사용하려고하지만 스레드가 실행 된 후 내 응용 프로그램이 강제로 닫습니다. 내 비동기 스레드 내 안드로이드 센서에서 데이터를 저장하는 서버 쪽에서 PHP를 실행. 어떤 도움을 주시면 감사하겠습니다.Android : AsyncThread가 내 앱을 닫으려고합니다.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);   
..... 
final FuncionsActivity functions = new FuncionsActivity(); 
if(something) 
    functions.execute(nameValuePairs); 
..... 
    } 

private class FuncionsActivity extends 
     AsyncTask<ArrayList<NameValuePair>, Integer, Integer > { 
    @Override 
    protected Integer doInBackground(ArrayList<NameValuePair>... data) { 
     // 1) Connect via HTTP. 2) Encode data. 3) Send data. 
     try 
     { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new  

        HttpPost("http://.../saveCoordinates.php");       
      //HttpPost httppost = new 
      httppost.setEntity(new UrlEncodedFormEntity(data[0])); 
      HttpResponse response = httpclient.execute(httppost); 
      Log.i("postData", response.getStatusLine().toString()); 
      this.onPostExecute(null); 
       //Could do something better with response. 
     } 
     catch(Exception e) 
     { 
      Log.e("log_tag", "Error1: " + e.toString()); 
     } 
     return 0;  
     } 

     protected void onProgressUpdate(Integer... item){ 
      Log.d("TestP", item[0] + " item has been processed"); 
     } 

     protected void onPostExecute(Integer result){ 
      Log.d("TestP", "AsyncTask returned : " + result); 
     } 
} 

@Override 
protected void onDestroy() {    
    super.onDestroy(); // Move to bottom 
    //System.runFinalizersOnExit(true); 
} 
} 
+1

게시 로그 예외 스택. – kosa

+0

우, AsynchTask의 하위 클래스를 "Activity"라고 부르지 말고, Android에서 Activity는 보통 completly 다른 것을 참조하십시오. – Ixx

+1

하하, 나는 S.O가 자동으로 오류에 대한 입력 섹션을 가져야한다고 생각하여 10 표 이하의 사용자는 추가 할 때까지 게시 할 수 없습니다. 따라서 새로운 사용자가 오류 로그를 게시하지 않았다고 비난 할 수는 없습니다. 그러나 안드로이드가 당신에게 잘못된 것을 말한 것을 아는 것이 도움이 될 것입니다. – Andy

답변

0

이 변경 시도 감사 : 이것에

this.onPostExecute(null); 

: 당신이 배경 방법 안에 방법을 실행 후 전화를하려고하는 이유는

return null; 
0

. 자동으로 호출됩니다. 를 제거하고

당신은 onPostExecute()를 직접 호출 할 필요가 없습니다가

+0

onSensorChanged()에서 스레드를 실행하면 메모리가 부족하다는 오류가 발생합니다. 몇 초 안에 threadid = 500이됩니다.이게 받아 들일 수 있습니까? –

1

도움이되기를 바랍니다 시도, 시스템은 doInBackground()에 반환 무엇이든 함께 할 것입니다.

다른 답변과 마찬가지로 return null 행을 변경하면 문제를 해결할 수 있지만 원하는 것은 아닐 수 있습니다. 응답에서 추출한 정수 또는 다른 것을 반환하려고합니다.

코드의 또 다른 이상한 점은 data[0]입니다. 데이터는 ArrayList입니다. 컴파일됩니까? 또한 새로운 변수 데이터를 정의 할 수 없기 때문에 중복 가변 컴파일러 오류가 발생합니다.

+0

감사합니다. 한 번만 해보려고 했어. 스레드를 다시 실행하려고하면 충돌이 발생합니다. –

관련 문제