2013-05-21 43 views
-1

我想從我的android手機發送圖片到我的本地web服務器。一旦它連接到Web服務器,我得到以下內容:android.os.NetworkOnMainThreadException如何避免android.os.NetworkOnMainThreadException

我認爲我的問題的解決方案是使該方法異步。這是我不熟悉的。

所以我的問題是: 我怎樣才能使以下方法異步?

public class Send { 
    public Send(){ 
    } 

public static String send(String path) throws Exception { 
    String filePath = path; 
    String svar; 

    HttpClient httpclient = new DefaultHttpClient(); 
    try { 
     HttpPost httppost = new HttpPost("path to web server"); 
     FileBody pic = new FileBody(new File(filePath)); 
     MultipartEntity requestEntity = new MultipartEntity(); 
     requestEntity.addPart("file", pic); 

     httppost.setEntity(requestEntity); 
     System.out.println("executing request " + httppost.getRequestLine()); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity responseEntity = response.getEntity(); 
     System.out.println("----------------------------------------"); 
     System.out.println(response.getStatusLine()); 

     ByteArrayOutputStream outstream = new ByteArrayOutputStream(); 
     response.getEntity().writeTo(outstream); 
     byte [] responseBody = outstream.toByteArray(); 
     svar = new String(responseBody); 
     System.out.println(svar); 

    } finally { 
     try { 
      httpclient.getConnectionManager().shutdown(); 
     } 
     catch (Exception ignore) { 
     } 
    } 
    return svar; 
    } 

} 
+2

只需輕點'android.os.NetworkOnMainThreadException'在谷歌,你將不得不使用大量的實例的' AsyncTask' –

回答

2

阻塞操作不能在主線程上執行,因爲這將使用戶體驗較差。

AsyncTask並不難解決。 doInBackground方法在另一個線程上運行。 onPostExecute方法允許您更新UI,因爲此方法在主線程上運行。任何其他線程都不允許更新UI。

+0

我必須在活動中使用AsyncTask嗎?或者把它放在普通的類中是否可以嗎?我得到一個nullPointerException,但我不明白爲什麼 – Mat

+0

原來你可能不得不這樣做,它在我將代碼移動到一個活動時起作用 – Mat

+0

一個'AsyncTask'可以是一個常規類:'public class MyAsyncTask extends AsyncTask '。請參閱[Android API](http://developer.android.com/reference/android/os/AsyncTask.html) –

0

您無法在主線程中執行任何網絡操作。爲了擺脫的問題做另一個線程網絡相關的任務,或AsyncTask

查詢詳情這個link

+0

你介意寫一個代碼片段來創建一個運行它的新線程嗎?將不勝感激! – Mat

+1

@Mat檢查這個答案http://stackoverflow.com/a/6343299/931982 .. – stinepike