2013-05-21 136 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