//主mainActivity
public class MainActivity extends AppCompatActivity {
private PullToRefreshListView pullToRefreshListView;
List<JavaBean.NewslistBean> list=new ArrayList();
private Myadapter myadapter;
int pager=0;
public String urlString = "http://api.tianapi.com/huabian/?key=71e58b5b2f930eaf1f937407acde08fe&num=";
//朱先生
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what ==1) {
Gson gson = new Gson();
//得到json后添加到数据库中 以便没网时进行查看
zsgc.insrert((String) msg.obj,urlString+pager);
JavaBean javaBean = gson.fromJson((String) msg.obj, JavaBean.class);
List<JavaBean.NewslistBean> newslist = javaBean.getNewslist();
list.addAll(newslist);
myadapter.notifyDataSetChanged();
pullToRefreshListView.onRefreshComplete();
}
}
};
private com.example.zdm.yuekao0407.zsgc zsgc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pullToRefreshListView = (PullToRefreshListView) findViewById(R.id.pull);
pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);
zsgc = new zsgc(MainActivity.this);
myadapter = new Myadapter();
pullToRefreshListView.setAdapter(myadapter);
getData(0);
//监听事件
pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
list.clear();
getData(0);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
pager++;
getData(pager);
}
});
}
//获取数据
private void getData(final int pager) {
//判断有网的状态
//如果有网用流量进行加载
if (NetStateUtil.isConn(this)){
new Thread(){
@Override
public void run() {
super.run();
String netjson = NetWordUtils.getNetjson(urlString+pager);
Message message = handler.obtainMessage();message.what=1;
message.obj=netjson;
handler.sendMessage(message);
}
}.start();
} //如果没网便熊数据库中查询
else{
String qurell = zsgc.qurell(urlString + pager);
if (!qurell.isEmpty()){
Gson gson = new Gson();
JavaBean javaBean = gson.fromJson(qurell, JavaBean.class);
List<JavaBean.NewslistBean> newslist = javaBean.getNewslist();
list.addAll(newslist);
myadapter.notifyDataSetChanged();
pullToRefreshListView.onRefreshComplete();
}
}
}
//适配器
private class Myadapter extends BaseAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//进行优化
ViewHoder hoder;
if (view==null){
view=View.inflate(MainActivity.this,R.layout.list,null);
hoder=new ViewHoder();
hoder.tit=view.findViewById(R.id.tit);
hoder.img=view.findViewById(R.id.img);
view.setTag(hoder);
}else{
hoder= (ViewHoder) view.getTag();
}
hoder.tit.setText(list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getPicUrl(),hoder.img);
return view;
}
class ViewHoder{
ImageView img;
TextView tit;
}
}
}
//ImageLoaderConfiguration 类
public class Mapp extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this)
.memoryCacheSize(100)
.memoryCacheExtraOptions(480, 800)
.build();
ImageLoader.getInstance().init(build);
}
//创建数据库继承
SQLiteOpenHelper
public class Sqlite extends SQLiteOpenHelper{
public Sqlite(Context context) {
super(context, "test.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table info(id integer,url text not null,json text not null)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
对数据库增删改查的封装类
public class zsgc {
private final Sqlite sqlite;
public zsgc(Context context) {
sqlite = new Sqlite(context);
}
//添加方法
public void insrert(String json,String uri){
SQLiteDatabase writableDatabase = sqlite.getWritableDatabase();
先删除 是为了让添加进去的数据是最新的
writableDatabase.delete("info","url=?",new String[]{uri});
ContentValues contentValues = new ContentValues();contentValues.put("url",uri);
contentValues.put("json",json);
long info = writableDatabase.insert("info", null, contentValues);
Log.i("--++",info+"");
}
//查询方法
public String qurell(String uri){ SQLiteDatabase writableDatabase =
sqlite.getWritableDatabase(); Cursor info = writableDatabase.query(
"info",
null,
"url=?",
new String[]{uri},
null,
null,
null,
null);
while (info.moveToNext()){
因为url是变动的 所以通过当前的url得到当前数据 然后从当前数据获取子节点就可以获取到json
String json = info.getString(info.getColumnIndex("json"));
Log.i("--++",json);
返回的json是为了在主activity中通过json便可以进行解析 获取集合
return json;
}
return "";
}
//判断网络封装类
public class NetStateUtil {
/*
* 判断网络连接是否已开
* true 已打开 false 未打开
* */
public static boolean isConn(Context context){
boolean bisConnFlag=false;
ConnectivityManager conManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo network = conManager.getActiveNetworkInfo();
if(network!=null){
bisConnFlag=conManager.getActiveNetworkInfo().isAvailable();
}
return bisConnFlag;
}
//网络转译的json类
public class NetWordUtils {
private static String tag = "NetWordUtils";
/**
* 获取网络json
*
* @param urlString
* @return
*/
public static String getNetjson(String urlString) {
try {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");//若果是get请求可以不用配置; 其他请求必须配置
urlConnection.setConnectTimeout(8000);//设置链接超时间
InputStream inputStream = urlConnection.getInputStream();//获取网络返回的输入流;
//可拼接的字符串
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String temp = "";
while ((temp = bufferedReader.readLine()) != null) {
stringBuilder.append(temp);
temp = "";
}
//这个是网络获取的数据
String data = stringBuilder.toString();
Log.e(tag, "getData: " + data);
return data;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}