activity的代码:
public class MainActivity extends AppCompatActivity { String baseurl = "https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page="; int page = 1; ArrayList<Phread.NewslistBean> list = new ArrayList<>(); private PullToRefreshListView plv; private MyAdapter adapter; private JsonDao dao; private String mUrl; @SuppressLint("HandlerLeak") private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 1) { String s = (String) msg.obj; dao.insertData(mUrl,s); jiexi(s); } } }; private void jiexi(String s) { Gson gson = new Gson(); Phread phread = gson.fromJson(s, Phread.class); List<Phread.NewslistBean> newslist = phread.getNewslist(); list.addAll(newslist); adapter.notifyDataSetChanged(); plv.onRefreshComplete(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); plv = (PullToRefreshListView) findViewById(R.id.plv); plv.setMode(PullToRefreshBase.Mode.BOTH); dao = new JsonDao(this); //请求数据 adapter = new MyAdapter(); plv.setAdapter(adapter); getData(1); plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) { //下拉刷新 list.clear(); getData(1); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) { page++; getData(page); } }); } private void getData(final int page) { mUrl = baseurl+page; if (NetStateUtil.isConn(MainActivity.this)) { new Thread() { @Override public void run() { super.run(); String netjson = NetWordUtils.getNetjson(baseurl + page); Message msg = new Message(); msg.what = 1; msg.obj = netjson; handler.sendMessage(msg); } }.start(); } else { //没网的情况下 Toast.makeText(MainActivity.this, "当前状态没有网络,请稍等。。。", Toast.LENGTH_LONG); //从数据库进行读取 String v = dao.queryData(mUrl); if (!v.isEmpty()) { jiexi(v); } } } private class MyAdapter extends BaseAdapter { @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder holder = null; if (view == null) { view = View.inflate(MainActivity.this, R.layout.item_list, null); holder = new ViewHolder(); holder.iv = view.findViewById(R.id.iv); holder.tv = view.findViewById(R.id.tv); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } //赋值 holder.tv.setText(list.get(i).getTitle()); ImageLoader.getInstance().displayImage(list.get(i).getPicUrl(), holder.iv); return view; } class ViewHolder { ImageView iv; TextView tv; } } }
创建数据库:
public class MyHelper extends SQLiteOpenHelper { public MyHelper(Context context) { super(context, "dbss", null, 1); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL("create table tb(id integer primary key autoincrement,url text not null,json text not null)"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
数据库的基本操作:
public class JsonDao { private final MyHelper helper; public JsonDao(Context context) { helper = new MyHelper(context); } //增加 public void insertData(String url, String json) { SQLiteDatabase db = helper.getWritableDatabase(); db.delete("tb", "url=?", new String[]{url}); //增加 ContentValues values = new ContentValues(); values.put("url", url); values.put("json", json); long tb = db.insert("tb", null, values); Log.i("zdm",tb+""); } //查询 public String queryData(String url) { String s = ""; SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.query("tb", null, "url=?", new String[]{url}, null, null, null); while (cursor.moveToNext()) { s = cursor.getString(cursor.getColumnIndex("json")); Log.i("zdm",s); } return s; } }
工具类
获得json的工具类
public class NetWordUtils { private static String tag = "NetWordUtils"; /** * 获取网络json * * @param urlString * @return */ public static String getNetjson(String urlString) { try { URL url = new URL(urlString); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET");//若果是get请求可以不用配置; 其他请求必须配置 urlConnection.setConnectTimeout(8000);//设置链接超时间 InputStream inputStream = urlConnection.getInputStream();//获取网络返回的输入流; //可拼接的字符串 StringBuilder stringBuilder = new StringBuilder(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String temp = ""; while ((temp = bufferedReader.readLine()) != null) { stringBuilder.append(temp); temp = ""; } //这个是网络获取的数据 String data = stringBuilder.toString(); Log.e(tag, "getData: " + data); return data; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ""; }}
判断手机有无网络的工具类:
public class NetStateUtil { /* * 判断网络连接是否已开 * true 已打开 false 未打开 * */ public static boolean isConn(Context context) { boolean bisConnFlag = false; ConnectivityManager conManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo network = conManager.getActiveNetworkInfo(); if (network != null) { bisConnFlag = conManager.getActiveNetworkInfo().isAvailable(); } return bisConnFlag; }}