MainActivity
package bwie.com.moniyuekao1;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ImageView;
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 java.util.ArrayList;
import java.util.HashSet;
import java.util.zip.Inflater;
import bwie.com.moniyuekao1.adapter.MyAdapter;
import bwie.com.moniyuekao1.bean.Shop;
import bwie.com.moniyuekao1.helper.Dao;
import bwie.com.moniyuekao1.helper.User;
import bwie.com.moniyuekao1.httputils.HttpUtils;
import bwie.com.moniyuekao1.httputils.NetUtils;
public class MainActivity extends AppCompatActivity implements HttpUtils.NetCallBack {
//展示列表的url
private String url = "http://ttpc.dftoutiao.com/jsonpc/refresh?type=";
private int type=5010;
//轮播图片的url
private String bannerUrl = "http://www.xieast.com/api/banner.php";
private PullToRefreshListView pulltf;
private ArrayList<Shop.DataBean> list;
private MyAdapter adapter;
private Dao dao;
private HttpUtils httpUtils;
private ViewPager view_pager;
private ArrayList<ImageView> bannerimages;
private BannerCallBack bannerCallBack;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
pulltf = findViewById(R.id.pulltf);
//设置pulltf
pulltf.setMode(PullToRefreshBase.Mode.BOTH);
pulltf.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//刷新
type=5010;
loadData();
//停止刷新 如果刷新数据 可能太快 停止不了刷新 所以延迟1秒
pulltf.postDelayed(new Runnable() {
@Override
public void run() {
Log.i("aaa","执行了下拉刷新");
pulltf.onRefreshComplete();
}
},2000);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
//加载
type++;
loadData();
//停止刷新 如果刷新数据 可能太快 停止不了刷新 所以延迟1秒
pulltf.postDelayed(new Runnable() {
@Override
public void run() {
Log.i("aaa","执行了上拉加载");
pulltf.onRefreshComplete();
}
},2000);
}
});
//创建装pull信息的集合
list = new ArrayList<>();
//创建适配器pull
adapter = new MyAdapter(MainActivity.this, list);
//设置pull适配器
pulltf.setAdapter(adapter);
//调用dao层
dao = new Dao(MainActivity.this);
//调用接口
httpUtils = HttpUtils.getInstance();
loadData();
//轮播1
lunBo();
}
/*轮播1*/
private void lunBo() {
/*给pulltf设置头布局*/
ListView refreshableView = pulltf.getRefreshableView();
View bannerView = LayoutInflater.from(this).inflate(R.layout.banner_layout, null, false);
/*t通过bannerView查找控件*/
view_pager = bannerView.findViewById(R.id.view_pager);
//创建集合装图片
bannerimages = new ArrayList<>();
//这只头布局的布局参数
/*设置他的宽高*/
AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 600);
//添加导bannerview中
bannerView.setLayoutParams(params);
//添加头布局
/*把bannerView添加导refreshbleView中*/
refreshableView.addHeaderView(bannerView);
//创建方法BannerCallBack
bannerCallBack = new BannerCallBack();
//继续回调
httpUtils.getLoadFromJson(bannerUrl,bannerCallBack);
}
private void loadData() {
//查询数据库
User user = dao.query((url + type));
if (user!=null) {
parserJson(user.json);
}else {
if (NetUtils.isNetworkConnectted(this)){
/*有网 ,,请求网络*/
httpUtils.getLoadFromJson((url+type),this);
}else {
Toast.makeText(MainActivity.this, "没有网络", Toast.LENGTH_SHORT).show();
}
}
}
/*通过Gson解析*/
private void parserJson(String json) {
Gson gson = new Gson();
Shop shop = gson.fromJson(json, Shop.class);
//判断页数
if (type==5010){
list.clear();
}
list.addAll(shop.getData());
//通过Hashset去除重复
HashSet hashSet = new HashSet(list);
list.clear();
list.addAll(hashSet);
//刷新适配器
adapter.notifyDataSetChanged();
}
/*成功执行的回调函数*/
@Override
public void onSuccess(String result) {
Log.i("aaa",result);
//街区json串
String json = result.replace("null(", "").replace(")", "");
//创建Gson
Gson gson = new Gson();
Shop shop = gson.fromJson(json, Shop.class);
list.addAll(shop.getData());
adapter.notifyDataSetChanged();
}
/*失败执行的回调函数*/
@Override
public void onError(String errorMsg) {
Log.i("aaa",errorMsg);
}
/*轮播中的回调 需要实现httputils的netcallback方法*/
class BannerCallBack implements HttpUtils.NetCallBack{
@Override
public void onSuccess(String result) {
Log.i("aaa", "轮播:" + result);
}
@Override
public void onError(String errorMsg) {
}
}
}
MyAdapter
package bwie.com.moniyuekao1.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.bwei.imageloaderlibrary.utils.ImageLoaderUtils;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
import bwie.com.moniyuekao1.R;
import bwie.com.moniyuekao1.bean.Shop;
public class MyAdapter extends BaseAdapter {
private Context context;
private List<Shop.DataBean> list;
public MyAdapter(Context context, List<Shop.DataBean> list) {
this.context = context;
this.list = list;
}
@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) {
ViewHolder viewHolder = null;
if (view == null) {
viewHolder = new ViewHolder();
view = LayoutInflater.from(context).inflate(R.layout.item_adapter1, null, false);
viewHolder.ivIcon = view.findViewById(R.id.iv_icon);
viewHolder.tvDesc = view.findViewById(R.id.tv_desc);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.tvDesc.setText(list.get(i).getBrief());
ImageLoader.getInstance().displayImage(list.get(i).getMiniimg().get(0).getSrc(),viewHolder.ivIcon);
/* ImageLoader .getInstance().displayImage(dataBeans.get(position).getMiniimg().get(0).getSrc(), viewHolder.ivIcon);
viewHolder.tvDesc.setText(dataBeans.get(position).getBrief());*/
return view;
}
class ViewHolder{
ImageView ivIcon;
TextView tvDesc;
}
}
//网络获取 接口回调
package bwie.com.moniyuekao1.httputils;
import android.os.AsyncTask;
import android.text.TextUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import bwie.com.moniyuekao1.MainActivity;
public class HttpUtils {
private static final HttpUtils ourInstance = new HttpUtils();
public static HttpUtils getInstance() {
return ourInstance;
}
private HttpUtils() {
}
public void getLoadFromJson(String url,NetCallBack callBack){
new Async(callBack).execute(url);
}
private class Async extends AsyncTask<String,Void,String> {
private NetCallBack netCallBack;
private Async(){
}
private Async(NetCallBack netCallBack){
this.netCallBack=netCallBack;
}
@Override
protected String doInBackground(String... strings) {
HttpURLConnection connection=null;
try {
URL url=new URL(strings[0]);
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
if (connection.getResponseCode()==HttpURLConnection.HTTP_OK) {
InputStream inputStream = connection.getInputStream();
return inputStream2String(inputStream);
}
} catch (Exception e) {
netCallBack.onError(e.getMessage());
}finally {
if (connection!=null){
connection.disconnect();
}
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (TextUtils.isEmpty(s)){
netCallBack.onError("没有请求数据");
}else {
netCallBack.onSuccess(s);
}
}
}
private String inputStream2String(InputStream inputStream) throws IOException {
ByteArrayOutputStream bos =new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int len=-1;
while ((len=inputStream.read(buffer))!=-1){
bos.write(buffer,0,len);
}
return new String(bos.toByteArray());
}
public interface NetCallBack{
void onSuccess(String result);
void onError(String errorMsg);
}
}
网络判断接口
package bwie.com.yuekao1.httputils;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetUtils {
public static boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
}
权限
<!--网络-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--写入-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--读取-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--网络权限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>