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.实体类
省略