从android eclipse上的webservice中检索特定数据

时间:2012-05-30 13:41:28

标签: android eclipse web-services

任何人都可以告诉我如何从android eclipse上的Web服务中检索特定数据。 到目前为止,我已经完成了这些事情。如果错误的话,请让我如何修补这个来源。

请在下面找到我的来源。

[WEB METHOD]

package com.android.backend;

public class FahrenheitToCelsius {

    public double FahrenheitToCelsius(double str){
        return ((str-32)*5)/9;
    }
}

[SCREENACTIVITY.JAVA]

package com.android.button.web;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Tesing_webserviceActivity extends Activity
{
    /** Called when the activity is first created. */
    private static String NAMESPACE = "http://tempuri.org/";
    private static String METHOD_NAME = "FahrenheitToCelsius";
    private static String SOAP_ACTION = "http://tempuri.org/FahrenheitToCelsius";
    private static String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";

      Button btnFar,btnClear;
      EditText txtFar,txtres;

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

        btnFar = (Button)findViewById(R.id.btn_getvalues);

        btnClear = (Button)findViewById(R.id.btnClear);
        txtFar = (EditText)findViewById(R.id.txtFar);
        txtres = (EditText)findViewById(R.id.txtresult);

        btnFar.setOnClickListener(new View.OnClickListener()
        {

           public void onClick(View v)
           {
           //Initialize soap request + add parameters
           SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);       

           //Use this to add parameters
           request.addProperty("str",txtFar.getText().toString());

           //Declare the version of the SOAP request
           SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

           envelope.setOutputSoapObject(request);
           envelope.dotNet = true;

           try {
               HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

               //this is the actual part that will call the webservice
                 androidHttpTransport.call(SOAP_ACTION, envelope);

               // Get the SoapResult from the envelope body.
                 SoapObject result = (SoapObject)envelope.bodyIn;

                 if(result != null)
                 {
                 //Get the first property and change the label text
                   txtres.setText(result.getProperty(0).toString());
                    }
                   else
                   {
                      Toast.makeText(getApplicationContext(), "No Response",Toast.LENGTH_LONG).show();
                    }
                  } catch (Exception e) {
                        e.printStackTrace();
               }
              }
            });

        btnClear.setOnClickListener(new View.OnClickListener()
        {

                  public void onClick(View v)
                  {
                        txtres.setText("");
                        txtFar.setText("");
                  }
            });
     }
 } 

非常感谢!! .....

2 个答案:

答案 0 :(得分:1)

如果要从Web服务中检索简单的信息,我建议使用返回JSON对象的REST服务。 在Android中,您可以使用GSON库轻松解析此JSON对象。 将JSON解析为Java对象的示例:

objectType = new TypeToken<YourClass>(){}.getType();
//Parse the respons with GSON
Gson gson = new Gson();
return gson.fromJson(webserviceResponse, objectType);

您可以使用简单的HTTP GET请求轻松访问Web服务。

            HttpClient client = new DefaultHttpClient();
        client.getParams().setParameter(CoreProtocolPNames.USER_AGENT,"android");
        HttpGet request = new HttpGet();
        request.setHeader("Content-Type", "text/plain; charset=utf-8");
        request.setHeader("Cache-Control", "no-cache");

        request.setURI(new URI(URL));
        HttpResponse response = client.execute(request);
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

        StringBuffer sb = new StringBuffer("");
        String line = "";

        String NL = System.getProperty("line.separator");
        while ((line = in.readLine()) != null)
        {
            sb.append(line + NL);
        }
        in.close();
        String webserviceResponse = sb.toString();

答案 1 :(得分:0)

我在我的一个项目中使用此功能(您可能不需要Authorization标头):

private static InputStream sendRequest(String requestContent, String serviceUrl, String SoapAction) throws Throwable {

    // initialize HTTP post
    HttpPost httpPost = null;
    try {
    httpPost = new HttpPost(serviceUrl);

    httpPost.addHeader("Authorization", getB64Auth());
    httpPost.addHeader("Content-Type", "text/xml; charset=ISO-8859-1");//ISO-8859-1 ; UTF-8     
    httpPost.addHeader("SOAPAction", SoapAction);
    } catch (Throwable e) {
      Log.e(LOG_TAG, "Error initializing HTTP post for SOAP request", e);
      throw e;
    }

    // load content to be sent
    try {
      HttpEntity postEntity = new StringEntity(requestContent);
      httpPost.setEntity(postEntity);         
    } 
    catch (UnsupportedEncodingException e) {
          Log.e(LOG_TAG, "Unsupported encoding of content for SOAP request", e);
          throw e;
        }

    // send request
    HttpResponse httpResponse = null;
    HttpClient httpClient = new DefaultHttpClient();
    try {
      httpResponse = httpClient.execute(httpPost);
    } catch (Throwable e) {
      Log.e(LOG_TAG, "Error sending SOAP request", e);
      throw e;        
    }

    // get SOAP response
    try {
      // get response code
      int responseStatusCode = httpResponse.getStatusLine().getStatusCode();

      // if the response code is not 200 - OK, or 500 - Internal error,
      // then communication error occurred
      if (responseStatusCode != 200 && responseStatusCode != 500) {
        Log.i(LOG_TAG, "Got SOAP response code " + responseStatusCode + " "
            + httpResponse.getStatusLine().getReasonPhrase());
      }

      // get the response content
      HttpEntity httpEntity = httpResponse.getEntity();
      InputStream is = httpEntity.getContent();
      return is;
    } catch (Throwable e) {
      Log.e(LOG_TAG, "Error getting SOAP response", e);
      throw e;
    }
  }
相关问题