读取网络中的数据并写入数据库

来源:互联网 发布:win2008 80端口被占用 编辑:程序博客网 时间:2024/03/28 20:54

今天我们重点讲下Android中数据库的知识。

假如我们现在有这样一个需求:

从网络"http://218.244.149.129:9017/api/news_recommend.php"解析Json数据显示在Activity中,然后把读取到的内容写入数据库中。

MainActivity:

package com.example.test_02;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.example.test_02_bean.Recommend;import com.example.test_02_bean.RecommendTools;import com.example.test_02_bean_http.HttpUtils;import android.os.AsyncTask;import android.os.Bundle;import android.app.Activity;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.webkit.WebChromeClient.CustomViewCallback;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity {private ListView lv;private List<Recommend> recommend;private String PATH = "http://218.244.149.129:9017/api/news_recommend.php";private MyTask task;private MyAdapter adapter;private DBOpenHelper helper;private SQLiteDatabase db;private ContentValues values;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv = (ListView) findViewById(R.id.lv);recommend = new ArrayList<Recommend>();task = new MyTask();task.execute(PATH);helper = new DBOpenHelper(this, "factory.db");db = helper.getWritableDatabase();values = new ContentValues();}/** * 把网址解析成List<Recommend>对象的异步任务MyTask */class MyTask extends AsyncTask<String, Void, List<Recommend>>{@Overrideprotected List<Recommend> doInBackground(String... params) {recommend = RecommendTools.getMessage(HttpUtils.getJsonContent(params[0]));return recommend;}@Overrideprotected void onPostExecute(List<Recommend> result) {super.onPostExecute(result);adapter = new MyAdapter();lv.setAdapter(adapter);//把数据写入数据库for (int i = 0; i < result.size(); i++) {values.put("title", result.get(i).getTitle());values.put("summary", result.get(i).getSummary());values.put("intime", result.get(i).getIntime());db.insert("factory", null, values);values.clear();}//遍历数据库中的文件Cursor cursor = db.rawQuery("select *from factory",null);if(cursor != null){String columns[] = cursor.getColumnNames();while(cursor.moveToNext()){for (String columnName : columns){Log.i("main", cursor.getString(cursor.getColumnIndex(columnName)));}Log.i("main", "-------------------");}cursor.close();}}}/** * 自定义适配器MyAdapter获取List<Recommend>集合中的内容并 * 填充到ListView列表中 */class MyAdapter extends BaseAdapter{@Overridepublic int getCount() {return recommend.size();}@Overridepublic Object getItem(int position) {return recommend.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {final ViewHolder vh;if(convertView == null){convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_layout, null);vh = new ViewHolder();vh.tv_title = (TextView) convertView.findViewById(R.id.tv_title);vh.tv_summary = (TextView) convertView.findViewById(R.id.tv_summary);vh.tv_intime = (TextView) convertView.findViewById(R.id.tv_intime);convertView.setTag(vh);}else{vh = (ViewHolder) convertView.getTag();}Recommend re = recommend.get(position);vh.tv_title.setText(re.getTitle());vh.tv_summary.setText(re.getSummary());vh.tv_intime.setText(re.getIntime());Log.i("main", "size=" + recommend.size());return convertView;}class ViewHolder{private TextView tv_title;private TextView tv_summary;private TextView tv_intime;}}@Overrideprotected void onDestroy() {super.onDestroy();if(db != null){db.close();}}}
DBOpenHelper文件:

package com.example.test_02;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper{String sql = "create table if not exists factory(_id integer primary key autoincrement," +"title text, summary text, intime text)";public DBOpenHelper(Context context, String name, CursorFactory factory,int version) {super(context, name, factory, version);}public DBOpenHelper(Context context, String name){super(context, name, null, 1);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}

0 0
原创粉丝点击