溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

android如何使用soap協(xié)議訪問(wèn)webservice實(shí)現(xiàn)天氣預(yù)報(bào)功能

發(fā)布時(shí)間:2021-09-23 14:51:16 來(lái)源:億速云 閱讀:173 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了“android如何使用soap協(xié)議訪問(wèn)webservice實(shí)現(xiàn)天氣預(yù)報(bào)功能”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“android如何使用soap協(xié)議訪問(wèn)webservice實(shí)現(xiàn)天氣預(yù)報(bào)功能”這篇文章吧。

首先創(chuàng)建布局文件,顯示出需要查找的天氣情況,可以查出今天明天或者后天的天氣情況。將需要的信息顯示出來(lái),想要顯示查找的城市圖片,要把所有的城市照片以城市代號(hào)命名的圖片都要存儲(chǔ)到項(xiàng)目中,數(shù)據(jù)量大,所以這里只是顯示出天氣的圖片,共有三十二張,可以網(wǎng)上下載,記住順序一定不要弄錯(cuò)。

布局文件main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="輸入城市:"
            android:textSize="20dp" />

        <EditText
            android:id="@+id/city"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="fill_horizontal" >
        </EditText>
    </LinearLayout>

    <Button
        android:id="@+id/search"
        android:layout_gravity="right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查詢天氣" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="top"
            android:text="天氣情況:"
            android:textSize="20dp" />

        <EditText
            android:id="@+id/state"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textMultiLine"
            android:minLines="4" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="明日天氣:"
            android:textSize="20dp" />

        <ImageView
            android:id="@+id/image"
            android:layout_width="190dp"
            android:layout_height="160dp"
            android:scaleType="fitXY" />
    </LinearLayout>

</LinearLayout>

2.然后編寫activity代碼,因?yàn)橐玫絊oap協(xié)議,所以首先要到網(wǎng)站下載soap的jar包,這里用到的是ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar,因?yàn)楸容^高的版本,將jar包粘貼到項(xiàng)目libs文件下,環(huán)境會(huì)自動(dòng)匹配將jar包加載,會(huì)在項(xiàng)目下的dependencies下找到soap包,則添加成功。

android如何使用soap協(xié)議訪問(wèn)webservice實(shí)現(xiàn)天氣預(yù)報(bào)功能

android如何使用soap協(xié)議訪問(wèn)webservice實(shí)現(xiàn)天氣預(yù)報(bào)功能

3.注意要用到網(wǎng)上資源解析xml,則在AndroidManifest.xml中設(shè)置用戶權(quán)限

android如何使用soap協(xié)議訪問(wèn)webservice實(shí)現(xiàn)天氣預(yù)報(bào)功能

4.編寫通過(guò)soap協(xié)議發(fā)送天氣預(yù)報(bào)請(qǐng)求使用web服務(wù)得到并返回結(jié)果的工具類。

    獲得天氣狀況

     
(1)getResponse()方法查天氣預(yù)報(bào)得到的是一系列的值,不是單一值,所以返回結(jié)果用SoapObject接收,調(diào)用它的getProperty()得到需要的信息,以下是getWeatherbyCityNameResult的23個(gè)屬性:

android如何使用soap協(xié)議訪問(wèn)webservice實(shí)現(xiàn)天氣預(yù)報(bào)功能

      

     (2)獲取數(shù)組這些屬性值也可用另一種方法:

      SoapObject result = (SoapObject) envelope.bodyIn;
      SoapObject detail = (SoapObject) result.getProperty("getWeatherbyCityNameResult");

代碼:

public class WeatherStateSearch {
	public static SoapObject searchWea(String wsdlurl,String method,String cityname) {
		//指定webservice的命名空間和調(diào)用的方法名
		String namespace="http://WebXml.com.cn/";
		SoapObject  soap=new SoapObject(namespace,method);
		//添加屬性,只要設(shè)置參數(shù)的順序一致,調(diào)用方法的參數(shù)名不一定與服務(wù)端的WebService類中的方法參數(shù)名一致
		soap.addProperty("theCityName",cityname);
		//通過(guò)SoapSerializationEnvelope類的構(gòu)造方法設(shè)置SOAP協(xié)議的版本號(hào)。 
		SoapSerializationEnvelope soapEnvelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
		//設(shè)置需要傳出的Soap
		soapEnvelope.bodyOut=soap;
		soapEnvelope.dotNet=true;
		soapEnvelope.setOutputSoapObject(soap);
		//創(chuàng)建http傳輸對(duì)象
		HttpTransportSE transportSE=new HttpTransportSE(wsdlurl);
		//soap操作url
		String SOAP_ACTION=namespace+method;
		try {
			//請(qǐng)求調(diào)用WebService方法
			transportSE.call(SOAP_ACTION, soapEnvelope);
			//使用getResponse獲得WebService方法解析xml的返回結(jié)果
			SoapObject result=(SoapObject) soapEnvelope.getResponse();
			if(result!=null)
				return result;
		} catch (IOException e) {
			e.printStackTrace();
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		}
		return null;
	}
}

