1.布局 Listview展示是用pullToRefreshListView
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/plist"
></com.handmark.pulltorefresh.library.PullToRefreshListView>
</android.support.constraint.ConstraintLayout>
2 主页面
extends AppCompatActivity {
private PullToRefreshListView listView;
private int page=1;
private Dao dao;
private Handler handler=new Handler();
private ArrayList datas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
listView = findViewById(R.id.plist);
dao = new Dao(this);
//网络判断
final boolean netWork = NetUtil.isNetWork(MainActivity.this);
listView.setMode(PullToRefreshBase.Mode.BOTH);
listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
page=1;
if (netWork)
{
getServerData();
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
listView.onRefreshComplete();
}
},2000);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
page++;
if (netWork)
{
getServerData();
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
listView.onRefreshComplete();
}
},2000);
}
});
//有网获取网络请求数据
if (netWork)
{
getServerData();
}else
{
//没网走缓存
ArrayList<Data> data=dao.query();
if (data.size()!=0)
{
MyAdapter adapter=new MyAdapter(MainActivity.this,data);
listView.setAdapter(adapter);
}else
{
Toast.makeText(this, "暂无缓存", Toast.LENGTH_SHORT).show();
}
}
}
private void getServerData() {
new MyTask().execute();
}
//网络请求
class MyTask extends AsyncTask<String,Void,String>
{
@Override
protected String doInBackground(String... strings) {
String path="http://api.expoon.com/AppNews/getNewsList/type/1/p/"+page;
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
if (connection.getResponseCode()==HttpURLConnection.HTTP_OK)
{
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
StringBuilder builder = new StringBuilder();
String string="";
while ((string=reader.readLine())!=null)
{
builder.append(string);
}
return builder.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//gson解析
Gson gson = new Gson();
Json fromJson = gson.fromJson(s, Json.class);
ArrayList<Data> data=fromJson.getData();
if (page==1)
{
//创建集合
datas = new ArrayList<>();
//缓存之前要先清除
dao.delete();
//缓存数据
dao.add(data);
Toast.makeText(MainActivity.this, "缓存成功", Toast.LENGTH_SHORT).show();
}
datas.addAll(data);
//适配器
MyAdapter adapter=new MyAdapter(MainActivity.this,datas);
listView.setAdapter(adapter);
}
-
数据添加和查询 删除的方法
class Dao { private final SQLiteDatabase db; public Dao(Context context) { MySql sql = new MySql(ImageUtil.getInstance()); db = sql.getWritableDatabase(); } //插入数据方法 public void add(ArrayList<Data> data) { for (int i=0;i<data.size();i++) { ContentValues values = new ContentValues(); Data data1 = data.get(i); String news_summary = data1.getNews_summary(); String news_title = data1.getNews_title(); String pic_url = data1.getPic_url(); values.put("news_summary",news_summary); values.put("news_title",news_title); values.put("pic_url",pic_url); db.insert("json",null,values); } } public ArrayList<Data> query() { //创建临时集合 ArrayList<Data> data = new ArrayList<>(); //得到cursor Cursor query = db.query("json", null, null, null, null, null, null); while (query.moveToNext()) { Data data1 = new Data(); String news_summary = query.getString(query.getColumnIndex("news_summary")); String news_title = query.getString(query.getColumnIndex("news_title")); String pic_url = query.getString(query.getColumnIndex("pic_url")); data1.setNews_summary(news_summary); data1.setNews_title(news_title); data1.setPic_url(pic_url); data.add(data1); } return data; } public void delete() { db.delete("json",null,null); }
}
4 SQLite语句
public class MySql extends SQ
LiteOpenHelper {
public MySql(Context context) {
super(context, “bw.db”, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE json(id INTEGER PRIMARY KEY AUTOINCREMENT,news_summary varchar(20),news_title varchar(20),pic_url varchar(100))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
5 适配器
MyAdapter extends BaseAdapter {
private Context context;
private ArrayList<Data> data;
private final DisplayImageOptions options;
public MyAdapter(Context context, ArrayList<Data> data) {
this.context = context;
this.data = data;
options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.mipmap.ic_launcher)
.cacheOnDisk(true)
.cacheInMemory(true)
.build();
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder=null;
if (convertView==null)
{
convertView = View.inflate(context, R.layout.item1, null);
viewHolder= new ViewHolder();
viewHolder.text1=convertView.findViewById(R.id.text1);
viewHolder.text2=convertView.findViewById(R.id.text2);
viewHolder.image1=convertView.findViewById(R.id.image1);
convertView.setTag(viewHolder);
}else
{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.text1.setText(data.get(position).getNews_summary());
viewHolder.text2.setText(data.get(position).getNews_title());
ImageLoader.getInstance().displayImage(data.get(position).getPic_url(),viewHolder.image1,options);
return convertView;
}
class ViewHolder
{
TextView text1;
TextView text2;
ImageView image1;
}
}