PullToRefreshListView联合数据库的基本caozuo

activity的代码:

public class MainActivity extends AppCompatActivity {
    String baseurl = "https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page=";
    int page = 1;
    ArrayList<Phread.NewslistBean> list = new ArrayList<>();
    private PullToRefreshListView plv;
    private MyAdapter adapter;
    private JsonDao dao;
    private String mUrl;
    @SuppressLint("HandlerLeak")
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 1) {
                String s = (String) msg.obj;
                dao.insertData(mUrl,s);
                jiexi(s);
            }
        }
    };


    private void jiexi(String s) {
        Gson gson = new Gson();
        Phread phread = gson.fromJson(s, Phread.class);
        List<Phread.NewslistBean> newslist = phread.getNewslist();
        list.addAll(newslist);
        adapter.notifyDataSetChanged();
        plv.onRefreshComplete();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        plv = (PullToRefreshListView) findViewById(R.id.plv);
        plv.setMode(PullToRefreshBase.Mode.BOTH);
        dao = new JsonDao(this);
        //请求数据

        adapter = new MyAdapter();
        plv.setAdapter(adapter);
        getData(1);
        plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
                //下拉刷新
                list.clear();
                getData(1);
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
                page++;
                getData(page);
            }
        });

    }

    private void getData(final int page) {
        mUrl = baseurl+page;
        if (NetStateUtil.isConn(MainActivity.this)) {
            new Thread() {
                @Override
                public void run() {
                    super.run();
                    String netjson = NetWordUtils.getNetjson(baseurl + page);
                    Message msg = new Message();
                    msg.what = 1;
                    msg.obj = netjson;
                    handler.sendMessage(msg);
                }
            }.start();

        } else {
            //没网的情况下
            Toast.makeText(MainActivity.this, "当前状态没有网络,请稍等。。。", Toast.LENGTH_LONG);
            //从数据库进行读取
            String v = dao.queryData(mUrl);
            if (!v.isEmpty()) {
                jiexi(v);
            }

        }

    }

    private class MyAdapter extends BaseAdapter {
        @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) {
            ViewHolder holder = null;
            if (view == null) {
                view = View.inflate(MainActivity.this, R.layout.item_list, null);
                holder = new ViewHolder();
                holder.iv = view.findViewById(R.id.iv);
                holder.tv = view.findViewById(R.id.tv);
                view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }
            //赋值
            holder.tv.setText(list.get(i).getTitle());
            ImageLoader.getInstance().displayImage(list.get(i).getPicUrl(), holder.iv);
            return view;
        }

        class ViewHolder {
            ImageView iv;
            TextView tv;
        }
    }
}
创建数据库:

public class MyHelper extends SQLiteOpenHelper {
    public MyHelper(Context context) {
        super(context, "dbss", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("create table tb(id integer primary key autoincrement,url text not null,json text not null)");
    }

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

    }
}

数据库的基本操作:

public class JsonDao {

    private final MyHelper helper;

    public JsonDao(Context context) {
        helper = new MyHelper(context);
    }

    //增加
    public void insertData(String url, String json) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.delete("tb", "url=?", new String[]{url});
        //增加
        ContentValues values = new ContentValues();
        values.put("url", url);
        values.put("json", json);
        long tb = db.insert("tb", null, values);
        Log.i("zdm",tb+"");
    }

    //查询
    public String queryData(String url) {
        String s = "";
        SQLiteDatabase db = helper.getWritableDatabase();
        Cursor cursor = db.query("tb", null, "url=?", new String[]{url}, null, null, null);
        while (cursor.moveToNext()) {
            s = cursor.getString(cursor.getColumnIndex("json"));
            Log.i("zdm",s);
        }
        return s;
    }
}
工具类

获得json的工具类

public class NetWordUtils {

    private static String  tag = "NetWordUtils";
    /**
     * 获取网络json
     *
     * @param urlString
     * @return
     */
    public static String getNetjson(String urlString) {

        try {
            URL url = new URL(urlString);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");//若果是get请求可以不用配置; 其他请求必须配置
            urlConnection.setConnectTimeout(8000);//设置链接超时间

            InputStream inputStream = urlConnection.getInputStream();//获取网络返回的输入流;

            //可拼接的字符串
            StringBuilder stringBuilder = new StringBuilder();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String temp = "";
            while ((temp = bufferedReader.readLine()) != null) {
                stringBuilder.append(temp);
                temp = "";
            }
            //这个是网络获取的数据
            String data = stringBuilder.toString();
            Log.e(tag, "getData: " + data);
            return data;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }}

判断手机有无网络的工具类:

public class NetStateUtil {

    /*
 * 判断网络连接是否已开
 * true 已打开  false 未打开
 * */
    public static boolean isConn(Context context) {
        boolean bisConnFlag = false;
        ConnectivityManager conManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo network = conManager.getActiveNetworkInfo();
        if (network != null) {
            bisConnFlag = conManager.getActiveNetworkInfo().isAvailable();
        }
        return bisConnFlag;
    }}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值