PullToRefresh实现上拉加载、下拉刷新并判断网络状态,无网缓存到数据库

XML布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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"
    android:id="@+id/drawerlayout"
    android:fitsSystemWindows="true"
    android:clickable="false"
    android:focusable="false"
    tools:openDrawer="start"
    tools:context=".MainActivity">

   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical"
       >
      <com.handmark.pulltorefresh.library.PullToRefreshListView
          android:id="@+id/pullToRefresh"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          />
   </LinearLayout>
   <include
       android:layout_width="200dp"
       android:layout_height="match_parent"
       android:layout_gravity="start"
       android:background="#e8e8e8"
       android:clickable="false"
       android:focusable="false"
       layout="@layout/layout_left"
       />
</android.support.v4.widget.DrawerLayout>
<?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="300dp"
    android:layout_height="match_parent"
    android:id="@+id/layout_left"
    android:layout_gravity="left"
    android:background="#e8e8e8"
    android:orientation="vertical"
    >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:gravity="center"
            >
            <ImageView
                android:layout_width="90dp"
                android:layout_height="90dp"
                android:src="@mipmap/ic_launcher"
                android:layout_centerInParent="true"
                android:id="@+id/image"
                android:clickable="true"
                android:focusable="true"
                android:layout_gravity="center"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="邮箱"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:layout_marginTop="15dp"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="邮箱"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:layout_marginTop="15dp"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="邮箱"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:layout_marginTop="15dp"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="邮箱"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:layout_marginTop="15dp"
                />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="邮箱"
                android:textSize="20sp"
                android:layout_gravity="center"
                android:layout_marginTop="15dp"
                />
        </LinearLayout>


</LinearLayout>

MAinActivity页面:

package com.example.administrator.monthdemo;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

import com.example.administrator.adapter.MyAdapter;
import com.example.administrator.bean.Bean;
import com.example.administrator.db.DBDao;
import com.example.administrator.utils.HttpHelper;
import com.example.administrator.utils.NetworkUtils;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity{

    int page = 1;
    private DrawerLayout mDrawerlayout;
    private String urlPath = "http://www.xieast.com/api/news/news.php?page=";
    private List<Bean.DataBean> list = new ArrayList<>();
    private List<Bean.DataBean> arrayList = new ArrayList<>();
    private MyAdapter adapter;
    private PullToRefreshListView mPullToRefresh;
    private DBDao dbDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );
        initView();
        mDrawerlayout.setDrawerListener( new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {

            }

            @Override
            public void onDrawerOpened(@NonNull View drawerView) {
                toast( "侧滑菜单出来了" );
            }

            @Override
            public void onDrawerClosed(@NonNull View drawerView) {
                toast( "侧滑菜单回去了" );
            }

            @Override
            public void onDrawerStateChanged(int newState) {

            }
        } );

        /**
         * 右侧网络请求
         */
        adapter = new MyAdapter(MainActivity.this);
        mPullToRefresh.setAdapter(adapter);
        adapter.setList(arrayList);
        dbDao = new DBDao( MainActivity.this );
        boolean connected = NetworkUtils.isConnected( this );
        if (connected){
            doHttp( page );
            mPullToRefresh.setMode( PullToRefreshBase.Mode.BOTH);
            mPullToRefresh.setOnRefreshListener( new PullToRefreshBase.OnRefreshListener2<ListView>() {
                @Override
                public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                    page = 1;
                    arrayList.clear();
                    doHttp( page );
                    onStop();
                }

                @Override
                public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                    page ++;
                    doHttp(page);
                    adapter.notifyDataSetChanged();
                    onStop();
                    if (page > 10){
                        toast("没有更多数据了......");
                    }
                }

                private void onStop() {
                    mPullToRefresh.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            mPullToRefresh.onRefreshComplete();
                        }
                    }, 1000);
                }
            } );
        }else {
            String data2 = dbDao.query();
            Bean bean = new Gson().fromJson( data2, Bean.class );
            List<Bean.DataBean> list = bean.getData();
            arrayList.addAll( list );
            adapter.setList( arrayList );
        }

    }

    private void doHttp(int page) {
        new HttpHelper().get(urlPath+page).result( new HttpHelper.HttpListener() {
            @Override
            public void success(String data) {
                dbDao.add( data );
                Gson gson = new Gson();
                Bean bean = gson.fromJson( data, Bean.class );
                list = bean.getData();
                arrayList.addAll( list );
                adapter.notifyDataSetChanged();
            }

            @Override
            public void fail() {

            }
        } );
    }

    private void toast(String data) {
        Toast.makeText( MainActivity.this, data, Toast.LENGTH_LONG ).show();
    }

    private void initView() {
        mPullToRefresh = (PullToRefreshListView) findViewById( R.id.pullToRefresh );
        mDrawerlayout = (DrawerLayout) findViewById( R.id.drawerlayout );
    }

}

自定义适配器MyAdapter:

package com.example.administrator.adapter;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.administrator.bean.Bean;
import com.example.administrator.monthdemo.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.List;

public class MyAdapter extends BaseAdapter{

    private List<Bean.DataBean> list = new ArrayList<>();
    private Context context;

    public MyAdapter(Context context) {
        this.context = context;
    }

    public void setList(List<Bean.DataBean> list) {
        this.list = list;
        notifyDataSetChanged();
    }





    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        if(list.get(position).getThumbnail_pic_s02()!=null&&list.get(position).getThumbnail_pic_s03()!=null){
            return 0;//有三个图片以上的,展示规则是,上面是title下面是图片
        }
        return 1;//
    }
    @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) {
        ViewHolder1 holder1;
        ViewHolder2 holder2;
        int type = getItemViewType( i );
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .cacheOnDisk( true )
                .bitmapConfig( Bitmap.Config.RGB_565)
                .build();
        switch (type){
            case 1:
                if (view == null){
                    view = View.inflate( context, R.layout.layout_item1,null );
                    holder1 = new ViewHolder1();
                    holder1.title = view.findViewById( R.id.title);
                    holder1.imageView = view.findViewById( R.id.img_pic );
                    view.setTag( holder1 );
                }else {
                    holder1 = (ViewHolder1) view.getTag();
                }
                holder1.title.setText( list.get( i ).getTitle() );
                ImageLoader.getInstance().displayImage( list.get( i ).getThumbnail_pic_s(),holder1.imageView ,options);
                break;
            case 0:
                if (view == null){
                    view = View.inflate( context, R.layout.layout_item2,null );
                    holder2 = new ViewHolder2();
                    holder2.title = view.findViewById( R.id.title);
                    holder2.img_pic1 = view.findViewById( R.id.img_pic1 );
                    holder2.img_pic2 = view.findViewById( R.id.img_pic2 );
                    holder2.img_pic3 = view.findViewById( R.id.img_pic3 );
                    view.setTag( holder2 );
                }else {
                    holder2 = (ViewHolder2) view.getTag();
                }
                holder2.title.setText( list.get( i ).getTitle() );
                ImageLoader.getInstance().displayImage( list.get( i ).getThumbnail_pic_s(),holder2.img_pic1,options );
                ImageLoader.getInstance().displayImage( list.get( i ).getThumbnail_pic_s02(),holder2.img_pic2,options );
                ImageLoader.getInstance().displayImage( list.get( i ).getThumbnail_pic_s03(),holder2.img_pic3 ,options);
                break;
        }
        return view;
    }

    class ViewHolder1{
        TextView title;
        ImageView imageView;
    }
    class ViewHolder2{
        TextView title;
        ImageView img_pic1,img_pic2,img_pic3;
    }
}

创建数据库并使用:

package com.example.administrator.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("create table why (id integer primary key autoincrement,data text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}
package com.example.administrator.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;

public class DBDao {


    private final SQLiteDatabase db;

    public DBDao(Context context) {
        DBHelper dbHelper = new DBHelper(context, "why.db", null, 1);
        db = dbHelper.getWritableDatabase();
    }

    public long add(String data){
        ContentValues values = new ContentValues();
        values.put("data",data);
        return db.insert("why",null,values);
    }

    public String query(){
        String data = "";
        Cursor cursor = db.query("why", null, null, null, null, null, null);
        while (cursor.moveToNext()){
            data = cursor.getString(cursor.getColumnIndex("data"));
        }
        return data;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值