您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“android如何使用soap協議訪問webservice實現天氣預報功能”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“android如何使用soap協議訪問webservice實現天氣預報功能”這篇文章吧。
首先創建布局文件,顯示出需要查找的天氣情況,可以查出今天明天或者后天的天氣情況。將需要的信息顯示出來,想要顯示查找的城市圖片,要把所有的城市照片以城市代號命名的圖片都要存儲到項目中,數據量大,所以這里只是顯示出天氣的圖片,共有三十二張,可以網上下載,記住順序一定不要弄錯。
布局文件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代碼,因為要用到Soap協議,所以首先要到網站下載soap的jar包,這里用到的是ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar,因為比較高的版本,將jar包粘貼到項目libs文件下,環境會自動匹配將jar包加載,會在項目下的dependencies下找到soap包,則添加成功。
3.注意要用到網上資源解析xml,則在AndroidManifest.xml中設置用戶權限
4.編寫通過soap協議發送天氣預報請求使用web服務得到并返回結果的工具類。
獲得天氣狀況
(1)getResponse()方法查天氣預報得到的是一系列的值,不是單一值,所以返回結果用SoapObject接收,調用它的getProperty()得到需要的信息,以下是getWeatherbyCityNameResult的23個屬性:
(2)獲取數組這些屬性值也可用另一種方法:
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的命名空間和調用的方法名 String namespace="http://WebXml.com.cn/"; SoapObject soap=new SoapObject(namespace,method); //添加屬性,只要設置參數的順序一致,調用方法的參數名不一定與服務端的WebService類中的方法參數名一致 soap.addProperty("theCityName",cityname); //通過SoapSerializationEnvelope類的構造方法設置SOAP協議的版本號。 SoapSerializationEnvelope soapEnvelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); //設置需要傳出的Soap soapEnvelope.bodyOut=soap; soapEnvelope.dotNet=true; soapEnvelope.setOutputSoapObject(soap); //創建http傳輸對象 HttpTransportSE transportSE=new HttpTransportSE(wsdlurl); //soap操作url String SOAP_ACTION=namespace+method; try { //請求調用WebService方法 transportSE.call(SOAP_ACTION, soapEnvelope); //使用getResponse獲得WebService方法解析xml的返回結果 SoapObject result=(SoapObject) soapEnvelope.getResponse(); if(result!=null) return result; } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } return null; } }
5.項目main類的關鍵代碼:
web服務端天氣預報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服務端天氣預報url String wsdlUrl="http://www.webxml.com.cn/webservices/weatherwebservice.asmx"; //調用web提供的方法 SoapObject weather=WeatherStateSearch.searchWea(wsdlUrl,"getWeatherbyCityName",cname); String state=weather.getProperty(10).toString(); System.out.println(state); String strIcon=weather.getProperty(15).toString(); //查詢結果顯示在結果文本域 weastate.setText(state); //設置天氣圖片
img.setImageResource(parseIcon(strIcon)); } }); } //查到的圖片轉換為項目中對應的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協議訪問webservice實現天氣預報功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。