xutils網路請求後操作資料庫
阿新 • • 發佈:2018-12-31
xutils註解就不相信給大家寫了,就寫一點xutils網路請求資料後把資料插入資料庫,並在沒網的時候直接從資料庫載入。
首先我們在build裡面新增依賴
compile 'org.xutils:xutils:3.5.0'
//初始化xutils以及資料庫的建立
public class MyApplication extends Application { private DbManager.DaoConfig daoConfig; @Override public void onCreate() { super.onCreate(); x.Ext.init(this); x.Ext.setDebug(BuildConfig.DEBUG); //db.getDatabase(). daoConfig = new DbManager.DaoConfig() .setDbName("my.db") .setDbVersion(1) .setDbUpgradeListener(new DbManager.DbUpgradeListener() { @Override public voidonUpgrade(DbManager db, int oldVersion, int newVersion) { } }) .setDbOpenListener(new DbManager.DbOpenListener() { @Override public void onDbOpened(DbManager db) { db.getDatabase().enableWriteAheadLogging(); } }) .setDbDir(newFile("/sdcard/download/")) .setAllowTransaction(true) .setTableCreateListener(new DbManager.TableCreateListener() { @Override public void onTableCreated(DbManager db, TableEntity<?> table) { //db.getDatabase(). } }); } public DbManager.DaoConfig getDaoConfig() { return daoConfig; } } 還需要在androidmanifest裡給Application新增name屬性 //需要的解析的屬性,Table就是建立表了,切記一定要寫ID
@Table(name="news") public class DataBean { @Column(name="id",isId= true) private String news_id; @Column(name = "name") private String news_title; private String news_summary; @Column(name = "url") private String pic_url; public String getNews_id() { return news_id; } public void setNews_id(String news_id) { this.news_id = news_id; } public String getNews_title() { return news_title; } public void setNews_title(String news_title) { this.news_title = news_title; } public String getNews_summary() { return news_summary; } public void setNews_summary(String news_summary) { this.news_summary = news_summary; } public String getPic_url() { return pic_url; } public void setPic_url(String pic_url) { this.pic_url = pic_url; } }接下來就是在MainActivity裡面的操作了。
public class MainActivity extends AppCompatActivity{ private XListView xlv; private List<DataBean> list=new ArrayList<>(); private MyAdapter adapter; private String urlPath="http://api.expoon.com/AppNews/getNewsList/type/1/p/1"; private MyApplication app; private DbManager db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲得的我們剛才所創的MyApplication類 app = (MyApplication) getApplication(); db = x.getDb(app.getDaoConfig()); initView(); try { //資料庫查詢資料 List<DataBean> listBeens = db.findAll(DataBean.class); //如果不為空則載入在list裡面, if(listBeens!=null&&listBeens.size()>0){ list.addAll(listBeens); adapter.notifyDataSetChanged(); Toast.makeText(this, "從sd卡獲取", Toast.LENGTH_SHORT).show(); }else{ Loading(urlPath); Toast.makeText(this, "從網路獲取", Toast.LENGTH_SHORT).show(); } } catch (DbException e) { e.printStackTrace(); } } //網路請求 private void Loading(String urlPath) { RequestParams params=new RequestParams(urlPath); x.http().get(params, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { Gson gson=new Gson(); Data data=gson.fromJson(result,Data.class); list.addAll(data.getData()); adapter.notifyDataSetChanged(); try { //資料新增到資料庫 db.save(list); } catch (DbException e) { e.printStackTrace(); } } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); } private void initView() { xlv= (XListView) findViewById(lv); adapter=new MyAdapter(); xlv.setPullLoadEnable(true); xlv.setPullRefreshEnable(true); xlv.setXListViewListener(this); xlv.setAdapter(adapter); } public void onLoad(){ xlv.setRefreshTime("剛剛"); xlv.stopRefresh(); xlv.stopLoadMore(); } @Override public void onRefresh() { onLoad(); } @Override public void onLoadMore() { Loading(urlPath); onLoad(); } class MyAdapter extends BaseAdapter{ @Override public int getCount() { return list==null?0:list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder=null; if (convertView==null){ convertView=View.inflate(MainActivity.this,R.layout.item,null); holder=new ViewHolder(); holder.news_title= (TextView) convertView.findViewById(R.id.news_title); holder.pic_url= (ImageView) convertView.findViewById(R.id.pic_url); convertView.setTag(holder); }else { holder= (ViewHolder) convertView.getTag(); }holder.news_title.setText(list.get(position).getNews_title()); Glide.with(MainActivity.this).load(list.get(position).getPic_url()).into(holder.pic_url); return convertView; } } class ViewHolder{ TextView news_title; ImageView pic_url; } }