第一步
写依赖
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类