最近因为想自己做个简单的天气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却不行

利用Web Services获取简单的天气数据(一)_Android

利用Web Services获取简单的天气数据(一)_服务端_02

在这里在看看logcat里面打印的日志:

安卓2.3

利用Web Services获取简单的天气数据(一)_服务端_03

安卓4.2

利用Web Services获取简单的天气数据(一)_服务端_04

利用Web Services获取简单的天气数据(一)_Android_05

利用Web Services获取简单的天气数据(一)_Android_06

利用Web Services获取简单的天气数据(一)_天气_07

今晚就先写到这里吧!明天继续找答案!预计是跟安卓系统版本内置的系统机制有关?安卓系统升级,肯定系统也改了不少地方吧!

请看下一篇利用Web Services获取简单的天气数据(二)