最近因为想自己做个简单的天气app,去网上搜了下关于天气的WebService,按http://www.cnblogs.com/ghj1976/archive/2011/04/26/2028904.html 上面的讲解学习,将天气的数据调用了出来,在安卓2.3可以显示,但是在4.2却显示不出数据,有点懵了!
下面show出代码
package com.example.weatherwebserviceapplication; import java.io.UnsupportedEncodingException; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class WebService extends Activity { private static final String NAMESPACE = "http://WebXml.com.cn/"; private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx"; private static final String METHOD_NAME = "getWeatherbyCityName"; private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName"; private String weatherToday; private Button okButton; private SoapObject detail; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); okButton = (Button) findViewById(R.id.button1); okButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.out.println("access button"); String city = "厦门"; getWeather(city); } }); } public void getWeather(String cityName) { try { System.out.println("rpc------"); //指定webservice的命名空间和调用的方法名 SOAP协议 SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME); Log.e("rpc", rpc + ""); Log.e("cityName is ", cityName + ""); //设置调用方法的参数值 rpc.addProperty("theCityName", cityName); //生成调用Webservice方法的SOAP请求信息 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); //设置SOAPSoapSerializationEnvelope类的bodyOut属性 //该属性的值就是在第一步创建的SoapObject对象 envelope.bodyOut = rpc; envelope.dotNet = true; envelope.setOutputSoapObject(rpc); HttpTransportSE ht = new HttpTransportSE(URL); ht.debug = true; //使用call方法调用WebService方法 ht.call(SOAP_ACTION, envelope); //获得WebService方法的返回结果 detail = (SoapObject) envelope.getResponse(); Log.e("detail", detail + ""); Toast.makeText(WebService.this, detail.toString(), Toast.LENGTH_LONG).show(); parseWeather(detail); return; } catch (Exception e) { e.printStackTrace(); } } private void parseWeather(SoapObject detail) throws UnsupportedEncodingException { String date = detail.getProperty(6).toString(); weatherToday = "今天:" + date.split(" ")[0]; weatherToday = weatherToday + "\n天气:" + date.split(" ")[1]; weatherToday = weatherToday + "\n气温:" + detail.getProperty(5).toString(); weatherToday = weatherToday + "\n风力:" + detail.getProperty(7).toString() + "\n"; Log.e("weatherToday is ", weatherToday + ""); Toast.makeText(WebService.this, weatherToday, Toast.LENGTH_LONG).show(); } }
奇怪的是,在安卓2.3可以显示出正常的天气数据,而安卓4.2却不行
在这里在看看logcat里面打印的日志:
安卓2.3
安卓4.2
今晚就先写到这里吧!明天继续找答案!预计是跟安卓系统版本内置的系统机制有关?安卓系统升级,肯定系统也改了不少地方吧!