package zhanghaijiao.bawei.com.zhanghaijiao180330;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.Toast;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import zhanghaijiao.bawei.com.zhanghaijiao180330.bean.ResultData;
import zhanghaijiao.bawei.com.zhanghaijiao180330.db.JsonCacheDao;
import zhanghaijiao.bawei.com.zhanghaijiao180330.utils.NetStateUtil;
public class MainActivity extends AppCompatActivity {
private PullToRefreshListView plv;
private int pageIndex=1;
private String webUrl="https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page="+pageIndex;
//定义一个大集合
private List<ResultData.NewslistBean> dataAll=new ArrayList<>();
private MyAdapter adapter;
private int operType=1;//1:代表刷新 2:代表加载更多
private Handler myHanlder=new Handler(){
@Override
public void handleMessage(Message msg) {
List<ResultData.NewslistBean> lists=( List<ResultData.NewslistBean>)msg.obj;
//显示数据
showData(lists);
}
};
private JsonCacheDao jsonCacheDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.找控件
plv = findViewById(R.id.plv);
//构造dao类,实现表的添加与查询操作
jsonCacheDao = new JsonCacheDao(this);
//2.初使化pulltoRefresh框架
initPlv();
//3.获取数据
//开启子线程请求网络 newThread+handler+httpUrlConnection请求网络数据
requestNetData();
}
//设置适配器
private void setLvAdapter(){
if(adapter==null){
adapter=new MyAdapter(MainActivity.this,dataAll);
plv.setAdapter(adapter);
}else{
adapter.notifyDataSetChanged();//刷新
}
}
private void requestNetData() {
//选进行网络是否连接的判断
if(NetStateUtil.isConn(this)){//联网状态
new Thread(){
@Override
public void run() {
try {
//1.创建一个URL对象
URL url=new URL(webUrl);
//2.打开连接
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
//3.进行设置
urlConnection.setRequestMethod("GET");
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);
//4.获取响应码进行判断
int responseCode = urlConnection.getResponseCode();
if(responseCode==200){
//5.获取数据
InputStream inputStream = urlConnection.getInputStream();
String content=stremToString(inputStream);
//插入到数据库
jsonCacheDao.insertData(webUrl,content);
//进行解析
List<ResultData.NewslistBean> newslist = asyncJson(content);
//发送消息
Message msg=Message.obtain();
msg.obj=newslist;
myHanlder.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}else{//无网状态
Log.d("zzz","---无网状态,查询数据库中的数据---");
//NetStateUtil.showNoNetWorkDlg(this);
Toast.makeText(this,"现在没有网络,请稍后重试!",Toast.LENGTH_SHORT).show();
//根据现在的url查询出相应的json数据
String s = jsonCacheDao.queryData(webUrl);
//解析,展示
List<ResultData.NewslistBean> newslistBeans = asyncJson(s);
showData(newslistBeans);
}
}
/**
* 对json串进行解析
* @param json
* @return
*/
public List<ResultData.NewslistBean> asyncJson(String json){
Gson gson=new Gson();//json
ResultData data=gson.fromJson(json, ResultData.class);
//从对象中获取列表要显示的集体数据
List<ResultData.NewslistBean> newslist = data.getNewslist();
return newslist;
}
/**
* 展示数据
* @param lists
*/
public void showData(List<ResultData.NewslistBean> lists){
if(operType==1){
dataAll.clear();//清空集合中的所有数据
}
dataAll.addAll(lists);
//设置适配器
setLvAdapter();
//关闭头尾刷新视图
plv.onRefreshComplete();
}
private void initPlv() {
//1.设置支持的模式 BOTH:支持上下拉刷新 PULL_FROM_END:只支持加载更多 PULL_FROM_START:只支持下拉刷新
plv.setMode(PullToRefreshBase.Mode.BOTH);
//2.设置上下拉刷新的监听事件
plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
//下拉刷新操作
operType=1;
pageIndex=1;
webUrl="https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page="+pageIndex;
requestNetData();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
//上拉加载更多操作
operType=2;
pageIndex++;
webUrl="https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page="+pageIndex;
requestNetData();
}
});
}
//将流转换成字符串
public String stremToString(InputStream stream){
StringBuilder builder=new StringBuilder();
try {
BufferedReader reader=new BufferedReader(new InputStreamReader(stream));
String str;
while ((str=reader.readLine())!=null){
builder.append(str);
}
} catch (Exception e) {
e.printStackTrace();
}
return builder.toString();
}
}
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.Toast;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import zhanghaijiao.bawei.com.zhanghaijiao180330.bean.ResultData;
import zhanghaijiao.bawei.com.zhanghaijiao180330.db.JsonCacheDao;
import zhanghaijiao.bawei.com.zhanghaijiao180330.utils.NetStateUtil;
public class MainActivity extends AppCompatActivity {
private PullToRefreshListView plv;
private int pageIndex=1;
private String webUrl="https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page="+pageIndex;
//定义一个大集合
private List<ResultData.NewslistBean> dataAll=new ArrayList<>();
private MyAdapter adapter;
private int operType=1;//1:代表刷新 2:代表加载更多
private Handler myHanlder=new Handler(){
@Override
public void handleMessage(Message msg) {
List<ResultData.NewslistBean> lists=( List<ResultData.NewslistBean>)msg.obj;
//显示数据
showData(lists);
}
};
private JsonCacheDao jsonCacheDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.找控件
plv = findViewById(R.id.plv);
//构造dao类,实现表的添加与查询操作
jsonCacheDao = new JsonCacheDao(this);
//2.初使化pulltoRefresh框架
initPlv();
//3.获取数据
//开启子线程请求网络 newThread+handler+httpUrlConnection请求网络数据
requestNetData();
}
//设置适配器
private void setLvAdapter(){
if(adapter==null){
adapter=new MyAdapter(MainActivity.this,dataAll);
plv.setAdapter(adapter);
}else{
adapter.notifyDataSetChanged();//刷新
}
}
private void requestNetData() {
//选进行网络是否连接的判断
if(NetStateUtil.isConn(this)){//联网状态
new Thread(){
@Override
public void run() {
try {
//1.创建一个URL对象
URL url=new URL(webUrl);
//2.打开连接
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
//3.进行设置
urlConnection.setRequestMethod("GET");
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);
//4.获取响应码进行判断
int responseCode = urlConnection.getResponseCode();
if(responseCode==200){
//5.获取数据
InputStream inputStream = urlConnection.getInputStream();
String content=stremToString(inputStream);
//插入到数据库
jsonCacheDao.insertData(webUrl,content);
//进行解析
List<ResultData.NewslistBean> newslist = asyncJson(content);
//发送消息
Message msg=Message.obtain();
msg.obj=newslist;
myHanlder.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}else{//无网状态
Log.d("zzz","---无网状态,查询数据库中的数据---");
//NetStateUtil.showNoNetWorkDlg(this);
Toast.makeText(this,"现在没有网络,请稍后重试!",Toast.LENGTH_SHORT).show();
//根据现在的url查询出相应的json数据
String s = jsonCacheDao.queryData(webUrl);
//解析,展示
List<ResultData.NewslistBean> newslistBeans = asyncJson(s);
showData(newslistBeans);
}
}
/**
* 对json串进行解析
* @param json
* @return
*/
public List<ResultData.NewslistBean> asyncJson(String json){
Gson gson=new Gson();//json
ResultData data=gson.fromJson(json, ResultData.class);
//从对象中获取列表要显示的集体数据
List<ResultData.NewslistBean> newslist = data.getNewslist();
return newslist;
}
/**
* 展示数据
* @param lists
*/
public void showData(List<ResultData.NewslistBean> lists){
if(operType==1){
dataAll.clear();//清空集合中的所有数据
}
dataAll.addAll(lists);
//设置适配器
setLvAdapter();
//关闭头尾刷新视图
plv.onRefreshComplete();
}
private void initPlv() {
//1.设置支持的模式 BOTH:支持上下拉刷新 PULL_FROM_END:只支持加载更多 PULL_FROM_START:只支持下拉刷新
plv.setMode(PullToRefreshBase.Mode.BOTH);
//2.设置上下拉刷新的监听事件
plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
//下拉刷新操作
operType=1;
pageIndex=1;
webUrl="https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page="+pageIndex;
requestNetData();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
//上拉加载更多操作
operType=2;
pageIndex++;
webUrl="https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page="+pageIndex;
requestNetData();
}
});
}
//将流转换成字符串
public String stremToString(InputStream stream){
StringBuilder builder=new StringBuilder();
try {
BufferedReader reader=new BufferedReader(new InputStreamReader(stream));
String str;
while ((str=reader.readLine())!=null){
builder.append(str);
}
} catch (Exception e) {
e.printStackTrace();
}
return builder.toString();
}
}