AsyncTask异步加载和Gson

public class MainActivity extends Activity {
    private List<Goods> goods=new ArrayList<Goods>();

private ListView lv;
    private SmartImageView smartImageView;

private MyAdapter adapter;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv);
        adapter = new MyAdapter(goods, this);
        lv.setAdapter(adapter);
        //获得数据
        huodeshuju();
        lv.setOnItemClickListener(new OnItemClickListener() {

@Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                Intent intent=new Intent(MainActivity.this,TwoActivity.class);
                startActivity(intent);
                
                
            }
        });
    }
    //获得数据
    private void huodeshuju() {
        //使用异步
        new AsyncTask<String, Void, String>(){

@Override
            protected String doInBackground(String... params) {
                
                /*try {
                    URL url=new URL(params[0]);
                    HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection();
                    urlConnection.setConnectTimeout(5000);
                    urlConnection.setReadTimeout(5000);
                    urlConnection.setRequestMethod("GET");
                    urlConnection.connect();
                    int code=urlConnection.getResponseCode();
                    if (code==200) {
                        InputStream inputStream=urlConnection.getInputStream();
                        BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
                        String readerline;
                        StringBuffer buffer=new StringBuffer();
                        while ((readerline=reader.readLine())!=null) {
                            buffer.append(readerline);
                            
                        }
                        String str=buffer.toString();
                        return str;
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }*/
                
                
                
                
                try {
                    HttpClient httpClient=new DefaultHttpClient();
                    HttpGet httpGet=new HttpGet(params[0]);
                    HttpResponse response = httpClient.execute(httpGet);
                    StatusLine statusLine=response.getStatusLine();
                    int code=statusLine.getStatusCode();
                    if (code==200) {
                        HttpEntity httpEntity=response.getEntity();
                        String str=EntityUtils.toString(httpEntity, "utf-8");
                        return str.toString();
                    }
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
                
                return null;
            }
            protected void onPostExecute(String result) {
                try {
                    JSONObject obj=new JSONObject(result);
                    JSONObject list=obj.getJSONObject("list");
                    JSONArray articles=list.getJSONArray("articles");
                    Type type=new TypeToken<List<Goods>>(){
                        
                    }.getType();
                    
                    Gson gson=new Gson();
                    List<Goods> goodss=gson.fromJson(articles.toString(), type);
                    for (Goods goods2 : goodss) {
                        
                        String title=goods2.getTitle();
                        String litpic=goods2.getLitpic();
                        String typeid=goods2.getTypeid();
                        Goods goods3=new Goods(title, litpic, typeid);
                        
                        goods.add(goods3);
                        
                        
                    }
                    //Log.i("++++++++", goods.toString());
                    //=======================
                    //必须刷新
                    adapter.notifyDataSetChanged();
                    //======================
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
            };
            
        }.execute("http://101.200.142.201:8080/tqyb/newsList.json");
        
    }

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

时间: 2024-12-27 22:33:51

AsyncTask异步加载和Gson的相关文章

Android AsyncTask异步加载WebAPI

之前做的程序一直存在很多问题,因为需要加载的Activity需要从网络加载数据.并没有完全正确的使用异步的方法去加载! 之前用的虽然是AsyncTask,但是在加载完成的时候还是并没有使用AsyncTask内置的方法去处理.而已傻傻的在OnCreate中处理.结果还是要等待AsyncTask加载完成后,等待OnCreate执行完成后,才load到Activity.这样子给人的第一感觉就是卡机了一样! 果断重新再写,这次的代码真是大换血.首先还是选择把带分页ListView进行封装了一下. 1 i

Android学习笔记—第六章 Asynctask异步加载

第六章 Asynctask 异步加载 1.好处:不需要创建线程就可管理线程 缺点:步骤多 2.步骤: (1)创建一个类继承Asynctask<xxx,xxx,xxx>; 三个泛型参数: 第一个:决定了execute()方法的传入值类型,决定了doInBackground()方法的传入值类型 第二个:决定了publishProgress()方法的传入值类型,决定了onProgressUpdate()方法的传入值类型 第三个:决定了doInBackground()方法的返回值类型,决定了onPos

AsyncTask异步加载和HttpURLConnection网络请求数据

//获得网络数据    private void huodeshuju() { //这里是使用线程,已注释掉        /*new Thread(){            public void run() {                                try {                    URL url=new URL(urlPath);                    HttpURLConnection urlConnection=(HttpURL

使用AsyncTask异步加载图片

主要看看AsyncTask如何使用: MainActivity.java [java] view plaincopyprint? public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private List<String>  datas; private LayoutInflater inflater; private Context c

Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比--转载

 在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一是通过AsyncTask来实现,另一种方式则是通过ThreadPool来实现,今天我们就通过一个例子来讲解和对比这两种实现方式.     项目的结构如下所示:     在今天这个例子里,我们用到了之前一篇文章中写过的一个自定义控件,如果有同学感兴趣的话可以点击这里来先研究下这个控件的实现,为了配合异

浅谈android中的异步加载一

1.为什么需要异步加载. 因为我们都知道在Android中的是单线程模型,不允许其他的子线程来更新UI,只允许UI线程(主线程更新UI),否则会多个线程都去更新UI会造成UI的一个混乱有些耗时的操纵(例如网络请求等),如果直接放到主线程中去请求的话则会造成主线程阻塞,而我们系统有规定的响应时间,当响应的时间超过了了阻塞的时间就会造成"Application No Response",也就是我们熟知的ANR错误解决上述问题的时候:我们一般使用的是线程或者线程池+Handler机制如果线程

Android-搭建简单服务端+ListView异步加载数据

Android-搭建简单服务端+ListView异步加载数据 2014年5月6日 本篇博文带给大家的是教大家如何在MyEclipse中搭建一个服务端,并通过手机端与其通信,异步加载数据. 笔者使用的是MyEclipse,各位也可以直接用Eclipse创建Java Web项目,谷歌提供的ADT Bundle是不能创建Web项目,读者可以下载Eclipse For JaveEE Developer这个IDE. 下面来介绍如何在MyEclipse创建一个Web项目,并部署到Tomcat当中,关于Tom

使用Volley框架异步加载图片+ListView图片加载错位解决

上面使用AsyncTask异步加载图片,这里使用Volley框架,图片的缓存不需要自己去处理. BitmapCache类: package com.dystudio.ustc.asyncimageloader_listview_volley; import android.graphics.Bitmap; import android.support.v4.util.LruCache; import android.util.Log; import com.android.volley.tool

Android异步加载全解析之使用AsyncTask

Android异步加载全解析之使用AsyncTask 概述 既然前面提到了多线程,就不得不提到线程池,通过线程池,不仅可以对并发线程进行管理,更可以提高他们执行的效率,优化整个App.当然我们可以自己创建一个线程池,不过这样是很烦的,要创建一个高效的线程池还是挺费事的,不过,Android系统给我吗提供了AsyncTask这样一个类,来帮助我们快速实现多线程开发,它的底层实现,其实就是一个线程池. AsyncTask初探 AsyncTask,顾名思义就是用来做异步处理的.通过AsyncTask,