2013-03-21 54 views
1

我试了一天仍然无法发布数据到wcf。这是我在服务器上的代码.net 。当我从Android Logcat看到日志时,它总是停止在响应= httpClient.execute(请求);并在错误日志中没有捕获,e.getMessage()返回null。所以我不知道发生了什么事情......任何人都可以发现下面的代码有什么问题?无法从Android发布数据WCF

接口:

<OperationContract()> _ 
    <WebInvoke(Method:="POST", 
    RequestFormat:=WebMessageFormat.Json,  
    ResponseFormat:=WebMessageFormat.Json, 
    BodyStyle:=WebMessageBodyStyle.Bare, 
    UriTemplate:="SaveEmail")> _ 
    Function SaveEmail(ByVal emailreceiver As clsEmailRecipe) As String 

代码:

Public Function SaveEmail(emailreceiver As clsEmailRecipe) As String Implements IRestServiceImpl.SaveEmail 
     Return "0" 
    End Function 

Android客户端代码:

public static String SendEmail(String url,String Data) { 
    // POST request to <service>/SaveVehicle 
    HttpPost request = new HttpPost(url); 
    request.setHeader("Accept", "application/json"); 
    request.setHeader("Content-type", "application/json"); 
    String sText =""; 
    // Build JSON string 
    JSONStringer email; 
    try { 
     email = new JSONStringer() 
      .object() 
       .key("clsEmailRecipe") 
        .object() 
         .key("emailAddress").value("[email protected]") 
         .key("campaignId").value("1") 
         .key("recipeId").value("2") 
        .endObject() 
       .endObject(); 
     StringEntity entity; 
     entity = new StringEntity(email.toString()); 
     request.setEntity(entity); 


     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpResponse response; 
     Log.d("SendEmail","1"); 
     response = httpClient.execute(request); // This Line Cause error 
     Log.d("SendEmail","2"); 
     sText=response.getStatusLine().toString(); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     //Log.d("SendEmail",e.getMessage()); 
     Log.d("SendEmail","Error with null message"); 
     if (e.getMessage() !=null){ 
      Log.d("SendEmail",e.getMessage()); 
     } 

     e.printStackTrace(); 
    } 


     return sText; 

} 

的logcat:

03-21 17:36:03.735: D/PostVehicle(23079): 1 
03-21 17:36:03.740: D/PostVehicle(23079): Error with null message 
03-21 17:36:03.740: W/System.err(23079): android.os.NetworkOnMainThreadException 
03-21 17:36:03.740: W/System.err(23079): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118) 
03-21 17:36:03.740: W/System.err(23079): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
03-21 17:36:03.740: W/System.err(23079): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
03-21 17:36:03.740: W/System.err(23079): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
03-21 17:36:03.740: W/System.err(23079): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
03-21 17:36:03.740: W/System.err(23079): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
03-21 17:36:03.740: W/System.err(23079): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
03-21 17:36:03.740: W/System.err(23079): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
03-21 17:36:03.740: W/System.err(23079): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670) 
03-21 17:36:03.745: W/System.err(23079): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509) 
03-21 17:36:03.745: W/System.err(23079): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
03-21 17:36:03.745: W/System.err(23079): at com.omg.rc.general.Utils.PostVehicle(Utils.java:168) 
03-21 17:36:03.745: W/System.err(23079): at com.omg.rc.LoginActivity.onClick(LoginActivity.java:340) 
03-21 17:36:03.745: W/System.err(23079): at android.view.View.performClick(View.java:4223) 
03-21 17:36:03.745: W/System.err(23079): at android.view.View$PerformClick.run(View.java:17275) 
03-21 17:36:03.745: W/System.err(23079): at android.os.Handler.handleCallback(Handler.java:615) 
03-21 17:36:03.745: W/System.err(23079): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-21 17:36:03.745: W/System.err(23079): at android.os.Looper.loop(Looper.java:137) 
03-21 17:36:03.745: W/System.err(23079): at android.app.ActivityThread.main(ActivityThread.java:4898) 
03-21 17:36:03.745: W/System.err(23079): at java.lang.reflect.Method.invokeNative(Native Method) 
03-21 17:36:03.745: W/System.err(23079): at java.lang.reflect.Method.invoke(Method.java:511) 
03-21 17:36:03.745: W/System.err(23079): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008) 
03-21 17:36:03.745: W/System.err(23079): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775) 
03-21 17:36:03.745: W/System.err(23079): at dalvik.system.NativeStart.main(Native Method) 
+0

你可以发布你的logcat吗? – 2013-03-21 09:30:32

+0

包括在帖子中的日志猫,万一你怀疑是因为在Androidmanifest.xml中的permision,我已经添加了这个 <使用权限android:name =“android.permission.INTERNET”/> – tsohtan 2013-03-21 09:39:41

回答

0

AsyncTask内运行您的SendEmail(String url,String Data)方法。网络操作不允许在主线程中运行。

+0

-__ -'...这花了我半天的生活。谢谢!!!有用!。 – tsohtan 2013-03-21 09:50:56