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 java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private PullToRefreshListView plv; private JsonCacheDao jsonCacheDao; private int pageIndex=1; private String gao="https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page="+pageIndex; //定义大集合 private List<Bean.NewslistBean> dataAll=new ArrayList<>(); private MyAdapter adapter; private int operType=1;//代表刷新,加载更多 private Handler handler= new Handler(){ @Override public void handleMessage(Message mssuper) { List<Bean.NewslistBean> lists=( List<Bean.NewslistBean>)mssuper.obj; //显示数据 showData(lists); } private JsonCacheDao jsonCacheDao; }; //设置适配器 private void setLvAdapter(){ if (adapter==null){ adapter=new MyAdapter(MainActivity.this,dataAll); plv.setAdapter(adapter); } else{ //刷新 adapter.notifyDataSetChanged(); } } private void requestNetData (){ //进行联网判断 if (NetStataeUtil.isConn(this)) { new Thread() { @Override public void run() { // super.run(){ try { URL url = new URL(gao); //打开连接 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); //进行设置 urlConnection.setRequestMethod("GET"); urlConnection.setReadTimeout(5000); urlConnection.setConnectTimeout(5000); //响应码判断 int responseCode = urlConnection.getResponseCode(); if (responseCode == 200) { //5.获取数据 InputStream inputStream = urlConnection.getInputStream(); String content = stremToString(inputStream); //插入到数据库 jsonCacheDao.insertData(gao, content); //进行解析 List<Bean.NewslistBean> newslist = asyncJson(content); //发送消息 Message msg = Message.obtain(); msg.obj = newslist; handler.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(gao); //解析,展示 List<Bean.NewslistBean> newslistBeans = asyncJson(s); showData(newslistBeans); } } //展示数据 private void showData(List<Bean.NewslistBean> lists) { if(operType==1){ dataAll.clear();//清空集合中的所有数据 } dataAll.addAll(lists); //设置适配器 setLvAdapter(); plv.onRefreshComplete(); } ; public List<Bean.NewslistBean> asyncJson(String json){ Gson gson=new Gson();//json Bean data=gson.fromJson(json, Bean.class); //从对象中获取列表要显示的集体数据 List<Bean.NewslistBean> newslist = data.getNewslist(); return newslist; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找控件设置 plv= findViewById(R.id.plv); jsonCacheDao = new JsonCacheDao(this); innitPlv(); requestNetData(); } private void innitPlv() { //1.设置支持的模式 BOTH:支持上下拉刷新 PULL_FROM_END:只支持加载更多 PULL_FROM_START:只支持下拉刷新 plv.setMode(PullToRefreshBase.Mode.BOTH); //设置上下拉的监听事件 plv.setMode(PullToRefreshBase.Mode.BOTH); //2.设置上下拉刷新的监听事件 plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) { //下拉刷新操作 operType = 1; pageIndex = 1; gao = "https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page=" + pageIndex; //可以重复刷新 requestNetData(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) { //上拉加载更多操作 operType = 2; pageIndex++; gao = "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(); } }
main
最新推荐文章于 2024-07-31 17:50:43 发布