异步请求网络----PullToRefresh上下拉刷新数据---判断是否有网--有网请求网络展示数据并添加数据库----无网展示已添加数据库的数据

第一步
写依赖
implementation ‘com.nostra13.universalimageloader:universal-image-loader:1.9.5’
implementation ‘com.github.userswlwork:pull-to-refresh:1.0.0’
implementation ‘com.google.code.gson:gson:2.8.2’

第二步
写权限



第三步
写工具类
package com.tyh.zhoukao3_lianxi2;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

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;

public class Net {
//请求网络工具类

public static String getString(String urlString){
    try {
        URL url = new URL(urlString);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        int responseCode = urlConnection.getResponseCode();
        if (responseCode == 200) {
            InputStream inputStream = urlConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            
            StringBuilder stringBuilder = new StringBuilder();
            String str="";
            //拼接字符串
            while ((str=bufferedReader.readLine())!=null){
                stringBuilder.append(str);
            }
            //返回字符串
            String string = stringBuilder.toString();
            return string;
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "";
}

///判断是否有网返回boolean
//true 有网
//false 无网
public static boolean getNet(Context context){
    boolean net = false;
    ConnectivityManager conManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = conManager.getActiveNetworkInfo();
    if (networkInfo != null) {
        net = networkInfo.isAvailable();
    }
    return net;

}

}

第四步
写ImageLoaderConfiguration:

package com.tyh.zhoukao3_lianxi2;

import android.app.Application;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

public class MApp extends Application {

@Override
public void onCreate() {
    super.onCreate();
    ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this)

            .build();
    ImageLoader instance = ImageLoader.getInstance();

    instance.init(build);
}

}

然后在清单文件注册、
在清单文件

第五步写适配器
package com.tyh.zhoukao3_lianxi2;

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

import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;

public class MyListAdapter extends BaseAdapter {
private Context context;
private ArrayList<JsonBean.DataBean> datalist;

public MyListAdapter(Context context, ArrayList<JsonBean.DataBean> datalist) {
    this.context = context;
    this.datalist = datalist;
}

@Override
public int getCount() {
    return datalist.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) {
    ViewHolder vh;
    if (convertView == null) {
        convertView = View.inflate(context,R.layout.list,null);
        vh = new ViewHolder();
        vh.iv =(ImageView) convertView.findViewById(R.id.mImageView);
        vh.tv1 = (TextView) convertView.findViewById(R.id.mTextView1);
        vh.tv2 = (TextView) convertView.findViewById(R.id.mTextView2);
        vh.tv3 = (TextView) convertView.findViewById(R.id.mTextView3);
        convertView.setTag(vh);
    }else{
        vh =(ViewHolder) convertView.getTag();
    }
    JsonBean.DataBean dataBean = datalist.get(position);
    //Mapp里的ImageLoader同步网络请求来图片
    ImageLoader instance = ImageLoader.getInstance();
    instance.displayImage(dataBean.getPic_url(),vh.iv);
    
    vh.tv1.setText(dataBean.getNews_id());
    vh.tv2.setText(dataBean.getNews_title());
    vh.tv3.setText(dataBean.getNews_summary());

    return convertView;
}

class ViewHolder{
    ImageView iv;
    TextView tv1;
    TextView tv2;
    TextView tv3;
    TextView tv4;
}

}

第六步
写数据库

一、SQLite
package com.tyh.zhoukao3_lianxi2.SQLite;

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

public class MySQLite extends SQLiteOpenHelper {
public MySQLite(Context context) {
super(context, “bw.db”, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    /*private String news_id;
    private String news_title;
    private String news_summary;
    private String pic_url;*/
//定义数据库名 和需要添加的数据
    db.execSQL("create table person(id integer primary key autoincrement,news_id text,news_title text,news_summary text,pic_url text)");

}

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

}

}
二、
Dao层

package com.tyh.zhoukao3_lianxi2.SQLite;

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

public class Dao {
private SQLiteDatabase db;
private MySQLite msqLite;

public Dao(Context context){
    msqLite = new MySQLite(context);
    db = msqLite.getWritableDatabase();
}

//添加数据
public long insert(String table, String nullColumnHack, ContentValues values){
    return db.insert(table, nullColumnHack,  values);
}

//展示数据
public Cursor query(String table, String[] columns, String selection,
                    String[] selectionArgs, String groupBy, String having,
                    String orderBy){
    return db.query(table, columns, selection, selectionArgs,groupBy, having, orderBy);
}

}
第七步、
写代码
package com.tyh.zhoukao3_lianxi2.Myfrag2;

import android.content.ContentValues;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
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 com.tyh.zhoukao3_lianxi2.JsonBean;
import com.tyh.zhoukao3_lianxi2.MyListAdapter;
import com.tyh.zhoukao3_lianxi2.Net;
import com.tyh.zhoukao3_lianxi2.R;
import com.tyh.zhoukao3_lianxi2.SQLite.Dao;

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

public class Myfrag11 extends Fragment {
private Dao dao;
private int page = 0;
String urlString = “http://api.expoon.com/AppNews/getNewsList/type/1/p/1”;
private PullToRefreshListView pulllistView;
private MyListAdapter myListAdapter;
private ArrayList<JsonBean.DataBean> datalist = new ArrayList<>();

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.frag11, container, false);
    dao = new Dao(getActivity());
    pulllistView = (PullToRefreshListView) view.findViewById(R.id.mPullListView);
    //刷新标签
    pulllistView.setMode(PullToRefreshBase.Mode.BOTH);

