2014-02-21 62 views
-1

我試圖將圖像發送到我的PHP服務器,但我得到這些錯誤機器人 - HttpConnection的錯誤,而上傳圖像到服務器

android.os.NetworkOnMainThreadException 
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1144) 
at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
at java.net.InetAddress.getAllByName(InetAddress.java:214) 
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 

這裏是我的發送圖像

public int uploadFile(String sourceFileUri) { 
     System.out.println("file path is " + sourceFileUri); //here i am successfully getting the image path 
     String upLoadServerUri = "http://www"; 
     String fileName = sourceFileUri; 
     int serverResponseCode = 0; 
     HttpURLConnection conn = null; 
     DataOutputStream dos = null; 
     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     int bytesRead, bytesAvailable, bufferSize; 
     byte[] buffer; 
     int maxBufferSize = 1 * 1024 * 1024; 
     File sourceFile = new File(sourceFileUri); 
     if (!sourceFile.isFile()) { 
      Log.e("uploadFile", "Source File Does not exist"); 
      return 0; 
     } 
     try { // open a URL connection to the Servlet 
      FileInputStream fileInputStream = new FileInputStream(sourceFile); 
      URL url = new URL(upLoadServerUri); 
      conn = (HttpURLConnection) url.openConnection(); // Open a HTTP 
                   // connection to 
                   // the URL 
      conn.setDoInput(true); // Allow Inputs 
      conn.setDoOutput(true); // Allow Outputs 
      conn.setUseCaches(false); // Don't use a Cached Copy 
      conn.setRequestMethod("POST"); 
      conn.setRequestProperty("Connection", "Keep-Alive"); 
      conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
      conn.setRequestProperty("Content-Type", 
        "multipart/form-data;boundary=" + boundary); 
      conn.setRequestProperty("uploaded_file", fileName); 
      dos = new DataOutputStream(conn.getOutputStream()); 

      dos.writeBytes(twoHyphens + boundary + lineEnd); 
      dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" 
        + fileName + "\"" + lineEnd); 
      dos.writeBytes(lineEnd); 

      bytesAvailable = fileInputStream.available(); // create a buffer of 
                  // maximum size 

      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      buffer = new byte[bufferSize]; 

      // read file and write it into form... 
      bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

      while (bytesRead > 0) { 
       dos.write(buffer, 0, bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable, maxBufferSize); 
       bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
      } 

      // send multipart form data necesssary after file data... 
      dos.writeBytes(lineEnd); 
      dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

      // Responses from the server (code and message) 
      serverResponseCode = conn.getResponseCode(); 
      String serverResponseMessage = conn.getResponseMessage(); 

      Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage 
        + ": " + serverResponseCode); 
      if (serverResponseCode == 200) { 
       System.out.println("server is ok"); 
      } 

      // close the streams // 
      fileInputStream.close(); 
      dos.flush(); 
      dos.close(); 

     } catch (MalformedURLException ex) { 

      Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
     } catch (Exception e) { 
      e.printStackTrace(); 

      Log.e("Upload file to server Exception", 
        "Exception : " + e.getMessage(), e); 
     } 
     return serverResponseCode; 
    } 

的代碼我不想使用異步任務。請給我一些其他的方式來發送圖像,你可以做一個

+0

檢查此[鏈接] [1]它可以幫助你...... [1]:http://stackoverflow.com/questions/6976317/android-http-connection-exception –

+1

另一個NetworkOnMainThreadException問題,真的嗎?下次使用Google ... – 2Dee

回答

0

雙向使用ASYN任務

public class MyUploadTask extends AsynTask<void,void,void>{ 
      void doInBackground(){ 
      //... do your upload task 
      } 
     } 

另外,如果你想發佈更新的UI在一個正常的線程中使用android.os.Handler OB爲使用線程

Thread myUploadTask = new Thread(new Runnable(){ 
       void run(){ 
       //... do your upload task 
       } 
     }); 
myUploadTask.start(); 

在主線程和工作線程之間發送消息。

你的情況: 如果我想發送圖像到服務器onCreate()方法

public void onCreate(){ 
    super.onCreate(); 
    uploadToServer(); 
} 
public void uploadToServer(){ 
Thread myUploadTask = new Thread (new Runnable(){ 
void run(){ 
    //Calling the upload Image method 
    uploadFile("www.yourdomin.com/uploadFile"); 
    } 
}); 
myUploadTask.start(); 
} 
+0

你可以請編輯我的代碼,並告訴我應該在哪裏寫你的代碼。我是Android新手。對不起 – hellosheikh

0

這個異常是因爲你在主線程上傳的圖片而是使用AsyncTask上傳圖像到服務器...

+0

我不想使用異步任務。請你能告訴我其他方式發送圖片 – hellosheikh

+0

爲什麼???????????? –

+0

,因爲它需要很長的後臺處理,這就是爲什麼。我想要一些更好的方式來做到這一點 – hellosheikh