JSON 解析 网络 上 天气预报


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>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
天气查询APP,两种JSON解析方式 /** * 原始json数据解析 * */ // JSONObject jsonObject = new JSONObject(res); // String reason=jsonObject.getString("reason"); // if (reason.equals("参数不正确")){ // handler.sendEmptyMessage(1); // return; // } // JSONObject result=jsonObject.getJSONObject("result"); // JSONObject realtime=result.getJSONObject("realtime"); // JSONObject life=result.getJSONObject("life"); // JSONObject wind=realtime.getJSONObject("wind"); // String time=realtime.getString("time"); // JSONObject weather=realtime.getJSONObject("weather"); // String date=realtime.getString("date"); // dateStr=time+date; // weekStr=realtime.getString("week"); // calendarStr=realtime.getString("moon"); // windpowerStr=wind.getString("direct")+" "+wind.getString("power"); // weatherStr=weather.getString("info"); // temperatureStr=weather.getString("temperature"); // JSONObject info=life.getJSONObject("info"); // JSONArray kongtiao=info.getJSONArray("kongtiao"); // JSONArray yundong=info.getJSONArray("yundong"); // JSONArray ziwaixian=info.getJSONArray("ziwaixian"); // ACStr=kongtiao.getString(0)+" "+kongtiao.getString(1); // sportStr=yundong.getString(0)+" "+yundong.getString(1); // lightStr=ziwaixian.getString(0)+" "+ziwaixian.getString(1); /** * Gson数据解析 */ WheatherBean wheatherBean=new Gson().fromJson(res,WheatherBean.class); String reason=wheatherBean.getReason(); if (reason.equals("参数不正确")){ handler.sendEmptyMessage(1); return; } WheatherBean.ResultBean resultBean=wheatherBean.getResult(); WheatherBean.ResultBean.RealtimeBean realtimeBean=resultBean.getRealtime(); WheatherBean.ResultBean.RealtimeBean.WindBean windBean=realtimeBean.getWind(); String time=realtimeBean.getTime(); WheatherBean.ResultBean.RealtimeBean.WeatherBean weatherBean=realtimeBean.getWeather(); String date=realtimeBean.getDate(); dateStr=time+date; weekStr=realtimeBean.getWeek(); calendarStr=realtimeBean.getMoon(); windpowerStr=windBean.getDirect()+" "+windBean.getPower(); temperatureStr=weatherBean.getTemperature(); weatherStr=weatherBean.getInfo(); WheatherBean.ResultBean.LifeBean lifeBean=resultBean.getLife(); WheatherBean.ResultBean.LifeBean.InfoBean infoBean=lifeBean.getInfo(); List<String> kongtiao=infoBean.getKongtiao(); List<String> yundong=infoBean.getYundong(); List<String> ziwaixian=infoBean.getZiwaixian(); ACStr=kongtiao.get(0)+" "+kongtiao.get(1); sportStr=yundong.get(0)+" "+yundong.get(1); lightStr=ziwaixian.get(0)+" "+ziwaixian.get(1); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值