2013-10-18 62 views
0

你好我試圖將數據發送到一個web服務Android的發送數據發佈到web服務

字符串URL =「https://www.myurl.com」;

URL urlobj = new URL(url); 
    HttpsURLConnection con = (HttpsURLConnection) urlobj.openConnection(); 
    con.setRequestMethod("POST"); 
    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

    String urlParameters = GenerateUrlParameters(data); 

    con.setDoOutput(true); 
    con.setDoInput(true); 

    Log.i("test", "hit1"); 

    DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 

    Log.i("test", "hit2"); 

    wr.writeBytes(urlParameters); 

    wr.flush(); 
    wr.close(); 

Hit1被擊中,但它在下一行失敗並且不會命中hit2。我究竟做錯了什麼 ?

我logcat的

10-18 09:17:33.302: D/gralloc_goldfish(2228): Emulator without GPU emulation detected. 
10-18 09:17:33.322: W/TextLayoutCache(2228): computeValuesWithHarfbuzz -- need to force to single run 
10-18 09:17:37.862: I/test(2228): hit1 
10-18 09:17:37.872: D/AndroidRuntime(2228): Shutting down VM 
10-18 09:17:37.872: W/dalvikvm(2228): threadid=1: thread exiting with uncaught exception (group=0x409961f8) 
10-18 09:17:37.912: E/AndroidRuntime(2228): FATAL EXCEPTION: main 
10-18 09:17:37.912: E/AndroidRuntime(2228): java.lang.IllegalStateException: Could not execute method of the activity 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at android.view.View$1.onClick(View.java:3039) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at android.view.View.performClick(View.java:3480) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at android.view.View$PerformClick.run(View.java:13983) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at android.os.Handler.handleCallback(Handler.java:605) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at android.os.Looper.loop(Looper.java:137) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at android.app.ActivityThread.main(ActivityThread.java:4340) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at dalvik.system.NativeStart.main(Native Method) 
10-18 09:17:37.912: E/AndroidRuntime(2228): Caused by: java.lang.reflect.InvocationTargetException 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at android.view.View$1.onClick(View.java:3034) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  ... 11 more 
10-18 09:17:37.912: E/AndroidRuntime(2228): Caused by: android.os.NetworkOnMainThreadException 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at java.net.InetAddress.getAllByName(InetAddress.java:220) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:460) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at libcore.net.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:280) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at dk.example.epaypayment.EpayHttpRequest.MakePayment(EpayHttpRequest.java:53) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  at dk.example.epaypayment.MainActivity.sendMessage(MainActivity.java:37) 
10-18 09:17:37.912: E/AndroidRuntime(2228):  ... 14 more 
10-18 09:22:38.232: I/Process(2228): Sending signal. PID: 2228 SIG: 9 
+0

您可以發佈您的LogCat嗎? –

+0

Logcat發佈... – Millerbean

+1

請谷歌,異常android.os.NetworkOnMainThreadException –

回答

11

調用sendPostRequest(String username, String pass)方法帶參數。您可以從UI線程調用此方法,請求將從不同的線程(嵌入AsyncTask)發送。

0

看看thisthis

您無法在主線程上執行網絡操作。一點Google搜索總是可以幫助你。

0

那麼,我可以建議使用HttpClient在更高的抽象層次上做到這一點。

DefaultHttpClient httpClient = null; 

HttpParams my_httpParams = new BasicHttpParams(); 

httpClient = new DefaultHttpClient(my_httpParams); 

,然後發送

HttpPost httpPost = new HttpPost(stringUri); 
httpPost.setHeader("Content-type", "application/x-www-form-urlencoded"); 
httpPost.setHeader("charset", "utf-8"); 

if (!TextUtils.isEmpty(someStringToSend)) { 
    httpPost.setEntity(new StringEntity(someStringToSend, HTTP.UTF_8)); 
} 

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

if (resEntity != null) { 
    response = EntityUtils.toString(resEntity, HTTP.UTF_8); 
} 

我還沒有測試,但應該工作。

1

嘗試實施此代碼,它應該工作。 如果你的Android版本高於4.0,那麼你將不得不強制使用Asyn Task,以便這個http請求不會在主線程上運行。否則應用程序將崩潰。 如果應用程序使用HTTPGET或HTTPPOST方法並且正在主線程上運行,它將會崩潰。 Asyn TASk是解決方案。

HttpClient client = new DefaultHttpClient(); 
    HttpResponse response; 
    JSONObject json=new JSONObject(); 
    HttpPost post = new HttpPost(url1); 

    try { 
     json.put("Key","your value"); 
     json.put("Key", "Value"); 


     StringEntity stringEntity = new StringEntity(json.toString()); 

     stringEntity.setContentEncoding("UTF-8"); 
     stringEntity.setContentType("application/json"); 
     post.setEntity(stringEntity); 

     response = client.execute(post); 
     Log.e("RESPONSE", response.toString()); 
     String responseBody = EntityUtils 
       .toString(response.getEntity()); 
     res= responseBody.toString(); 

     Log.e("RESPONSE BODY", responseBody);