清单文件中的权限
根据接口写bean类
封装Activity基类
package com.list.threeweekzs1.base;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
public abstract class BaseActivvity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layoutResID());
initView();
initData();
}
//初始化数据
protected abstract void initData();
//控件
protected abstract void initView();
//布局ID
protected abstract int layoutResID();
}
主页面
package com.list.threeweekzs1;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import com.list.threeweekzs1.adapter.MyPlistviewAdapter;
import com.list.threeweekzs1.base.BaseActivvity;
import com.list.threeweekzs1.beanlei.Datas;
import com.list.threeweekzs1.beanlei.JsonBean;
import com.list.threeweekzs1.net.NetUtil;
import com.list.threeweekzs1.sjk.Dao;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
public class MainActivity extends BaseActivvity {
private PullToRefreshListView plistview;
private Dao dao;
private int page = 1;
private int index;
private ArrayList<Datas> list = null;
private ArrayList<Datas> list1 = null;
private Handler handler = new Handler();
@Override
protected void initView() {
//初始化控件
plistview = findViewById(R.id.plistview);
}
//初始化数据
@Override
protected void initData() {
//调用dao层
dao = new Dao(MainActivity.this);
//做网络判断
final boolean b = NetUtil.isNet(MainActivity.this);
if (b) {
plistview.setMode(PullToRefreshBase.Mode.BOTH);
//
plistview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
//下拉刷新
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (net) {
page = 1;
getServerDates();
}
plistview.onRefreshComplete();
}
}, 2000);
}
@Override
//上拉 加载更多
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (net) {
page++;
getServerDatas();
}
pull_11.onRefreshComplete();
}
}, 2000);
}
});
//定义获取网络数据方法
getServerDates();
} else {
//获取数据库的数据
Cursor query = dao.query("user", null, null, null, null, null, null);
list1 = new ArrayList<>();
if (query.moveToFirst()) {
do {
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"));
Datas datas = new Datas(news_id, news_title, news_summary, pic_url);
list1.add(datas);
} while (query.moveToNext());
}
query.close();
Log.i("aaa", list1.size() + "米");
plistview.setAdapter(new MyPlistviewAdapter(MainActivity.this, list1));
}
}
//定义获取网络数据的方法
private void getServerDates() {
//异步请求网络
new MyAsync().execute();
}
//创建MyAsyncTask
class MyAsync extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... strings) {
// http://api.expoon.com/AppNews/getNewsList/type/1/p/1
try {
URL url = new URL(" http://api.expoon.com/AppNews/getNewsList/type/1/p/" + page);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(2000);
conn.setConnectTimeout(2000);
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
InputStream stream = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = stream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
//关流
bos.flush();
bos.close();
stream.close();
return bos.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//判断是否有数据
//gson依赖
Log.i("onPostExecute",s);
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
ArrayList<Datas> data = jsonBean.getData();
//判断数据
if (data != null) {
//分页,页数为1时
if (page == 1) {
dao.delete("user", null, null);
list = new ArrayList<>();
for (int i = 0; i < data.size(); i++) {
Datas datas = data.get(i);
ContentValues values = new ContentValues();
values.put("news_id", datas.getNews_id());
values.put("news_summary", datas.getNews_summary());
values.put("news_title", datas.getNews_title());
values.put("pic_url", datas.getPic_url());
dao.insert("user", null, values);
}
}
list.addAll(data);
plistview.setAdapter(new MyPlistviewAdapter(MainActivity.this, list));
//没有写:刷新时数据会覆盖
}
}
}
}
主页面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!--pull上拉加载,下拉刷新-->
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/plistview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
网络判断类
package com.list.threeweekzs1.net;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetUtil {
//网络判断
public static boolean isNet(Context context) {
//获取网络状态管理器
ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取网络
NetworkInfo info = conn.getActiveNetworkInfo();
//判断
if (info != null) {
return info.isAvailable();
}
return false;
}
Image图片
package com.list.threeweekzs1.net;
import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class Image extends Application {
@Override
public void onCreate() {
super.onCreate();
//调用依赖
//缓存路径
File file = new File(Environment.getExternalStorageDirectory() + "/sn");
//判断不能为空
if (!file.exists()) {
file.mkdir();//不为空就添加
}
//全局
ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(this)
//定义
.diskCacheSize(50 * 1024 * 1024)//尺寸
.diskCacheSize(30)//数量
.diskCache(new UnlimitedDiskCache(file))
.build();
//初始化
ImageLoader.getInstance().init(imageLoaderConfiguration); }
}
Sqlite
package com.list.threeweekzs1.sjk;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MySql extends SQLiteOpenHelper {
public MySql(Context context) {
super(context, "user.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table user(id integer primary key autoincrement,news_id text,news_summary text ,news_title text,pic_url text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Dao
package com.list.threeweekzs1.sjk;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class Dao {
private SQLiteDatabase db;
public Dao(Context context) {
MySql mySql = new MySql(context);
db = mySql.getWritableDatabase();
}
//添加方法
public long insert(String table, String nullColumnHack, ContentValues values) {
return db.insert(table, nullColumnHack, values);
}
//删除
public int delete(String table, String whereClause, String[] whereArgs) {
return db.delete(table, whereClause, whereArgs);
}
//查询
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.list.threeweekzs1.adapter;
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.list.threeweekzs1.R;
import com.list.threeweekzs1.beanlei.Datas;
import com.list.threeweekzs1.net.Image;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
public class MyPlistviewAdapter extends BaseAdapter {
Context context;
ArrayList<Datas> list;
private DisplayImageOptions options;
public MyPlistviewAdapter(Context context, ArrayList<Datas> list) {
this.context=context;
this.list=list;
new DisplayImageOptions.Builder()
.cacheOnDisk(true)
.build();
}
@Override
public int getCount() {
return list.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) {
ViewHlder viewHlder=null;
if (convertView==null) {
convertView=View.inflate(context,R.layout.plistview_item,null);
viewHlder=new ViewHlder();
viewHlder.textView1=convertView.findViewById(R.id.text_plistview);
viewHlder.imageView=convertView.findViewById(R.id.image_plistview);
convertView.setTag(viewHlder);
}else{
viewHlder= (ViewHlder) convertView.getTag();
}
viewHlder.textView1.setText(list.get(position).getNews_id());
ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),viewHlder.imageView);
return convertView;
}
class ViewHlder{
private TextView textView1;
private ImageView imageView;
}
}
item布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/text_plistview"
/>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/image_plistview"
/>
</LinearLayout>