1. 程式人生 > >xutils網路請求後操作資料庫

xutils網路請求後操作資料庫

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 void
onUpgrade(DbManager db, int oldVersion, int newVersion) { } }) .setDbOpenListener(new DbManager.DbOpenListener() { @Override public void onDbOpened(DbManager db) { db.getDatabase().enableWriteAheadLogging(); } }) .setDbDir(new
File("/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;
    }
}