HttpUtils 工具类
public class HttpUtils {
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;
}
public static void httpAsynTask(String strUrl, final CallBackString backString) {
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
return httpGet(strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//接口回调的方法
backString.getData(s);
}
}.execute(strUrl);
}
//接口================================
public interface CallBackString {
void getData(String s);
}
//==============================================
public static String httpGet(String strUrl) {
//设置url
try {
URL url = new URL(strUrl);
//获取HttpURLConnection
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置为get请求
connection.setRequestMethod("GET");
//设置连接主机超时时间
connection.setConnectTimeout(5000);
//设置从主机读取数据超时
connection.setReadTimeout(5000);
//得到数据
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
//拼接数据
StringBuilder builder = new StringBuilder();
String str = "";
while ((str = reader.readLine()) != null) {
builder.append(str);
}
//关闭连接
connection.disconnect();
//返回数据
return builder.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
app继承Application
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
String path = Environment.getExternalStorageDirectory().getPath() + “/RiKao13”;
File file = new File(path);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(200, 200)//配置内存缓存图片的尺寸
.memoryCacheSize(2 * 1024 * 1024)//配置内存缓存的大小
.threadPoolSize(3)//配置加载图片的线程数
.threadPriority(1000)//配置线程的优先级
.diskCache(new UnlimitedDiskCache(file))//UnlimitedDiskCache 限制这个图片的缓存路径
.diskCacheFileCount(50)//配置sdcard缓存文件的数量
.diskCacheFileNameGenerator(new Md5FileNameGenerator())//MD5这种方式生成缓存文件的名字
.diskCacheSize(50 * 1024 * 1024)//在sdcard缓存50MB
.build();//完成
ImageLoader.getInstance().init(config);
}
}
适配器
public class MyAdapter extends BaseAdapter {
private Context context;
private List<JsonBean.DataBean> list;
public MyAdapter(Context context, List<JsonBean.DataBean> list) {
this.context = context;
this.list = list;
}
@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 int getItemViewType(int position) {
return position % 3;
}
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
switch (getItemViewType(position)) {
case 0:
ViewHolder1 holder1;
if (convertView == null) {
convertView = View.inflate(context,R.layout.item1, null);
holder1 = new ViewHolder1();
holder1.image1 = convertView.findViewById(R.id.image1);
holder1.text1 = convertView.findViewById(R.id.text1);
convertView.setTag(holder1);
} else {
holder1 = (ViewHolder1) convertView.getTag();
}
JsonBean.DataBean bean =list.get(position);
//================
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true)//让图片进行内存缓存
.cacheOnDisk(true)//让图片进行sdcard缓存
/*.showImageForEmptyUri(R.mipmap.ic_empty)//图片地址有误
.showImageOnFail(R.mipmap.ic_error)//当图片加载出现错误的时候显示的图片
.showImageOnLoading(R.mipmap.loading)//图片正在加载的时候显示的图片*/
.build();
//参数1:加载的图片地址
//参数2:将图片设置到那个图片控件上面
//参数3:加载图片配置选项,意思是指明对这张图片的是否进行缓存(内存、sdcard)
ImageLoader.getInstance().displayImage(bean.getThumbnail_pic_s(), holder1.image1, options);
//================
holder1.text1.setText(bean.getTitle());
break;
case 1:
ViewHolder2 holder2;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item2, null);
holder2 = new ViewHolder2();
holder2.text2 = convertView.findViewById(R.id.text2);
holder2.text3 = convertView.findViewById(R.id.text3);
holder2.image2 = convertView.findViewById(R.id.image2);
convertView.setTag(holder2);
} else {
holder2 = (ViewHolder2) convertView.getTag();
}
JsonBean.DataBean bean2 = list.get(position);
holder2.text2.setText(bean2.getTitle());
holder2.text3.setText(bean2.getAuthor_name());
DisplayImageOptions options1 = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true) .build();
ImageLoader.getInstance().displayImage(bean2.getThumbnail_pic_s02(), holder2.image2, options1);
break;
case 2:
ViewHolder3 holder3;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item3, null);
holder3 = new ViewHolder3();
holder3.text4 = convertView.findViewById(R.id.text4);
convertView.setTag(holder3);
} else {
holder3 = (ViewHolder3) convertView.getTag();
}
JsonBean.DataBean bean3 = list.get(position);
holder3.text4.setText(bean3.getAuthor_name());
break;
}
return convertView;
}
class ViewHolder1 {
ImageView image1;
TextView text1;
}
class ViewHolder2 {
ImageView image2;
TextView text2,text3;
}
class ViewHolder3 {
TextView text4;
}
}
MyPagerAdapter
public class MyPagerAdapter extends FragmentPagerAdapter {
private ArrayList list1;
private ArrayList title;
public MyPagerAdapter(FragmentManager fm, ArrayList<Fragment> list1, ArrayList<String> title) {
super(fm);
this.list1 = list1;
this.title = title;
}
@Override
public Fragment getItem(int i) {
return list1.get(i);
}
@Override
public int getCount() {
return title.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return title.get(position);
}
}
bean类省略
列表页面
public class Fragment01 extends BaseFragment {
String str = “http://www.xieast.com/api/news/news.php?page=1”;
private PullToRefreshListView listView;
private List<JsonBean.DataBean> list;
private MyAdapter adapter;
private Cursor cursor;
private Dao dao;
private TabLayout tabLayout;
private ArrayList<Fragment> list1;
private ArrayList<String> title;
private ViewPager pager;
@Override
protected int bindLayout() {
return R.layout.frag1;
}
@Override
protected void initView() {
listView = bindView(R.id.pullto);
//设置模式 BOTH:支持上拉加载 下拉刷新 PULL_FROM_END:仅支持加载更多 PULL_FROM_START:下拉刷新
listView.setMode(PullToRefreshBase.Mode.BOTH);
listView.setScrollingWhileRefreshingEnabled(true);
dao = new Dao(getActivity());
tabLayout = bindView(R.id.tablayout);
pager = bindView(R.id.pager);
}
@Override
protected void initData() {
list1 = new ArrayList<>();
list1.add(new Frag1());
list1.add(new Frag2());
title = new ArrayList<>();
title.add("视频");
title.add("科技");
pager.setAdapter(new MyPagerAdapter(getActivity().getSupportFragmentManager(),list1,title));
tabLayout.setupWithViewPager(pager);
///判断有没有网络
if (HttpUtils.isNetworkConnected(getActivity())) {
//如果 有网就请求网络
HttpUtils.httpAsynTask(str, new HttpUtils.CallBackString() {
@Override
public void getData(String s) {
gsonJX(s);
}
});
} else {
//如果没有网络 就读取数据库的数据
//请求数据库
cursor = dao.query("person", null, null, null, null, null, null);
list=new ArrayList<JsonBean.DataBean>();
if (cursor.moveToFirst()){
do {
String uniquekey= cursor.getString(cursor.getColumnIndex("uniquekey"));
String title= cursor.getString(cursor.getColumnIndex("title"));
String date= cursor.getString(cursor.getColumnIndex("date"));
String category= cursor.getString(cursor.getColumnIndex("category"));
String author_name= cursor.getString(cursor.getColumnIndex("author_name"));
String url= cursor.getString(cursor.getColumnIndex("url"));
String thumbnail_pic_s= cursor.getString(cursor.getColumnIndex("thumbnail_pic_s"));
String thumbnail_pic_s02= cursor.getString(cursor.getColumnIndex("thumbnail_pic_s02"));
String thumbnail_pic_s03= cursor.getString(cursor.getColumnIndex("thumbnail_pic_s03"));
list.add(new JsonBean.DataBean(uniquekey,title,date,category,author_name,url,thumbnail_pic_s,thumbnail_pic_s02,thumbnail_pic_s03));
}while (cursor.moveToNext());
}
Toast.makeText(getActivity(),"哎呀 没网了",Toast.LENGTH_LONG).show();
cursor.close();
//设置适配器
adapter = new MyAdapter(getActivity(), list);
listView.setAdapter(adapter);
}
}
private void gsonJX(String s) {
Gson gson = new Gson();
JsonBean json = gson.fromJson(s, JsonBean.class);
list = json.getData();
//判断有没有数据 有数据就不添加
if (dao.query("person", null, null, null, null, null, null).moveToFirst()) {
} else {
//如果没有就添加
for (JsonBean.DataBean bean : list) {
ContentValues values = new ContentValues();
values.put("uniquekey", bean.getUniquekey());
values.put("title", bean.getTitle());
values.put("date", bean.getDate());
values.put("category", bean.getCategory());
values.put("author_name", bean.getAuthor_name());
values.put("url", bean.getUrl());
values.put("thumbnail_pic_s", bean.getThumbnail_pic_s());
values.put("thumbnail_pic_s02", bean.getThumbnail_pic_s02());
values.put("thumbnail_pic_s03", bean.getThumbnail_pic_s03());
dao.add("person", null, values);
}
}
adapter = new MyAdapter(getActivity(), list);
listView.setAdapter(adapter);
}
@Override
protected void bindEvent() {
listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
if (HttpUtils.isNetworkConnected(getActivity())) {
//如果 有网就请求网络
HttpUtils.httpAsynTask(str, new HttpUtils.CallBackString() {
@Override
public void getData(String s) {
gsonJX(s);
}
});
}else{
Toast .makeText(getActivity(),"哎呀 没网了",Toast.LENGTH_LONG).show();
}
listView.onRefreshComplete();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
if (HttpUtils.isNetworkConnected(getActivity())) {
//如果 有网就请求网络
HttpUtils.httpAsynTask(str, new HttpUtils.CallBackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean json = gson.fromJson(s, JsonBean.class);
List<JsonBean.DataBean> data2= json.getData();
list.addAll(data2);
adapter.notifyDataSetChanged();
}
});
}else{
Toast .makeText(getActivity(),"哎呀 没网了",Toast.LENGTH_LONG).show();
}
listView.onRefreshComplete();
}
});
}
}
Fragment02表格页面
public class Fragment02 extends BaseFragment {
String str=“http://www.xieast.com/api/news/news.php?page=1”;
private List<JsonBean.DataBean> list;
private MydridAdapter mygridAdapter;
private GridView gridView;
@Override
protected void initView() {
gridView = bindView(R.id.gridview);
}
@Override
protected void initData() {
HttpUtils.httpAsynTask(str, new HttpUtils.CallBackString() {
@Override
public void getData(String s) {
Gson gson=new Gson();
JsonBean bean = gson.fromJson(s, JsonBean.class);
list = bean.getData();
mygridAdapter = new MydridAdapter(getActivity(),list);
gridView.setAdapter(mygridAdapter);
}
});
}
@Override
protected void bindEvent() {
}
@Override
protected int bindLayout() {
return R.layout.frag2;
}
}