判断网络开关
public static boolean isNetworkConnected(Context context){
if(context!=null){
//获取连接管理器
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取网络状态
NetworkInfo info = manager.getActiveNetworkInfo();
//判断网络是否可用
if(info!=null){
return info.isAvailable();
}
}
return false;
}
get获取网络数据
public static String requseHttpGet(String strUrl){
try {
//获取Url
URL url = new URL(strUrl);
//获取HttpURLConnection
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//get请求
connection.setRequestMethod("GET");
//获取数据
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"utf-8"));
//拼接字符串
StringBuilder builder = new StringBuilder();
String str="";
//循环读字符串
while ((str=reader.readLine())!=null){
builder.append(str);
}
//返回拼接后的数据
return builder.toString();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
get获取网络图片
public static Bitmap httpGETImage(String string) {
try {
//获取Url
URL url = new URL(string);
//获取HttpURLConnection
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//get请求
connection.setRequestMethod("GET");
//获取数据
InputStream stream = connection.getInputStream();
//图片
Bitmap bitmap = BitmapFactory.decodeStream(stream);
return bitmap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
AsyncTask请求数据
public interface CallBackString{
void getData(String s);
}
public static void httpAsyncTask(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);
}
Xlistview
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fraglistview,container,false);
//id
xListView = view.findViewById(R.id.xlistview);
//启用上拉加载
xListView.setPullLoadEnable(true);
//注册接口
xListView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {//下拉加载
//解析
Gson gson = new Gson();
JsonBean bean= gson.fromJson(s,JsonBean.class);
list = bean.getData();
//适配器
adapter = new MyAdapter(list,getActivity());
xListView.setAdapter(adapter);
onLoad();
}
@Override
public void onLoadMore() {//上拉刷新
//解析
Gson gson = new Gson();
JsonBean bean= gson.fromJson(s,JsonBean.class);
List<JsonBean.DataBean> data = bean.getData();
//数据放入集合
list.addAll(data);
//刷新适配器
adapter.notifyDataSetChanged();
onLoad();
}
});
开启线程
new Thread(){
@Override
public void run() {
super.run();
//耗时操作
boolean networkConnected = Http.isNetworkConnected(getActivity());
//判断是否有网
if (networkConnected) {
//请求数据
String s = Http.requseHttpGet("网址");
//解析
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
List<JsonBean.ResultBean> list = jsonBean.getResult();
//更新ui
Message message = new Message();
message.what = 0;
message.obj = list;
handler.sendMessage(message);
}else {
handler.sendEmptyMessageDelayed(1,0);
}
}
}.start();
onLoad
private void onLoad(){
//停止加载更多,重置头视图
xListView.stopRefresh();
//停止加载更多,重置脚视图
xListView.stopLoadMore();
//刷新时间
xListView.setRefreshTime("刚刚");
}
handler接收
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
List<JsonBean.ResultBean> list = (List<JsonBean.ResultBean>) msg.obj;
//适配器
listView.setAdapter(new MyAdapter(list,getActivity()));
break;
case 1:
Toast.makeText(getActivity(),"没网",Toast.LENGTH_LONG).show();
break;
}
}
};
gridview
String str=“网址”;
HttpUtils.httpAsyncTask(str,new HttpUtils.CallBackString() {
@Override
public void getData(String s) {
//解析
Gson gson = new Gson();
JsonBean bean= gson.fromJson(s,JsonBean.class);
List<JsonBean.DataBean> list = bean.getData();
//适配器
grid.setAdapter(new MyAdapter(list,getActivity()));
}
});
image-loader
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 List<JsonBean.DataBean> list;
private Context context;
public MyAdapter(List<JsonBean.DataBean> list, Context context) {
this.list = list;
this.context = context;
}
@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 getViewTypeCount() {
return 2;
}
//视图类型
@Override
public int getItemViewType(int position) {
return position % 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
switch (getItemViewType(position)) {
case 0:
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(context, R.layout.text, null);
holder = new ViewHolder();
holder.img = convertView.findViewById(R.id.img);
holder.txt = convertView.findViewById(R.id.txt);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
JsonBean.DataBean bean = list.get(position);
holder.txt.setText(bean.getTitle());
ImageLoader.getInstance().displayImage(bean.getThumbnail_pic_s(), holder.img);
break;
case 1:
ViewHolder1 holder1;
if (convertView == null) {
convertView = View.inflate(context, R.layout.text2, null);
holder1 = new ViewHolder1();
holder1.image = convertView.findViewById(R.id.image);
holder1.txt1 = convertView.findViewById(R.id.txt1);
holder1.txt2 = convertView.findViewById(R.id.txt2);
convertView.setTag(holder1);
} else {
holder1 = (ViewHolder1) convertView.getTag();
}
JsonBean.DataBean bean1 = list.get(position);
holder1.txt1.setText(bean1.getTitle());
holder1.txt2.setText(bean1.getAuthor_name());
DisplayImageOptions options1 = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true).build();
ImageLoader.getInstance().displayImage(bean1.getThumbnail_pic_s(),holder2.img2,options1);
break;
}
return convertView;
}
class ViewHolder {
TextView txt;
ImageView img;
}
class ViewHolder1 {
TextView txt1, txt2;
ImageView image;
}
}
Activity基类
public abstract class BaseActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(bindLayout());
initView();
initData();
bindEvent();
}
//绑定布局的方法
public abstract int bindLayout();
//绑定组件的方法
protected abstract void initView();
//操作数据的方法
protected abstract void initData();
//设置监听的方法
protected abstract void bindEvent();
protected <T extends View> T bindView(int resId){
return (T) findViewById(resId);
}
}
Fragment基类
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(bindLayout(),container,false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
initData();
bindEvent();
}
//绑定视图
protected abstract int bindLayout();
//绑定组件
protected abstract void initView();
//操作数据
protected abstract void initData();
//设置监听
protected abstract void bindEvent();
protected <T extends View > T bindView(int resId){
return (T) getView().findViewById(resId);
}
//绑定某个特定的视图
protected <T extends View> T bindView(View view ,int resId){
return (T) view.findViewById(resId);
}
}
PullToRefreshListView
//支持上拉下拉
listview.setMode(PullToRefreshBase.Mode.BOTH);
//判断是否有网络
if(HttpUtils.isNetworkConnected(getActivity())){
//有网请求数据
HttpUtils.httpAsyncTask(str, new HttpUtils.CallBackString() {
@Override
public void getData(String s) {
gsonJX(s);
}
});
}else{
//没网读取数据库数据
cursor = dao.Select("jsonlist", null, null, null, null, null, null);
ArrayList<Sqlbean> list = new ArrayList<Sqlbean>();
if(cursor.moveToFirst()){
do {
String title = cursor.getString(cursor.getColumnIndex("title"));
String url = cursor.getString(cursor.getColumnIndex("url"));
String img = cursor.getString(cursor.getColumnIndex("img"));
list.add(new Sqlbean(title,url,img));
}while (cursor.moveToNext());
}
Toast.makeText(getActivity(),"没网了",Toast.LENGTH_LONG).show();
cursor.close();
//适配器
MyAdapter adapter = new MyAdapter(getActivity(),data);
listview.setAdapter(adapter);
}
private void gsonJX(String s) {
//解析
Gson gson = new Gson();
JsonBean bean= gson.fromJson(s,JsonBean.class);
data = bean.getData();
//判断是否有数据,有则不添加
if(dao.Select("jsonlist",null,null,null,null,null,null).moveToFirst()){
}else{
//没有则添加
for (JsonBean.DataBean dataBean :data) {
ContentValues values = new ContentValues();
values.put("title",dataBean.getTitle());
values.put("url",dataBean.getUrl());
values.put("img",dataBean.getThumbnail_pic_s());
dao.Add("jsonlist",null,values);
}
}
//适配器
adapter = new MyAdapter(getActivity(),data);
listview.setAdapter(adapter);
}
listview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//判断是否有网络
if(HttpUtils.isNetworkConnected(getActivity())){
//有网请求数据
HttpUtils.httpAsyncTask(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.httpAsyncTask(str, new HttpUtils.CallBackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean bean= gson.fromJson(s,JsonBean.class);
List<JsonBean.DataBean> data2 = bean.getData();
data.addAll(data2);
adapter.notifyDataSetChanged();
}
});
}else{
Toast.makeText(getActivity(),"没网了",Toast.LENGTH_LONG).show();
}
listview.onRefreshComplete();
}
});
图片轮播
public class MainActivity extends AppCompatActivity {
private Banner banner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// <uses-permission android:name="android.permission.INTERNET" />
// <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
// <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//第一步:导入依赖
// implementation 'com.youth.banner:banner:1.4.9'
// implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
//第二步 写布局
// <com.youth.banner.Banner
// android:id="@+id/banner"
// android:layout_width="match_parent"
// android:layout_height="200dp" />
//第三步:找控件
banner = findViewById(R.id.banner);
//第四步:数据
List<String> list = new ArrayList<>();
list.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1505151721118&di=649c9a43aed72fbc4d99ec1a031510c6&imgtype=0&src=http%3A%2F%2Fimg.zcool.cn%2Fcommunity%2F015c7d574b9f8f6ac72525aee98351.jpg");
list.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1505151956771&di=0eb6f306991d24b67a13ceb336f80102&imgtype=0&src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farchive%2F00613def3f1beb7a35ae136341be2b589bc46a2d.jpg_320x200.jpg");
list.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1505151847685&di=c7a4b5d08ec43fa629bcb690039a7629&imgtype=0&src=http%3A%2F%2Fattimg.dospy.com%2Fimg%2Fday_080625%2F20080625_2e91a10c444877e88827vri2ZKdGMvQo.jpg");
list.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1505151825129&di=70bf74b87d8a15cb91a2d79f15ed0eaf&imgtype=0&src=http%3A%2F%2Fattimg.dospy.com%2Fimg%2Fday_081016%2F20081016_fee215664d5740e56c13E2YB8giERFEX.jpg");
list.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1505746504&di=930c4d677a02328a142d6fa85ed14580&imgtype=jpg&er=1&src=http%3A%2F%2Fattimg.dospy.com%2Fimg%2Fday_090113%2F20090113_6ac58b42bea94f0b318e1B6BZb5lPZl5.jpg");
//第五步:设置配置
///设置图片加载器
banner.setImageLoader(new ImageLoader() {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
//加载图片
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true)//让图片进行内存缓存
.cacheOnDisk(true)//让图片进行sdcard缓存
.build();
//参数1:加载的图片地址
//参数2:将图片设置到那个图片控件上面
//参数3:加载图片配置选项,意思是指明对这张图片的是否进行缓存(内存、sdcard)
com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage((String) path, imageView, options);
}
});
banner.setImages(list);//图片数据
banner.isAutoPlay(true);//是否轮播 true是
banner.setDelayTime(3000);//图片切换时间
banner.start();//开始轮播
}
}
TabLayout
//适配器
pager.setAdapter(new TabAdapter(getChildFragmentManager()));
//绑定
tab.setupWithViewPager(pager);
implementation 'com.android.support:design:28.0.0'
public class TabAdapter extends FragmentPagerAdapter {
String[] strings=new String[]{"关注","热点","北京"};
public TabAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i){
case 0:
return new Frag01();
case 1:
return new Frag02();
case 2:
return new Frag03();
}
return null;
}
@Override
public int getCount() {
return strings.length;
}
//显示名字
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return strings[position];
}
}