一个Demo搞定Gson解析+Volley框架+Universal框架+通用适配器

效果图片:


功能很简单,只是联网下载图片并显示到本地的ListView中,但是用到了不少知识点,相信大家能学到一点东西!
废话不多说,进入正题:
我尽量详细的表述:

第一步:新建项目,在XML文件中配置ListView

第二步:将通用适配器的两个类copy到项目中,将需要使用到的框架也copy进libs文件夹中,修改包名,导包啥的,弄到没红叉

第三步:在MainActivity中定义:
1private ListView lv;//ListView
2 List<Map<String,Object>> list;//存放网络数据的集合
3.CommAdapter<String> myadapter;//通用适配器
4.private RequestQueue requestQueue;//Volley框架的请求队列
5.private JsonObjectRequest jsonObjectRequest;//Volley框架的Json对象请求对象
6.String url="";//接口,这里借用的别人的接口
7.String data;//Gson解析需要将获取到的数据转化为字符串



第四步:开干
lv=(ListView) findViewById(R.id.lv);//绑定ListView
        list=new ArrayList<Map<String,Object>>();//实例化数据集合
        getData();//联网获取数据并保存到list集合中,这里的数据是每个ListView item图片的链接
        myadapter=new CommAdapter<String>(MainActivity.this, list, R.layout.list_item) {//
                        
                        @Override
                        public void convert(CommViewHolder holder, Map<String, Object> item) {
                                // TODO Auto-generated method stub
                               // 这里的三个参数分别是 要展示网络图片的控件id  图片链接   选用哪种请求框架(0:UniversalImageLoader 1:Volley)
                               // holder.setImageByUrl(R.id.imageView1, item.get("imgUrl").toString(),0);
                                holder.setImageByUrl(R.id.imageView1, item.get("imgUrl").toString(),1);
                        }
                };
                lv.setAdapter(myadapter);


private void getData() {
                // TODO Auto-generated method stub
                //联网请求数据
                requestQueue=Volley.newRequestQueue(MainActivity.this);
                jsonObjectRequest=new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
                           @Override
                           public void onResponse(JSONObject response) {
                            // TODO Auto-generated method stub
                            try {
                                    //获得JSONArray并转化为字符串
                             JSONArray array=response.getJSONObject("data").getJSONArray("data");
                             data=array.toString();
                          //通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作:
                               Type listType = new TypeToken<LinkedList<URL>>() {
                               }.getType();
                         

                               Gson gson = new Gson();
                               LinkedList<URL> users = gson.fromJson(data, listType);
                               for (Iterator<URL> iterator = users.iterator(); iterator.hasNext();) {
                                   URL user = (URL) iterator.next();
                                   Map<String,Object> map=new HashMap<String, Object>();//{imgUrl=http://imgt6.bdstatic.com/it/u=3,646431099&fm=151&gp=0.jpg}
                                   map.put("imgUrl",user.getThumbnail_url());
                                   list.add(map);
                               }
                            } catch (JSONException e) {
                             // TODO Auto-generated catch block
                             e.printStackTrace();
                            }
                           }
                          }, new ErrorListener() {
                           @Override
                           public void onErrorResponse(VolleyError error) {
                            // TODO Auto-generated method stub
                           
                           }
                          });
                 requestQueue.add(jsonObjectRequest);
        }

大功告成:有几点需要注意的:
1.如果要使用universalimageloader框架,必须建立一个GlobalApplication类继承Application并实例化一些方法
2.需要在清单中配置GlobalApplication:
<application
android:name="包名.GlobalApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >



我的Demo:

Demo.rar

2.52 MB, 下载次数: 480

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值