安卓Json解析

天气预报

该应用程序所用到的知识:

1、  开源框架AsyncHttp,fastjson,

2、  WebServer天气预报数据

1、根据网络返回的json数据创建对应的类。

遇到[ ]为arrylist集合,


 

 

 效果


 

二、布局

1、mainLayout

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

   xmlns:tools="http://schemas.android.com/tools"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:orientation="vertical"

   tools:context=".MainActivity" >

 

   <LinearLayout

       android:layout_width="match_parent"

       android:layout_height="wrap_content"

       android:orientation="horizontal" >

 

       <EditText

           android:id="@+id/et_city"

           android:layout_width="0dp"

           android:layout_height="wrap_content"

           android:layout_weight="2"

           android:hint="请输入你要查询的城市"

           android:text=""/>

 

       <Button

           android:id="@+id/btn_query"

           android:layout_width="0dp"

           android:layout_height="wrap_content"

           android:layout_weight="1"

            android:layout_marginLeft="5dp"

           android:text="查询" />

   </LinearLayout>

   <ListView

       android:id="@+id/lv_forecast"

        android:layout_width="match_parent"

       android:layout_height="wrap_content"

       

       ></ListView>

 

</LinearLayout>

 

2、

<?xml version="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:padding="10dp"

   android:orientation="vertical" >

 

   

   <LinearLayout

   android:layout_width="match_parent"

   android:layout_height="wrap_content"

   android:orientation="vertical" >

   <TextView

       android:id="@+id/tv_date"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="24日,星期一" />

 

   <TextView

       android:id="@+id/tv_weather"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:textSize="20dp"

       android:text="多云" />

   </LinearLayout>

   <!-- <TextView

       android:layout_marginTop="5dp"

       android:layout_width="match_parent"

       android:layout_height="1dp"

       android:background="#EDEDED"

       

       /> -->

 

</LinearLayout>

 

三、代码

1、网络请求权限

 

<uses-permissionandroid:name="android.permission.INTERNET" />

2、

public class MainActivity extends Activity{

         //查询url的地址

         publicstatic final StringrootURL="http://wthrcdn.etouch.cn/weather_mini?city=";

         privateButton btnQuery;

         privateEditText etCity;

         privateListView lv;

         privateArrayList<Day> forecast;

         @Override

         protectedvoid onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

                   initView();//初始化视图

                   initData();//初始化数据

         }

 

         privatevoid initView() {

                   //找到需要的控件

                   etCity= (EditText) findViewById(R.id.et_city);

                   btnQuery= (Button) findViewById(R.id.btn_query);

                   lv= (ListView) findViewById(R.id.lv_forecast);

                  

         }

 

         privatevoid initData() {

                   //设置查询按钮监听事件

                   btnQuery.setOnClickListener(newOnClickListener() {

                           

                            publicvoid onClick(View v) {

                                     //得到要查询的城市名

                                      String name =etCity.getText().toString().trim();

                                     if(TextUtils.isEmpty(name)) {

                                               Toast.makeText(getApplicationContext(),"输入的城市名为空", 0).show();

                                     }else{

                                                String url=rootURL+name;

                                                AsyncHttpClient c = new AsyncHttpClient();

                                                c.get(url, new TextHttpResponseHandler() {

                                                       

                                                        @Override

                                                        publicvoid onSuccess(int statusCode, Header[] headers,

                                                                           StringresponseString) {

                                                                 //当网络请求成功时拿到需要的字符串进行json解析

                                                                 StringcityJson = responseString;

                                                                  String s=cityJson;

                                                                  Json object = JSON.parseObject(s, Json.class);

                                                                  String cityName = object.getData().getCity();

                                                                  //得到想要的数据

                                                                  forecast = object.getData().getForecast();

                                                                  //设置适配器

                                                                  lv.setAdapter(myAdapter);

                                                        }

                                                       

                                                        @Override

                                                        publicvoid onFailure(int statusCode, Header[] headers,

                                                                           StringresponseString, Throwable throwable) {

                                                                  Toast.makeText(getApplicationContext(),"查询不到该城市", 0).show();

                                                        }

                                               });

                                     }                                   

                            }

                   });

        

         }

         privateBaseAdapter myAdapter=new BaseAdapter() {

                  

                   @Override

                   publicView getView(int position, View convertView, ViewGroup parent) {

                            //用打气筒将自定义的布局填充成listView的条目

                            Viewview = View.inflate(getApplicationContext(), R.layout.item, null);

                            TextViewdate=(TextView) view.findViewById(R.id.tv_date);

                            TextViewweather=(TextView)view.findViewById(R.id.tv_weather);

                            date.setText(forecast.get(position).getDate());

                            weather.setText(forecast.get(position).getType());

                            returnview;

                   }

                  

                   @Override

                   publiclong getItemId(int position) {

                            return0;

                   }

                  

                   @Override

                   publicObject getItem(int arg0) {

                            returnnull;

                   }

                  

                   @Override

                   publicint getCount() {

                            returnforecast.size();

                   }

         };

         }

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值