多条目数据库缓存

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);
        }
  1. 数据添加和查询 删除的方法

          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;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44329686/article/details/86538632