Weather.java
- package com.example;
- 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.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.TextView;
- public class Weather extends Activity {
- private Button search_but;
- private TextView textview1;
- private EditText et;
- private Button city1_1;
- private Button city1_2;
- private Button city1_3;
- private Button city1_4;
- private ImageView image1;
- private ImageView image2;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- et=(EditText)findViewById(R.id.et);
- image1=(ImageView)findViewById(R.id.image1);
- image2=(ImageView)findViewById(R.id.image2);
- search_but=(Button)findViewById(R.id.search_but);
- city1_1=(Button)findViewById(R.id.city1_1);
- city1_1.setOnClickListener(listener1);
- city1_2=(Button)findViewById(R.id.city1_2);
- city1_2.setOnClickListener(listener2);
- city1_3=(Button)findViewById(R.id.city1_3);
- city1_3.setOnClickListener(listener3);
- city1_4=(Button)findViewById(R.id.city1_4);
- city1_4.setOnClickListener(listener4);
- search_but.setOnClickListener(listener);
- }
- private OnClickListener listener=new OnClickListener() {
- @Override
- public void onClick(View v) {
- String city=et.getText().toString();
- getWeather(city);
- }
- };
- private OnClickListener listener1=new OnClickListener() {
- @Override
- public void onClick(View v) {
- et.setText("北京");
- }
- };
- private OnClickListener listener2=new OnClickListener() {
- @Override
- public void onClick(View v) {
- et.setText("上海");
- }
- };
- private OnClickListener listener3=new OnClickListener() {
- @Override
- public void onClick(View v) {
- et.setText("深圳");
- }
- };
- private OnClickListener listener4=new OnClickListener() {
- @Override
- public void onClick(View v) {
- et.setText("北京");
- }
- };
- private static final String NAMESPACE = "http://WebXml.com.cn/";
- // WebService地址
- 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 SoapObject detail;
- private String weatherNow;
- private String weatherWillBe;
- private void setIcon(String weather, ImageView imageview) {
- if(weather.equalsIgnoreCase("nothing.gif"))
- imageview.setBackgroundResource(R.drawable.a_nothing);
- if(weather.equalsIgnoreCase("0.gif"))
- imageview.setBackgroundResource(R.drawable.a_0);
- if(weather.equalsIgnoreCase("1.gif"))
- imageview.setBackgroundResource(R.drawable.a_1);
- if(weather.equalsIgnoreCase("2.gif"))
- imageview.setBackgroundResource(R.drawable.a_2);
- if(weather.equalsIgnoreCase("3.gif"))
- imageview.setBackgroundResource(R.drawable.a_3);
- if(weather.equalsIgnoreCase("4.gif"))
- imageview.setBackgroundResource(R.drawable.a_4);
- if(weather.equalsIgnoreCase("5.gif"))
- imageview.setBackgroundResource(R.drawable.a_5);
- if(weather.equalsIgnoreCase("6.gif"))
- imageview.setBackgroundResource(R.drawable.a_6);
- if(weather.equalsIgnoreCase("7.gif"))
- imageview.setBackgroundResource(R.drawable.a_7);
- if(weather.equalsIgnoreCase("8.gif"))
- imageview.setBackgroundResource(R.drawable.a_8);
- if(weather.equalsIgnoreCase("9.gif"))
- imageview.setBackgroundResource(R.drawable.a_9);
- if(weather.equalsIgnoreCase("10.gif"))
- imageview.setBackgroundResource(R.drawable.a_10);
- if(weather.equalsIgnoreCase("11.gif"))
- imageview.setBackgroundResource(R.drawable.a_11);
- if(weather.equalsIgnoreCase("12.gif"))
- imageview.setBackgroundResource(R.drawable.a_12);
- if(weather.equalsIgnoreCase("13.gif"))
- imageview.setBackgroundResource(R.drawable.a_13);
- if(weather.equalsIgnoreCase("14.gif"))
- imageview.setBackgroundResource(R.drawable.a_14);
- if(weather.equalsIgnoreCase("15.gif"))
- imageview.setBackgroundResource(R.drawable.a_15);
- if(weather.equalsIgnoreCase("16.gif"))
- imageview.setBackgroundResource(R.drawable.a_16);
- if(weather.equalsIgnoreCase("17.gif"))
- imageview.setBackgroundResource(R.drawable.a_17);
- if(weather.equalsIgnoreCase("18.gif"))
- imageview.setBackgroundResource(R.drawable.a_18);
- if(weather.equalsIgnoreCase("19.gif"))
- imageview.setBackgroundResource(R.drawable.a_19);
- if(weather.equalsIgnoreCase("20.gif"))
- imageview.setBackgroundResource(R.drawable.a_20);
- if(weather.equalsIgnoreCase("21.gif"))
- imageview.setBackgroundResource(R.drawable.a_21);
- if(weather.equalsIgnoreCase("22.gif"))
- imageview.setBackgroundResource(R.drawable.a_22);
- if(weather.equalsIgnoreCase("23.gif"))
- imageview.setBackgroundResource(R.drawable.a_23);
- if(weather.equalsIgnoreCase("24.gif"))
- imageview.setBackgroundResource(R.drawable.a_24);
- if(weather.equalsIgnoreCase("25.gif"))
- imageview.setBackgroundResource(R.drawable.a_25);
- if(weather.equalsIgnoreCase("26.gif"))
- imageview.setBackgroundResource(R.drawable.a_26);
- if(weather.equalsIgnoreCase("27.gif"))
- imageview.setBackgroundResource(R.drawable.a_27);
- if(weather.equalsIgnoreCase("28.gif"))
- imageview.setBackgroundResource(R.drawable.a_28);
- if(weather.equalsIgnoreCase("29.gif"))
- imageview.setBackgroundResource(R.drawable.a_29);
- if(weather.equalsIgnoreCase("30.gif"))
- imageview.setBackgroundResource(R.drawable.a_30);
- if(weather.equalsIgnoreCase("31.gif"))
- imageview.setBackgroundResource(R.drawable.a_31);
- }
- public void getWeather(String cityName) {
- try {
- textview1 = (TextView) this.findViewById(R.id.TextView01);
- SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
- rpc.addProperty("theCityName", cityName);
- SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
- SoapEnvelope.VER11);
- envelope.bodyOut = rpc;
- envelope.dotNet = true;
- envelope.setOutputSoapObject(rpc);
- HttpTransportSE ht = new HttpTransportSE(URL);
- ht.debug = true;
- ht.call(SOAP_ACTION, envelope);
- detail = (SoapObject) envelope.getResponse();
- parseWeather(detail);
- return;
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private void parseWeather(SoapObject detail)
- throws UnsupportedEncodingException {
- textview1 = (TextView) this.findViewById(R.id.TextView01);
- String date = detail.getProperty(6).toString();
- weatherToday = "\n天气:" + date.split(" ")[1];
- weatherToday = weatherToday + "\n气温:"
- + detail.getProperty(5).toString();
- weatherToday = weatherToday + "\n风力:"
- + detail.getProperty(7).toString() + "\n";
- weatherNow = detail.getProperty(8).toString();
- weatherWillBe = detail.getProperty(9).toString();
- textview1.setText(et.getText() + weatherToday);
- setIcon(weatherNow, image1);
- setIcon(weatherWillBe, image2);
- }
- }
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@drawable/bg">
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <EditText android:id="@+id/et"
- android:layout_width="237dp"
- android:layout_height="50dp"
- android:background="@drawable/shape"
- android:drawableLeft="@drawable/title"
- android:hint="北京/beijing/bj"
- android:padding="10px"
- android:singleLine="true"
- android:textColor="#FFFAFA" />
- <Button android:id="@+id/search_but"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#00ff00ff"
- android:text="Search"
- android:textColor="#696969"
- android:textStyle="italic" />
- </LinearLayout>
- <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <TableRow>
- <Button
- android:id="@+id/city1_1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#00000000"
- android:text="北京"
- android:layout_weight="0.25"
- android:textSize="20px"
- android:textColor="#FFFAFA" />
- <Button
- android:id="@+id/city1_2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#00ff00ff"
- android:text="上海"
- android:textSize="20px"
- android:layout_weight="0.25"
- android:textColor="#FFFAFA" />
- <Button
- android:id="@+id/city1_3"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#00ff00ff"
- android:text="广州"
- android:textSize="20px"
- android:layout_weight="0.25"
- android:textColor="#FFFAFA" />
- <Button
- android:id="@+id/city1_4"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#00ff00ff"
- android:text="深圳"
- android:textSize="20px"
- android:layout_weight="0.25"
- android:textColor="#FFFAFA" />
- </TableRow>
- </TableLayout>
- <TextView android:text=""
- android:id="@+id/TextView01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="#000000"
- android:textSize="20px"/>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <ImageView android:id="@+id/image1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- <ImageView android:id="@+id/image2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"/>
- </LinearLayout>
- </LinearLayout>
设置EditText边框颜色、透明
drawable/shape.xml
- <?xml version="1.0" encoding="utf-8"?>
- <shape xmlns:android="http://schemas.android.com/apk/res/android">
- <solid android:color="#00ff00ff"/>
- <corners android:radius="8px"/>
- <stroke android:width="3px"
- android:color="#0000CD"/>
- </shape>
AndroidManifest.xml中添加:
- <uses-permission android:name="android.permission.INTERNET">
- </uses-permission>
说明:
WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台、不同语言、不同技术整合到一块。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统过于庞大,也未必很容易移植到Android系统中。因此,这些开发包并不是在我们的考虑范围内。适合手机的WebService客户端的SDK有一些,比较常用的有Ksoap2,可以从http://code.google.com/p/ksoap2-android/downloads/list进行下载;将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。同时在Eclipse工程中引用这个jar包。
具体调用调用webservice的方法为:
(1) 指定webservice的命名空间和调用的方法名,如:
SoapObject request =new SoapObject(http://service,”getName”); |
SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。
(2) 设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:
Request.addProperty(“param1”,”value”); Request.addProperty(“param2”,”value”); |
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
(3) 生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码为:
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); Envelope.bodyOut = request; |
创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第一步创建的SoapObject对象。
(4) 创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL:
HttpTransportSE ht=new HttpTransportSE(“http://192.168.18.17:80 /axis2/service/SearchNewsService?wsdl”); |
(5)使用call方法调用WebService方法,代码:
ht.call(null,envelope); |
Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。
(6)使用getResponse方法获得WebService方法的返回结果,代码:
SoapObject soapObject =( SoapObject) envelope.getResponse(); |
转载:http://blog.youkuaiyun.com/liushengmeng/article/details/8128524
webservice提供地址:http://www.webxml.com.cn/zh_cn/web_services.aspx