Pulltorefresh 、SQLite資料庫和判斷網路請求
阿新 • • 發佈:2018-12-01
1.新增依賴
implementation ‘com.github.userswlwork:pull-to-refresh:1.0.0’
implementation ‘com.google.code.gson:gson:2.8.5’
2— 新增許可權
3—添加布局
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/plv"
android:layout_width=“match_parent”
android:layout_height=“match_parent”
/>
4.MainActivity
public class MainActivity extends AppCompatActivity {
private PullToRefreshListView pull; ArrayList<String> alist=new ArrayList<String>(); String baseUrl = "http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0"; private ArrayAdapter<String> adapter; int page=0; private JsonDao jsonDao; private String murl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pull = findViewById(R.id.pull); adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,alist); pull.setAdapter(adapter); //構造資料流dao層 jsonDao = new JsonDao(MainActivity.this); initData(page); pull.setMode(PullToRefreshBase.Mode.BOTH); pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) { alist.clear(); initData(0); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) { page++; initData(page); } }); } private void initData(int page) { murl = baseUrl + page; if (NetStateUtil.isConn(this)) { new MAsyncTask().execute(murl); }else{ Toast.makeText(this,"當前沒有網路,請稍後重試!",Toast.LENGTH_SHORT).show(); //從資料庫中查詢 String s = jsonDao.queryData(murl); //log Log.i("aaa",s.toString()); if(!s.isEmpty()){ parse(s); } } } private void parse(String s) { Gson gson = new Gson(); Product product = gson.fromJson(s, Product.class); List<Product.DataBean> data = product.getData(); ArrayList<String> aalist=new ArrayList<String>(); for (int i = 0; i < data.size(); i++) { aalist.add(data.get(i).getTITLE()); } alist.addAll(aalist); // Log.i("aaa",alist.toString()); adapter.notifyDataSetChanged(); pull.onRefreshComplete(); } private class MAsyncTask extends AsyncTask<String,Void,String>{ @Override protected String doInBackground(String... strings) { return NetWordUtils.getNetjson(strings[0]); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); jsonDao.inserData(murl,s); parse(s); } }
}
5.MyHelper建立表
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context) { super(context, "users.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table jsontable (id integer primary key autoincrement,url text not null,json text not null)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}
6.JsonDao
public class JsonDao {
private MyHelper myHelper;
String table="jsontable";
private String json;
public JsonDao(Context context) {
myHelper = new MyHelper(context);
}
public String query(String url){
SQLiteDatabase database = myHelper.getWritableDatabase();
Cursor cursor = database.query(table, null, "url=?", new String[]{url}, null, null, null, null);
while (cursor.moveToNext()){
json = cursor.getString(cursor.getColumnIndex("json"));
}
return json;
}
public void insert(String url,String json){
SQLiteDatabase database = myHelper.getWritableDatabase();
database.delete(table,"url=?",new String[]{json});
ContentValues values=new ContentValues();
values.put("url",url);
values.put("json",json);
database.insert(table,null,values);
}
}
7.判斷網路狀態
public class NetStateUtil {
public static boolean isConn(Context context) {
boolean haha=false;
ConnectivityManager systemService = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = systemService.getActiveNetworkInfo();
if (info!=null){
haha =systemService.getActiveNetworkInfo().isAvailable();
}
return haha;
}
}
8.實體類
省略