2016-01-21 37 views
0

我必須發送/發佈一些數據到.svc基本連接到遠程數據庫的Web服務。我使用JSONStringer發送數據,但每次響應狀態都是錯誤的。我的數據沒有發送。如何在Android中使用HttpPost。有人可以幫我解決這個問題嗎?如何使用URL在HttpClient中發佈數據android

這裏是我的web服務代碼

String namespace = "http://103.24.4.60/xxxxx/MobileService.svc"; 

public void ActivityUpload(final String strCurrentDateTime, final String strTitle, final String replaceDescChar, final String editedHashTag) 
    { 
     new AsyncTask<String, Void, String>() 
     { 
      @Override 
      protected String doInBackground(String... arg0) 
      { 
       String line = ""; 
       try 
       { 
        Log.e("ActionDate "," = "+ strCurrentDateTime); 
        Log.e("ActivityId"," = "+strActivityId); 
        Log.e("UserId"," = "+str_UserId); 
        Log.e("ObjectId"," = "+strVessId); 
        Log.e("Name"," = "+strTitle); 
        Log.e("Remark"," = "+replaceDescChar); 
        Log.e("Status"," = "+"PENDING"); 
        Log.e("Type"," = "+strType); 
        Log.e("starflag"," = "+0); 
        Log.e("HashTag"," = "+editedHashTag); 
        Log.e("Authentication_Token"," = "+str_Authentication_Token); 


        // make web service connection 
        HttpPost request = new HttpPost(namespace + "/Upd_Post_Activity"); 
        request.setHeader("Accept", "application/json"); 
        request.setHeader("Content-type", "application/json"); 
        // Build JSON string 
        JSONStringer TestApp = new JSONStringer().object() 
           .key("ActionDate").value(strCurrentDateTime) 
           .key("ActivityId").value(strActivityId) 
           .key("UserId").value(str_UserId) 
           .key("ObjectId").value(strVessId) 
           .key("Name").value(strTitle) 
           .key("Remark").value(replaceDescChar) 
           .key("Status").value("PENDING") 
           .key("Type").value(strType) 
           .key("starflag").value("0") 
           .key("HashTag").value(editedHashTag) 
           .key("Authentication_Token").value(str_Authentication_Token).endObject(); 
        StringEntity entity = new StringEntity(TestApp.toString()); 

        Log.d("****Parameter Input****", "Testing:" + TestApp); 
        request.setEntity(entity); 
        // Send request to WCF service 
        DefaultHttpClient httpClient = new DefaultHttpClient(); 
        HttpResponse response = httpClient.execute(request); 

        Log.d("WebInvoke", "Saving: " + response.getStatusLine().toString()); 
        // Get the status of web service 
        BufferedReader rd = new BufferedReader(new InputStreamReader(
          response.getEntity().getContent())); 
        // print status in log 

        while ((line = rd.readLine()) != null) { 
         Log.d("****Status Line***", "Webservice: " + line); 

        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       return line; 
       } 

     }.execute(); 
    } 

這裏是輸入參數。

****Parameter Input****﹕ Testing:{"ActionDate":"2016-01-21%2014:20:43%20PM","ActivityId":"120160119180421058","UserId":"125","ObjectId":"1","Name":"Title2","Remark":"Test%20two","Status":"PENDING","Type":"3","starflag":"0","HashTag":"990075","Authentication_Token":"6321D079-5B28-4F3F-AEE7-D59A1B9EFA59"} 

在先進的感謝。

+0

也許你也可以使用你的WS網址來試試看看你的WS沒有問題。 –

+0

建議避免使用[HttpClient](http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client)。它已被棄用。一個很好的選擇是[OkHttp](http://square.github.io/okhttp/),它有很多「[食譜](https://github.com/square/okhttp/wiki/Recipes)」讓你開始。 – Knossos

+0

WS中沒有任何問題。 –

回答

0

實現android httpclient正在棄用(贊成httpsurlconnection),但是,這些httpclient仍然使用相當廣泛。在gradle構建中,考慮到dentification和小的依賴lib的tweeks,httpclient可能還會使用一段時間。

(還是會使用HttpClient的?)

戴上一分鐘一旁的機器人。

  1. 學習如何使用JSON身體CURL你EXACT JSON的身體和準確HEADERS你將需要獲得成功,HTTP結果後測試,告訴你...... ref here

一旦你您可以使用您選擇的httpclient將您的curl測試組件轉移到android.httpclient.exec.POST。

  1. 設置您在android貼子中捲曲測試中已經過的相同組頭。 apache.httpclient sample

2.a.確保來自客戶端'request'構造函數的默認頭部列表默認不包含默認情況下的某些頭部您不想要的......爲了保證這一點,您可能需要打開HEADER日誌記錄爲您的客戶端... 。java example logger。刪除由POST的框架構造函數包含的不必要的頭文件。

2.b android logger(WIRE,HEADERS)與之不同,可能需要進行一些挖掘,具體取決於正在使用的客戶端。

  1. 使用與捲曲測試相同的標頭,將http.posts request.entity設置爲字符串或正確編碼的字節數組,包含捲曲測試中使用的相同JSON主體。

3.A.取決於JSON庫,創建你的消息對象,然後將這些對象轉換爲一些友好的類型,以便在後期的實體中使用,例如,使用'writer'將對象轉換爲帶有JSON的序列化字符串。

 reqRole = new ObjectMapper().createObjectNode(); 
     reqRole.put("__type", "Pointer"); 
     reqRole.put("className", "_Role"); 
     reqRole.put("objectId", roleId); 
     rootOb.put("requestedRole", reqRole); 
     rootOb.put("requestedBy",usersArr); 
     StringWriter writer = new StringWriter(); 
     try { 
      new ObjectMapper().writeValue(writer, rootOb) 
.. 
     String http-post-str=writer.toString(); 

3.B.包裹字符串POST請求JSON ......

httpPost.setEntity(new StringEntityHC4(http-post-str)); 
  • EXEC請求,你會得到你在捲曲了,因爲頭是相同或幾乎相同的相同的結果和身體是相同的,json編碼的字符串。相同的輸入=相同的結果
  • +0

    你可以請providre我完整的代碼st到httpCliemt –

    相關問題