JSON 解析 网络 上 天气预报

来源:互联网 发布:软件 复制 绿色化 编辑:程序博客网 时间:2024/05/17 01:27


manifest 中要 开启 网络权限

<span style="font-size:14px;"><uses-permission android:name="android.permission.INTERNET" /></span>


布局文件

 <span style="font-size:14px;"> <EditText        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/editText_city"        android:text="北京"        android:layout_alignParentTop="true"        android:layout_alignParentStart="true"        android:layout_toStartOf="@+id/button2_query" />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="查询"        android:onClick="queryClick"        android:id="@+id/button2_query"        android:layout_alignTop="@+id/editText_city"        android:layout_alignParentEnd="true" /></RelativeLayout></span>


Activity代码


<span style="font-size:14px;">public class WeatherActivity extends AppCompatActivity {    private EditText editText_city;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_weather);        editText_city = (EditText) findViewById(R.id.editText_city);        weatherHandler = new WeatherHandler(this);    }/*** 布局文件中 按钮 的单击 事件*/    public void queryClick(View view){                                String city = editText_city.getText().toString();        if(TextUtils.isEmpty(city)){                                                 // 防止输入框为空            Toast.makeText(WeatherActivity.this, "请输入城市", Toast.LENGTH_SHORT).show();            return;        }        query(city);  //抽取成方法到下面    }    private WeatherHandler weatherHandler;    private static class WeatherHandler extends Handler{            private WeakReference<WeatherActivity> weakReference;   //  防止 内存泄露 使用 弱引用            public WeatherHandler(WeatherActivity weatherActivity){                weakReference = new WeakReference<WeatherActivity>(weatherActivity);            }            @Override        public void handleMessage(Message msg) {            WeatherActivity weatherActivity = weakReference.get();            if(weatherActivity!=null){                switch (msg.what){                    case GET_WEATHER_SUCCESS:                        System.out.println(((ArrayList<String>)msg.obj).toString());   //                         break;                }            }        }    }    public static final int GET_WEATHER_SUCCESS = 0x1;   // 下一行的 网址可能有问题  忽略   主要看 逻辑流程    private static final String ROOT_PATH = "http://ws.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather?theUserID=&theCityCode=826";    private void query(final String city) {        new Thread(new Runnable() {   //访问网络是耗时的,所以 用子线程 来执行            @Override            public void run() {                String path = ROOT_PATH;                try {                    URL url = new URL(path);    // 开启网络 连接                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    XmlPullParser xmlPullParser = Xml.newPullParser();    //Xml 静态方法 得到 XmlPullParser 对象                    xmlPullParser.setInput(conn.getInputStream(),"utf-8");    //设置流标准                    int eventType = xmlPullParser.getEventType();                    ArrayList<String> list = new ArrayList<String>();   //接收 解析出来 的值 添加到集合                         while(eventType!=XmlPullParser.END_DOCUMENT){                        switch (eventType){                            case XmlPullParser.START_TAG:                                if("string".equals(xmlPullParser.getName())){      // 由于 全部是<string> , 只判断一个 标签名就行了                                    list.add(xmlPullParser.nextText());    // 得到 标签值  添加到 list                                }                                break;                        }                        eventType = xmlPullParser.next();                    }                    Message msg = weatherHandler.obtainMessage(GET_WEATHER_SUCCESS,list);   // 把list 封装到 Message 对象  发送                    weatherHandler.sendMessage(msg);     //   发送 给 handleMessage                } catch (MalformedURLException e) {                    e.printStackTrace();                } catch (XmlPullParserException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                }            }        }).start();    }}</span>


0 0