簡體   English   中英

如何在Android中發出httppost請求?

[英]How can I make an httppost request in Android?

我知道這應該很容易在網上找到,但是沒有一篇文章解決了我的問題,因此我來尋求幫助。我試圖在android中向wcf寧靜的Web服務發出一個httppost 請求 我想創建一個xml ,然后將其發布到服務並從服務獲得響應。

我創建了一個WCF Rest服務,它有一個接受xml並回復的方法,這是該方法的代碼:

 [OperationContract]
            [WebInvoke(Method = "POST",
                   RequestFormat = WebMessageFormat.Xml,
                   ResponseFormat = WebMessageFormat.Xml,
                   UriTemplate = "DoWork1/{xml}",
                   BodyStyle = WebMessageBodyStyle.Wrapped)]
            XElement DoWork1(string xml);

     public XElement DoWork1(string xml)
            {
                StreamReader reader = null;
                XDocument xDocRequest = null;
                string strXmlRequest = string.Empty;
                reader = new StreamReader(xml);
                strXmlRequest = reader.ReadToEnd();
                xDocRequest = XDocument.Parse(strXmlRequest);
                string response = "<Result>OK</Result>";
                return XElement.Parse(response);
        }

這是發布xml的android代碼:

   String myXML = "<? xml version=1.0> <Request> <Elemtnt> <data id=\"1\">E1203</data> <data id=\"2\">E1204</data> </Element> </Request>";
                HttpClient httpClient = new DefaultHttpClient();
                                        // replace with your url
                HttpPost httpPost = new HttpPost("http://192.168.0.15/Httppost/Service1.svc/DoWork1/"+myXML); 

此代碼禁止在路徑異常中拋出非法字符。

在此處輸入圖片說明

我該如何從android將xml文件發布到此服務。 任何建議將不勝感激。

要在Android上連接到WCF服務,您必須使用外部庫(如ksoap)。 在此處輸入鏈接說明

然后,您可以在本課程中適應您的需求:

public abstract class SoapWorker extends AsyncTask<SoapWorker.SoapRequest,Void,Object> {

public static class SoapRequest{

    private LinkedHashMap<String,Object> params;
    private String methodName;
    private String namespace;
    private String actionName;
    private String url;
    public SoapRequest(String url, String methodName,String namespace){
        this.methodName = methodName;
        this.params = new LinkedHashMap<>();
        this.namespace=namespace;
        this.actionName=this.namespace + "IService/" + methodName;
        this.url=url;
    }
    public void addParam(String key,Object value){
        this.params.put(key,value);
    }
}

@Override
protected Object doInBackground(SoapRequest input) {

    try {
        SoapObject request = new SoapObject(input.namespace, input.methodName);
        for(Map.Entry<String, Object> entry : input.params.entrySet()){
            request.addProperty(entry.getKey(),entry.getValue());
        }
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(input.url);
        androidHttpTransport.call(input.actionName, envelope);
        input.params.clear();

        return parseResponse(envelope.getResponse());
    } catch (Exception e) {
        Log.e("SoapWorker", "error " + e);
        return e;
    }

}

@WorkerThread
public abstract Object parseResponse(Object response);


}

像這樣使用此類:

 SoapWorker.SoapRequest request = new SoapWorker.SoapRequest(URL,METHOD_NAME,NAMESPACE);
    request.addParam(KEY,VALUE);
    ....
    request.addParam(KEY,VALUE);

    SoapWorker worker = new SoapWorker(){

        @Override
        public Object parseResponse(Object response) {
            if(response==null)
                return null;
           //parse response
           // this is background thread
            return response;
        }

        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);
           // this is ui thread
           //update your ui
        }
    };
    worker.execute(request);

僅在應用程序上下文中使用此異步任務。僅使用綠色roboot或otto中的EventBus將數據傳遞到Activity / fragment。

public class HTTPPostActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    makePostRequest();

}
private void makePostRequest() {


    HttpClient httpClient = new DefaultHttpClient();
                            // replace with your url
    HttpPost httpPost = new HttpPost("www.example.com"); 


    //Post Data
    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
    nameValuePair.add(new BasicNameValuePair("username", "test_user"));
    nameValuePair.add(new BasicNameValuePair("password", "123456789"));


    //Encoding POST data
    try {
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
    } catch (UnsupportedEncodingException e) {
        // log exception
        e.printStackTrace();
    }

    //making POST request.
    try {
        HttpResponse response = httpClient.execute(httpPost);
        // write response to log
        Log.d("Http Post Response:", response.toString());
    } catch (ClientProtocolException e) {
        // Log exception
        e.printStackTrace();
    } catch (IOException e) {
        // Log exception
        e.printStackTrace();
    }

}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM