抽屉类接口解析 网络判断 刷新以及数据库

写在前面

1,布局用到的控件:

<com.handmark.pulltorefresh.library.PullToRefreshListView" />

需要导外部包插件 pulltorefresh_library
JsonBena类就不说了

用到的权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

一、创建一个抽屉类

public abstract class BaseActivity extends FragmentActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(bindLayout());
    initView();//找控件
    initData();//给控件设置数据(位置不要写反了!!!)
    bindEvent();

}
public abstract int bindLayout();//绑定布局的方法
public abstract void initView();//绑定组件
public abstract void initData();//绑定数据的方法 (请求网络
public abstract void bindEvent();//设置监听的方法
protected <T extends View> T bindView(int resid){
    return findViewById(resid);
}

}

二、在MainActivity继承抽屉类 重写需要的方法

public class MainActivity extends BaseActivity {

private PullToRefreshListView listview;
private MyHelper helper;
private SQLiteDatabase db;
private MyAdapter adapter;
private List<JsonBean> list;
private String string = "https://www.apiopen.top/novelApi";
@Override

public int bindLayout() {
//找布局
    return R.layout.activity_main;
}
@Override
public void initView() {
    //和XListview一样实现上拉加载下拉刷新的!但是XListview只能刷新listview,
    // 而pulltorefresh可以刷新.....
    //第一步:布局
    //第二步:找控件
    listview = bindView(R.id.pull);
    //第三步:设置属性
    // 设置刷新的模式:常用的有三种
    // PullToRefreshBase.Mode.BOTH  //上下拉刷新都可以
    // PullToRefreshBase.Mode.PULL_FROM_START  //只允许下拉刷新
    //  PullToRefreshBase.Mode.PULL_FROM_END   //只允许上拉加载
    listview.setMode(PullToRefreshBase.Mode.BOTH);
    //第四步 是否允许刷新时滑动
    listview.setScrollingWhileRefreshingEnabled(true);
    //接下来和XListView一样
    //如果有网就把数据存到数据库
    helper = new MyHelper(MainActivity.this);
    //获取数据库操作类
    db = helper.getWritableDatabase();
}

@Override
public void initData() {
    if (HttpUtils.isNeworkConnected(MainActivity.this)){
        HttpUtils.httpAsynTask(string,new HttpUtils.CallBackString(){
            @Override
            public void getData(String s) {
                Gson gson = new Gson();
                TwoBean bean = gson.fromJson(s, TwoBean.class);
                list = bean.getData();
                adapter = new MyAdapter(MainActivity.this, list);
                listview.setAdapter(adapter);
                //先判断有没有数据
                Cursor cursor = db.query("person", null, null, null, null, null, null);
                //判断有没第一个数据,如果有就证明有数据
                if (!cursor.moveToFirst()){
                    ContentValues values = new ContentValues();
                    values.put("Title",s);
                    db.insert("person",null,values);
                }
            }
        });
    }else{
        //如果没网就请求数据库
        Cursor cursor = db.query("person", null, null, null, null, null, null);
        //如果有第一条数据就查询数据
        if (cursor.moveToFirst()){
            String s ="";
            do{
                s = cursor.getString(cursor.getColumnIndex("Title"));
            }while (cursor.moveToNext());
            Gson gson = new Gson();
            TwoBean bean = gson.fromJson(s, TwoBean.class);
            list = bean.getData();
            adapter = new MyAdapter(MainActivity.this, list);
            listview.setAdapter(adapter);
        }else{
            Toast.makeText(MainActivity.this, "没有数据,请打开网络", Toast.LENGTH_LONG).show();
        }
        cursor.close();

    }

}

@Override
public void bindEvent() {
    //第五步:设置监听 (这里注意要new OnRefreshListener2  不要错了,
    // 如果只有一个方法就证明你new错了)
    listview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
        @Override
        public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
            //下拉刷新调用方法
            if (HttpUtils.isNeworkConnected(MainActivity.this)){
               HttpUtils.httpAsynTask(string, new HttpUtils.CallBackString() {
                   @Override
                   public void getData(String s) {
                       Gson gson = new Gson();
                       TwoBean bean = gson.fromJson(s, TwoBean.class);
                       list = bean.getData();
                       adapter = new MyAdapter(MainActivity.this, list);
                       listview.setAdapter(adapter);
                       listview.onRefreshComplete();
                   }
               });

            }else{
                Toast.makeText(MainActivity.this, "世界上最远的距离不是天涯海角,是没有网络!", Toast.LENGTH_LONG).show();
                listview.onRefreshComplete();
            }
        }
        @Override
        public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
            if (HttpUtils.isNeworkConnected(MainActivity.this)){
                HttpUtils.httpAsynTask(string, new HttpUtils.CallBackString() {
                    @Override
                    public void getData(String s) {
                        Gson gson = new Gson();
                        TwoBean bean = gson.fromJson(s, TwoBean.class);
                        ArrayList<JsonBean> data = bean.getData();
                       adapter.notifyDataSetChanged();
                       listview.onRefreshComplete();
                    }
                });

            }else{
                Toast.makeText(MainActivity.this, "世界上最远的距离不是天涯海角,是没有网络!", Toast.LENGTH_LONG).show();
                listview.onRefreshComplete();
            }
        }
    });

}

}

三、需要用到的工具类

public class HttpUtils {

//接口================================
public interface CallBackString{
    void getData(String s);
}
public static void httpAsynTask(String strUrl, final CallBackString backString){
    new AsyncTask<String,Integer,String>(){
        @Override
        protected String doInBackground(String... strings) {
            return httpGet(strings[0]);
        }
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            backString.getData(s);
        }
    }.execute(strUrl);
}


public static String httpGet(String strUrl){
    try {
        URL url = new URL(strUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setReadTimeout(5000);
        InputStream stream = connection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
        StringBuilder builder = new StringBuilder();
        String str = "";
        while ((str = reader.readLine())!=null){
            builder.append(str);
        }
        connection.disconnect();
        return builder.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
//判断网络
public static boolean isNeworkConnected(Context context){
    if (context!=null){
        //获取连接管理器
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        //获取网络状态
        NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
        if (networkInfo!=null){
            return networkInfo.isAvailable();
        }

    }
    return false;
}

}

四、创建数据库

public class MyHelper extends SQLiteOpenHelper {

public MyHelper(Context context) {
    super(context, "bw.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT,Title TEXT)");
}

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

}

}

五、适配器

public class MyAdapter extends BaseAdapter {

private Context context;
private List<JsonBean> list;

public MyAdapter(Context context, List<JsonBean> list) {
    this.context = context;
    this.list = list;
}

@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) {
    convertView = View.inflate(context,android.R.layout.simple_list_item_1,null);
    TextView textView = convertView.findViewById(android.R.id.text1);
    textView.setText(list.get(position).getAuthor_name());
    return convertView;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值