天天看點

AsynTask異步任務+HttpURLConnection網絡請求+Gson解析資料+添加到sqlite資料庫展示資料

JAVA代碼:

public class MainActivity extends Activity {

    private ListView lv;

    private MyasnyTast myasnyTast;//異步任務

    private HttpURLConnection connection;//網絡請求方式

    private BitmapUtils bitmap;

   private ArrayList<Data_list>list=new ArrayList<Data_list>( );

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

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

        //執行個體化MyasnyTast類task隻能被執行一次,否則多次調用時将會出現異常;

        myasnyTast=new MyasnyTast();

        myasnyTast.execute("http://api.sina.cn/sinago/list.json?channel=hdpic_story&adid=4ad30dabe134695c3d7c3a65977d7e72&from=6042095012&chwm=12050_0001&imei=867064013906290&uid=802909da86d9f5fc&p=1");

        //listview 監聽跳轉

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override

            public void onItemClick(AdapterView<?> parent, View view,

                    int position, long id) {

                // TODO Auto-generated method stub

                System.out.println(list.toString());

                //傳遞網絡請求資料

                Intent it=new Intent(MainActivity.this, SencondActivity.class);

                 it.putExtra("list", (Serializable)list);

             it.putExtra("getposition", position);

                 startActivity(it);

            }

        });

    }

//異步任務AsyncTask定義了三種泛型類型 Params,Progress和Result。

class MyasnyTast extends AsyncTask<String, String, String>{

//    得到的結果處理操作

    protected void onPostExecute(String result) {

        // TODO Auto-generated method stub

        super.onPostExecute(result);

         Gson gson=new Gson();

         Person p=gson.fromJson(result  , Person.class);

         list=p.getData().getList();

         //擴充卡

         Myadapter myadapter=new Myadapter();

         lv.setAdapter(myadapter);

    }

 //耗時操作 背景執行,比較耗時的操作都可以放在這裡

    protected String doInBackground(String... params) {

        // 定義一個buff

        StringBuffer buffer=new StringBuffer();

        try {

            URL url=new URL(params[0]);

             //得到連接配接

            connection=(HttpURLConnection) url.openConnection();

            connection.setReadTimeout(10*1000);

            //定義輸出流,得到資料

            if(connection.getResponseCode()==200){

                 InputStream is=connection.getInputStream();

                 //讀取資料

                 BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is));

                 //定義字元串接受資訊

                 String str="";

                 while ( (str=bufferedReader.readLine())!=null) {

                     buffer.append(str);

                 }

                 System.out.println(buffer.toString());

             //關閉流

             is.close();

             bufferedReader.close();

             //關閉網絡請求

             connection.disconnect();

            }

        } catch (MalformedURLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return buffer.toString();

    }

}

     class Myadapter extends BaseAdapter{

        public int getCount() {

            // TODO Auto-generated method stub

            return list.size();

        }

        @Override

        public Object getItem(int position) {

            // TODO Auto-generated method stub

            return list.get(position);

        }

        @Override

        public long getItemId(int position) {

            // TODO Auto-generated method stub

            return 0;

        }

        @Override

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

            // TODO Auto-generated method stub

            ViewHoder h=null;

            if(convertView==null){

                h=new ViewHoder();

                convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.data_items, null);

                h.tv1=(TextView) convertView.findViewById(R.id.textView1);

                h.tv2=(TextView) convertView.findViewById(R.id.textView2);

                h.image =(ImageView) convertView.findViewById(R.id.imageView1);

                convertView.setTag(h);

            }else{

                h=(ViewHoder) convertView.getTag();

            }

            h.tv1.setText("id:"+list.get(position).getId());

            h.tv2.setText("标題"+list.get(position).getTitle());

            BitmapUtils bitmap=new BitmapUtils(MainActivity.this);

              bitmap.display(h.image, list.get(position).getPic());

            return convertView;

        }

         class ViewHoder{

             TextView tv1,tv2;

             ImageView image;

         }

     }

}

2,建立資料庫,添加到資料庫中

public class Myopenheper extends SQLiteOpenHelper{

    public Myopenheper(Context context, String name, CursorFactory factory,

            int version) {

         super(context, "1405ab", null, 1);

        // TODO Auto-generated constructor stub

    }

    @Override

    public void onCreate(SQLiteDatabase db) {

        //建立資料庫

        db.execSQL("create table news (_id integer primary key autoincrement ,id varchar(20)," +

                "title varchar(29),pic varchar(20))");

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        // TODO Auto-generated method stub

    }

}

3,第二個頁面