    //判断网络
    //net为true是有网状态
    //反之就是无网状态
    boolean net = Net.getNet(getActivity());
    if (net == true) {
        myListAdapter = new MyListAdapter(getActivity(), datalist);
        pulllistView.setAdapter(myListAdapter);
        getWork(0);
        Toast.makeText(getActivity(), "有网", Toast.LENGTH_SHORT).show();

    } else {
        //无网状态展示数据库
        Cursor query = dao.query("person", null, null, null, null, null, null);
        if (query.moveToFirst()) {
            do {
                /*private String news_id;
            private String news_title;
            private String news_summary;
            private String pic_url;*/
                String news_id = query.getString(query.getColumnIndex("news_id"));
                String news_title = query.getString(query.getColumnIndex("news_title"));
                String news_summary = query.getString(query.getColumnIndex("news_summary"));
                String pic_url = query.getString(query.getColumnIndex("pic_url"));
                JsonBean.DataBean dataBean = new JsonBean.DataBean();
                dataBean.setNews_id(news_id);
                dataBean.setNews_title(news_title);
                dataBean.setNews_summary(news_summary);
                dataBean.setPic_url(pic_url);
                datalist.add(dataBean);
                myListAdapter = new MyListAdapter(getActivity(), datalist);
                pulllistView.setAdapter(myListAdapter);


            } while (query.moveToNext());
        }
        //关闭
        query.close();

        Toast.makeText(getActivity(), "无网", Toast.LENGTH_SHORT).show();
    }
    //如果有网就异步请求网络
    if (net == true) {

        getWork(0);
    }

    //上下拉刷新
    pulllistView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
        //上啦更新
        @Override
        public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {

            page = 0;
            datalist.clear();
            getWork(page);

        }

        //下拉加载
        @Override
        public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
            page++;
            getWork(page);
        }
    });


    return view;
}
//实例异步请求
private void getWork(int page) {
    new MyAsyncTask().execute(urlString + page);
}

//异步请求网络
class MyAsyncTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... strings) {
        //调用工具类
        String string = Net.getString(strings[0]);

        return string;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        //Gson数据解析
        Gson gson = new Gson();
        JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
        //定义临时集合
        List<JsonBean.DataBean> list = jsonBean.getData();
        datalist.addAll(list);
        //添加数据库
        for (int i = 0; i < datalist.size(); i++) {

            ContentValues values = new ContentValues();
            values.put("news_id", datalist.get(i).getNews_id());
            values.put("news_title", datalist.get(i).getNews_title());
            values.put("news_summary", datalist.get(i).getNews_summary());
            values.put("pic_url", datalist.get(i).getPic_url());
            dao.insert("person", null, values);
        }
        //刷新数据
        myListAdapter.notifyDataSetChanged();
        //这一步要将上下拉刷新写完在写
        pulllistView.onRefreshComplete();
    }
}

}

最后不要忘了先写bean类

猜你喜欢

转载自blog.csdn.net/qq_43806553/article/details/84977607