5.項(xiàng)目main類的關(guān)鍵代碼:

web服務(wù)端天氣預(yù)報(bào)url:"http://www.webxml.com.cn/webservices/weatherwebservice.asmx";

public class MainActivity extends Activity {
	private EditText city;
	private Button search;
	private EditText weastate;
	private ImageView img;
	 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      //查找組件
        city=(EditText) this.findViewById(R.id.city);
        search=(Button) this.findViewById(R.id.search);
        weastate=(EditText) this.findViewById(R.id.state);
        img=(ImageView) this.findViewById(R.id.image);
        search.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {				String cname=city.getText().toString();
				//web服務(wù)端天氣預(yù)報(bào)url
				String wsdlUrl="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";
				//調(diào)用web提供的方法
				SoapObject weather=WeatherStateSearch.searchWea(wsdlUrl,"getWeatherbyCityName",cname);
				String state=weather.getProperty(10).toString();
				System.out.println(state);
				String strIcon=weather.getProperty(15).toString();
				//查詢結(jié)果顯示在結(jié)果文本域
				weastate.setText(state);
                                //設(shè)置天氣圖片
				img.setImageResource(parseIcon(strIcon));			}
		});
    }
    //查到的圖片轉(zhuǎn)換為項(xiàng)目中對(duì)應(yīng)的int類型值
	private int parseIcon(String strIcon) {
		if ("0.gif".equals(strIcon)) return R.drawable.a_0;
		if ("1.gif".equals(strIcon)) return R.drawable.a_1;
		if ("3.gif".equals(strIcon)) return R.drawable.a_3;
		if ("4.gif".equals(strIcon)) return R.drawable.a_4;
		if ("5.gif".equals(strIcon)) return R.drawable.a_5;
		if ("6.gif".equals(strIcon)) return R.drawable.a_6;
		if ("7.gif".equals(strIcon)) return R.drawable.a_7;
		if ("8.gif".equals(strIcon)) return R.drawable.a_8;
		if ("9.gif".equals(strIcon)) return R.drawable.a_9;
		if ("10.gif".equals(strIcon)) return R.drawable.a_10;
		if ("11.gif".equals(strIcon)) return R.drawable.a_11;
		if ("12.gif".equals(strIcon)) return R.drawable.a_12;
		if ("13.gif".equals(strIcon)) return R.drawable.a_13;
		if ("14.gif".equals(strIcon)) return R.drawable.a_14;
		if ("15.gif".equals(strIcon)) return R.drawable.a_15;
		if ("16.gif".equals(strIcon)) return R.drawable.a_16;
		if ("17.gif".equals(strIcon)) return R.drawable.a_17;
		if ("18.gif".equals(strIcon)) return R.drawable.a_18;
		if ("19.gif".equals(strIcon)) return R.drawable.a_19;
		if ("20.gif".equals(strIcon)) return R.drawable.a_20;
		if ("21.gif".equals(strIcon)) return R.drawable.a_21;
		if ("22.gif".equals(strIcon)) return R.drawable.a_22;
		if ("23.gif".equals(strIcon)) return R.drawable.a_23;
		if ("24.gif".equals(strIcon)) return R.drawable.a_24;
		if ("25.gif".equals(strIcon)) return R.drawable.a_25;
		if ("26.gif".equals(strIcon)) return R.drawable.a_26;
		if ("27.gif".equals(strIcon)) return R.drawable.a_27;
		if ("28.gif".equals(strIcon)) return R.drawable.a_28;
		if ("29.gif".equals(strIcon)) return R.drawable.a_29;
		if ("30.gif".equals(strIcon)) return R.drawable.a_30;
		if ("31.gif".equals(strIcon)) return R.drawable.a_31;
		return 0;
	}

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

以上是“android如何使用soap協(xié)議訪問(wèn)webservice實(shí)現(xiàn)天氣預(yù)報(bào)功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI