谁能告诉我如何从android eclipse上的Web服务中检索特定数据。到目前为止,我已经做了这些事情。如果错误,请让我如何修补这个来源。
请在下面找到我的消息来源。
[网页方法]
package com.android.backend;
public class FahrenheitToCelsius {
public double FahrenheitToCelsius(double str){
return ((str-32)*5)/9;
}
}
[屏幕活动。爪哇]
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("");
}
});
}
}
多谢!!.....
如果您正在从 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();
我在我的一个项目中使用了这个函数(你可能不需要授权标头):
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;
}
}