PullToRefreshListView显示-显示圆形图片-判断网络并添加显示数据库
依赖
implementation project(':pulltorefresh_library')
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
清单文件
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
创建基类
package com.example.week3lx;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
/**
* @Auther: 梁永辉
* @Date: 2019/1/10 11:45:14
* @Description:
*/
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(bindLayout());
initView();
initData();
bindEvent();
}
protected abstract int bindLayout();
protected abstract void initData();
protected abstract void initView();
protected abstract void bindEvent();
MainActivity继承基类
package com.example.week3lx;
import android.content.ContentValues;
import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;
import com.example.week3lx.adapter.Myadapter;
import com.example.week3lx.bean.Bean;
import com.example.week3lx.http.Http;
import com.example.week3lx.sql.Dao;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends BaseActivity{
private PullToRefreshListView mpullToRefreshListView;
//接口
private String str="http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
private Dao dao;
private ContentValues values;
private Myadapter myadapter;
private List<Bean.DataBean> data;
//============================================================
@Override
protected int bindLayout() {
//进入xml
return R.layout.activity_main;
}
//============================================================
@Override
protected void initData() {
mpullToRefreshListView.setScrollingWhileRefreshingEnabled(true);
mpullToRefreshListView.setMode(PullToRefreshListView.Mode.BOTH);
Http.HttpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
//判断有没有网络
boolean wl = Http.WL(MainActivity.this);
if(wl){
//显示的方法
getjson(s);
}else{
//如果没有网络显示数据库中的数据
Cursor query = dao.query("person", null, null, null, null, null, null);
ArrayList<Bean.DataBean> cxlist=new ArrayList<>();
if(query.moveToFirst()){
do {
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"));
cxlist.add(new Bean.DataBean(news_summary,news_title,pic_url));
}while(query.moveToNext());
}
Toast.makeText(MainActivity.this, "哎呀 没网了", Toast.LENGTH_LONG).show();
query.close();
//显示数据库用到的适配器
myadapter=new Myadapter(MainActivity.this,cxlist);
mpullToRefreshListView.setAdapter(myadapter);
}
}
});
}
//============================================================
@Override
protected void initView() {
//设置控件
mpullToRefreshListView = findViewById(R.id.pull);
//数据库的类
dao = new Dao(MainActivity.this);
}
//============================================================
@Override
protected void bindEvent() {
//pullToRefreshListView的上下拉的方法
mpullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//判断是否有网络
if (Http.WL(MainActivity.this)){
Http.HttpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
getjson(s);
//收起脚部
mpullToRefreshListView.onRefreshComplete();
}
});
}else{
Toast.makeText(MainActivity.this, "哎呀 没网了", Toast.LENGTH_LONG).show();
mpullToRefreshListView.onRefreshComplete();
}
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
//判断是否有网络
if (Http.WL(MainActivity.this)){
Http.HttpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
Gson gson=new Gson();
Bean bean = gson.fromJson(s, Bean.class);
List<Bean.DataBean> datas = bean.getData();
data.addAll(datas);
myadapter = new Myadapter(MainActivity.this,data);
mpullToRefreshListView.onRefreshComplete();
myadapter.notifyDataSetChanged();
}
});
}else{
Toast.makeText(MainActivity.this, "哎呀 没网了", Toast.LENGTH_LONG).show();
mpullToRefreshListView.onRefreshComplete();
}
}
});
}
//============================================================
private void getjson(String s) {
//gsoj控件
Gson gson=new Gson();
Bean bean = gson.fromJson(s, Bean.class);
data = bean.getData();
//判断数据库中是否有相同数据
if(dao.query("person",null,null,null,null,null,null).moveToFirst()){
}else{
//没有相同的数据进行添加
for(Bean.DataBean bean1 : data){
values = new ContentValues();
values.put("news_title",bean1.getNews_title());
values.put("news_summary",bean1.getNews_summary());
values.put("pic_url",bean1.getPic_url());
dao.add("person",null,values);
}
}
//适配器
myadapter = new Myadapter(MainActivity.this, data);
mpullToRefreshListView.setAdapter(myadapter);
}
}
数据库(表)
package com.example.week3lx.sql;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
lic class Mysql extends SQLiteOpenHelper {
public Mysql(Context context) {
super(context, "bw", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//数据库的表
db.execSQL("CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT,news_title VARCHAR(20),news_summary VARCHAR(20),pic_url VARCHAR(20))");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
数据库进行增删改查
package com.example.week3lx.sql;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class Dao {
private final SQLiteDatabase db;
public Dao(Context context) {
Mysql mysql=new Mysql(context);
db = mysql.getWritableDatabase();
}
public long add(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);
}
}
http用于显示PullToRefreshListView和判断网络
package com.example.week3lx.http;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class Http {
public static void HttpAsynTask(String strUlr,final CallBackString callBackString){
new AsyncTask<String,Integer,String>(){
@Override
protected String doInBackground(String... strings) {
return HttpGet(strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
callBackString.getData(s);
}
}.execute(strUlr);
}
public interface CallBackString{
void getData(String s);
}
//请求网络
public static boolean WL(Context context){
if(context!=null){
ConnectivityManager connectivityManager =(ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
if(info!=null){
return info.isConnected();
}
}
return false;
}
//get方法
public static String HttpGet(String str){
try {
URL url = new URL(str);
HttpURLConnection connection =(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
InputStream stream = connection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(stream,"utf-8"));
StringBuilder builder = new StringBuilder();
String s="";
while((s=reader.readLine())!=null){
builder.append(s);
}
connection.disconnect();
return builder.toString();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
显示图片和显示图片形状
package com.example.week3lx.app;
import android.app.Application;
import android.os.Environment;
import com.example.week3lx.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;
import java.io.File;
/**
*/
public class App extends Application {
File file=new File(Environment.getExternalStorageDirectory()+"/"+"img");
@Override
public void onCreate() {
super.onCreate();
DisplayImageOptions options=new DisplayImageOptions.Builder()
.cacheOnDisk(true)//让图片进行sdcard缓存
.cacheInMemory(true)//让图片进行内存缓存
.showImageOnFail(R.mipmap.zhao)
.displayer(new CircleBitmapDisplayer())
.build();
ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
//设置圆形图片 注意:图片一定要有高和宽不让和显示不出来
.defaultDisplayImageOptions(options)
.diskCache(new UnlimitedDiskCache(file))//UnlimitedDiskCache 限制这个图片的缓存路径
.diskCacheFileNameGenerator(new Md5FileNameGenerator())//MD5这种方式生成缓存文件的名字
.build();
ImageLoader imageLoader=ImageLoader.getInstance();
imageLoader.init(configuration);
}
}
Adapter
package com.example.week3lx.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.week3lx.BaseActivity;
import com.example.week3lx.R;
import com.example.week3lx.bean.Bean;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
public class Myadapter extends BaseAdapter {
private Context context;
List<Bean.DataBean> list;
public Myadapter(Context context, List<Bean.DataBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder;
if(view==null){
view = LayoutInflater.from(context).inflate(R.layout.itme, null);
holder=new ViewHolder();
holder.name = view.findViewById(R.id.textView);
holder.name2 = view.findViewById(R.id.textView1);
holder.image=view.findViewById(R.id.image);
view.setTag(holder);
}else{
holder = (ViewHolder) view.getTag();
}
holder.name.setText(list.get(i).getNews_title());
holder.name2.setText(list.get(i).getNews_summary());
Bean.DataBean dataBean = list.get(i);
String url = dataBean.getPic_url();
ImageLoader.getInstance().displayImage(url,holder.image);
return view;
}
class ViewHolder{
TextView name,name2;
ImageView image;
}
}
效果图