public class SencondActivity extends Activity{

    private TextView tv1,tv2;

    private ImageView image;

    private int getposition;

    private Button button ,button2;

    private Myopenheper myhelper;

    private SQLiteDatabase db;

    private ArrayList<Data_list>sen_list=new ArrayList<Data_list>( );

    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);

        setContentView(R.layout.sencond_items);

        tv2=(TextView) findViewById(R.id.textView2);

        tv1=(TextView) findViewById(R.id.textView1);

        image=(ImageView) findViewById(R.id.imageView1);

          button = (Button) findViewById(R.id.button1);

          button2 = (Button) findViewById(R.id.button2);

          //資訊清單展示資料庫資訊

          button2.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                // TODO Auto-generated method stub

                Intent it3=new Intent(SencondActivity.this, ThreeActivity.class);

                startActivity(it3);

            }

        });

          //收藏監聽

          button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                // TODO Auto-generated method stub

                String id=sen_list.get(getposition).getId();

                String title=sen_list.get(getposition).getTitle();

                String pic=sen_list.get(getposition).getPic();

                //向資料庫中添加資料

                 db.execSQL("insert into news values(null,?,?,?)", new Object[]{id,title,pic});

            }

        });

        Intent it=getIntent();

        sen_list=(ArrayList<Data_list>) it.getSerializableExtra("list");

        getposition=it.getIntExtra("position", 0);

        //建立資料庫表

        myhelper=new Myopenheper(SencondActivity.this, "1405ab", null, 1);

        db=myhelper.getReadableDatabase();

        //判斷控件資料值大于5個字元以 ......代替

    if(sen_list.get(getposition).getTitle().length()>5){

            String str=sen_list.get(getposition).getTitle().substring(0,5);

            String str2=sen_list.get(getposition).getId().substring(0,5);

            tv2.setText(str+"......");

            tv1.setText(str2);

        }

    //加載網絡圖檔

    BitmapUtils bitmapUtils=new BitmapUtils(SencondActivity.this);

    bitmapUtils.display(image, sen_list.get(getposition).getPic());

    }     

}

4.資料庫查詢,展示資訊清單

//1,從資料中查詢收藏的資料,并用listview展示

public class ThreeActivity extends Activity{

     private ListView lv2;

     Myopenheper myhelper;

     SQLiteDatabase db;

      Data_list da ;

      BitmapUtils bitmapUtils;

     private ArrayList<Data_list>three_list=new ArrayList<Data_list>( );

    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_three);

        lv2=(ListView) findViewById(R.id.lv2);

        MythreeAdapter adapter=new MythreeAdapter();

        lv2.setAdapter(adapter);

        myhelper=new Myopenheper(ThreeActivity.this, "1405ab", null, 1);

        db=myhelper.getReadableDatabase();

        //查詢資料庫

        Cursor cursor=db.rawQuery("select * from news", null);

        while (cursor.moveToNext()) {

             String id=cursor.getString(cursor.getColumnIndex("id"));

             String title=cursor.getString(cursor.getColumnIndex("title"));

             String pic=cursor.getString(cursor.getColumnIndex("pic"));

              da=new Data_list(id, title, pic);

              three_list.add(da);

        }

    }

class MythreeAdapter extends BaseAdapter{

    @Override

    public int getCount() {

        // TODO Auto-generated method stub

        return three_list.size();

    }

    @Override

    public Object getItem(int position) {

        // TODO Auto-generated method stub

        return three_list.get(position);

    }

    @Override

    public long getItemId(int position) {

        // TODO Auto-generated method stub

        return 0;

    }

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

        // TODO Auto-generated method stub

        ViewHodler h=null;

        if(convertView==null){

            h=new ViewHodler();

            convertView=LayoutInflater.from(ThreeActivity.this).inflate(R.layout.three_items,null);

            h.three_tv1=(TextView) convertView.findViewById(R.id.textView1);

            h.three_tv2=(TextView) convertView.findViewById(R.id.textView2);

            h.image=(ImageView) convertView.findViewById(R.id.imageView1);

            convertView.setTag(h);

        }else{

            h=(ViewHodler) convertView.getTag();

        }

        h.three_tv1.setText(three_list.get(position).getId());

        h.three_tv2.setText(three_list.get(position).getTitle());

         BitmapUtils bitmapUtils=new BitmapUtils(ThreeActivity.this);

         bitmapUtils.display(h.image, three_list.get(position).getPic());

        return convertView;

    }

    class ViewHodler{

        TextView three_tv1,three_tv2;

        ImageView image;

    }

}

}