PullToRefreshListView展示数据,数据库缓存

清单文件中的权限
根据接口写bean类

在这里插入图片描述

封装Activity基类

 package com.list.threeweekzs1.base;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
public abstract class BaseActivvity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(layoutResID());
    initView();
    initData();
}

//初始化数据
protected abstract void initData();

//控件
protected abstract void initView();

//布局ID
protected abstract int layoutResID();

}
主页面

package com.list.threeweekzs1;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import com.list.threeweekzs1.adapter.MyPlistviewAdapter;
 import com.list.threeweekzs1.base.BaseActivvity;
import com.list.threeweekzs1.beanlei.Datas;
import com.list.threeweekzs1.beanlei.JsonBean;
import com.list.threeweekzs1.net.NetUtil;
import com.list.threeweekzs1.sjk.Dao;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 import java.net.URLConnection;
import java.util.ArrayList;
 public class MainActivity extends BaseActivvity {
private PullToRefreshListView plistview;
private Dao dao;
private int page = 1;
private int index;
private ArrayList<Datas> list = null;
private ArrayList<Datas> list1 = null;
private Handler handler = new Handler();



  @Override
protected void initView() {
    //初始化控件
    plistview = findViewById(R.id.plistview);
}
//初始化数据
@Override
protected void initData() {
    //调用dao层
    dao = new Dao(MainActivity.this);
    //做网络判断
    final boolean b = NetUtil.isNet(MainActivity.this);
    if (b) {
        plistview.setMode(PullToRefreshBase.Mode.BOTH);
        //
        plistview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            //下拉刷新
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
              handler.postDelayed(new Runnable() {
	    @Override
	    public void run() {
	        if (net) {
	            page = 1;
	           getServerDates();		     
	              }
	      plistview.onRefreshComplete();
	    }
	}, 2000);             
	   }
           @Override
            //上拉 加载更多
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
             handler.postDelayed(new Runnable() {
	    @Override
	    public void run() {
	        if (net) {
	            page++;
	            getServerDatas();		   
	                 }
	        pull_11.onRefreshComplete();
	    }
		}, 2000);               
		 }			
	  });
            //定义获取网络数据方法
            getServerDates();
        } else {
            //获取数据库的数据
            Cursor query = dao.query("user", null, null, null, null, null, null);
            list1 = new ArrayList<>();
            if (query.moveToFirst()) {
                do {
                    String news_id = query.getString(query.getColumnIndex("news_id"));
                    String news_title = query.getString(query.getColumnIndex("news_title"));
                    String news_summary = query.getString(query.getColumnIndex("news_summary"));
                    String pic_url = query.getString(query.getColumnIndex("pic_url"));
                    Datas datas = new Datas(news_id, news_title, news_summary, pic_url);
                    list1.add(datas);
                } while (query.moveToNext());
            }
            query.close();
            Log.i("aaa", list1.size() + "米");
        plistview.setAdapter(new MyPlistviewAdapter(MainActivity.this, list1));

    }
}

//定义获取网络数据的方法
private void getServerDates() {
    //异步请求网络
    new MyAsync().execute();
}

//创建MyAsyncTask
class MyAsync extends AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... strings) {
        // http://api.expoon.com/AppNews/getNewsList/type/1/p/1
        try {
            URL url = new URL(" http://api.expoon.com/AppNews/getNewsList/type/1/p/" + page);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setReadTimeout(2000);
            conn.setConnectTimeout(2000);
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream stream = conn.getInputStream();
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = stream.read(buffer)) != -1) {
                    bos.write(buffer, 0, len);
                }
                //关流
                bos.flush();
                bos.close();
                stream.close();
                return bos.toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        //判断是否有数据
        //gson依赖
        Log.i("onPostExecute",s);
        Gson gson = new Gson();
        JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
        ArrayList<Datas> data = jsonBean.getData();
        //判断数据
        if (data != null) {
            //分页,页数为1时
            if (page == 1) {
                dao.delete("user", null, null);
                list = new ArrayList<>();
                for (int i = 0; i < data.size(); i++) {
                    Datas datas = data.get(i);
                    ContentValues values = new ContentValues();
                    values.put("news_id", datas.getNews_id());
                    values.put("news_summary", datas.getNews_summary());
                    values.put("news_title", datas.getNews_title());
                    values.put("pic_url", datas.getPic_url());
                    dao.insert("user", null, values);
                }
            }
            list.addAll(data);
            plistview.setAdapter(new MyPlistviewAdapter(MainActivity.this, list));
            //没有写:刷新时数据会覆盖
        }
    }
}
}

主页面布局

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">

<!--pull上拉加载,下拉刷新-->
<com.handmark.pulltorefresh.library.PullToRefreshListView
    android:id="@+id/plistview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

网络判断类

  package com.list.threeweekzs1.net;
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;

public class NetUtil {
//网络判断
public static boolean isNet(Context context) {
    //获取网络状态管理器
    ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    //获取网络
    NetworkInfo info = conn.getActiveNetworkInfo();
    //判断
    if (info != null) {
        return info.isAvailable();
    }
    return false;
}

Image图片

package com.list.threeweekzs1.net;
import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class Image extends Application {
@Override
public void onCreate() {
    super.onCreate();
    //调用依赖
 //缓存路径
File file = new File(Environment.getExternalStorageDirectory() + "/sn");
//判断不能为空
if (!file.exists()) {
    file.mkdir();//不为空就添加
}
//全局
ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(this)
        //定义
        .diskCacheSize(50 * 1024 * 1024)//尺寸
        .diskCacheSize(30)//数量
        .diskCache(new UnlimitedDiskCache(file))
        .build();
//初始化
ImageLoader.getInstance().init(imageLoaderConfiguration);    }
     }

Sqlite

    package com.list.threeweekzs1.sjk;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MySql extends SQLiteOpenHelper {
public MySql(Context context) {
    super(context, "user.db", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table user(id integer primary key autoincrement,news_id text,news_summary text ,news_title text,pic_url text)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

Dao

package com.list.threeweekzs1.sjk;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class Dao {
private SQLiteDatabase db;

public Dao(Context context) {
    MySql mySql = new MySql(context);
    db = mySql.getWritableDatabase();
}

//添加方法
public long insert(String table, String nullColumnHack, ContentValues values) {
    return db.insert(table, nullColumnHack, values);
}

//删除
public int delete(String table, String whereClause, String[] whereArgs) {
    return db.delete(table, whereClause, whereArgs);
}

//查询
public Cursor query(String table, String[] columns,
                    String selection, String[] selectionArgs, String groupBy,
                    String having, String orderBy) {
    return db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
}

}

适配器

package com.list.threeweekzs1.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.list.threeweekzs1.R;
import com.list.threeweekzs1.beanlei.Datas;
import com.list.threeweekzs1.net.Image;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
public class MyPlistviewAdapter extends BaseAdapter {
Context context;
ArrayList<Datas> list;
private DisplayImageOptions options;
public MyPlistviewAdapter(Context context, ArrayList<Datas> list) {
    this.context=context;
    this.list=list;
    new DisplayImageOptions.Builder()
    .cacheOnDisk(true)
    .build();
}

@Override
public int getCount() {
    return list.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) {
    ViewHlder viewHlder=null;
    if (convertView==null) {
        convertView=View.inflate(context,R.layout.plistview_item,null);
        viewHlder=new ViewHlder();
        viewHlder.textView1=convertView.findViewById(R.id.text_plistview);
        viewHlder.imageView=convertView.findViewById(R.id.image_plistview);
        convertView.setTag(viewHlder);
    }else{
        viewHlder= (ViewHlder) convertView.getTag();
    }
    viewHlder.textView1.setText(list.get(position).getNews_id());
    ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),viewHlder.imageView);

    return convertView;
}
class ViewHlder{
    private TextView textView1;
    private ImageView imageView;
}
}

item布局

<?xml version="1.0" encoding="utf-8"?>
   <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text_plistview"
        />
    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/image_plistview"
        />
</LinearLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值