一、主页面 Java代码
(布局里一个ListView,此处就省略了~~~~)
/*第一个页面
* 我们用handler+子线程实现请求
* 并且实现网络判断
* 以及 没网的时候加载本都数据
* =============
* 判断网洛
* 请求网络
* 数据库的方法
* **第一步 :权限 很多人忘记加权限,所以第一步先把用到的权限加上
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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" />****
* */
@Nullable
@Override
String strURL = "https://www.apiopen.top/novelApi"; //接口地址
private ListView listView;
public View on**加粗样式**CreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag01, container, false);
//第二部:找控件
listView = view.findViewById(R.id.listview);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//第三部:数据( 网络请求数据 使用handler+子线程)
new Thread() {
@Override
public void run() {
super.run();
//第四部:判断网络
boolean isnNet = HttpUtil.isNetworkConnected(getActivity());
String s = "";
if (isnNet) {
//第五步:如果有网络就加载网络数据
s = HttpUtil.requestString(strURL);
//得到数据后发送给handler进行解析
} else {
//如果没网就就XXXXX
}
//第六步 把数据发送给主线程
Message message = new Message();
message.what = 0;
message.obj = s;
handler.sendMessage(message);
}
}.start();
//适配器
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
//第七步:得到数据并解析
String s = (String) msg.obj;
//解析
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
//我的Jsonbean是用Androidstudio工具封装(Alt+S 复制进去数据,点Ok)
ArrayList<JsonBean.DataBean> list = jsonBean.getData();
//第八步:展示数据到listview上
listView.setAdapter(new MyAdapter(list,getActivity()));
break;
}
}
};
二、工具类
public class HttpUtil {
public static boolean isNetworkConnected(Context context) { //注意工具类中使用静态方法
//判断上下文是不是空的
//为啥要判断啊? 防止context是空的导致 报空指针异常
if (context != null) {
//获取连接管理器
ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//获取网络状态mConnectivityManager.getActiveNetworkInfo();
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
//判断网络是否可用//如果可以用就是 true 不可用就是false
return mNetworkInfo.isAvailable();
}
}
return false;
}
//=====================================================
public static String requestString(String strUrl) {
try {
//把String 变成URL
URL url = new URL(strUrl);
//打开连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//连接超时时间
connection.setConnectTimeout(5000);
//读取超时时间
connection.setReadTimeout(5000);
//设置请求方式(要大写)
connection.setRequestMethod("GET");
//判断请求码 HttpURLConnection.HTTP_OK
if (connection.getResponseCode() == 200) {
//获取输入流(输入=>读,输出=>写)
//ctrl+alt+V 补全代码
InputStream stream = connection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(stream, "utf-8");//为了防止乱码
BufferedReader reader = new BufferedReader(inputStreamReader);
//拼接字符串
StringBuffer buffer = new StringBuffer();
String str = "";
//读取字符串
while ((str = reader.readLine()) != null) {
//拼接字符串
buffer.append(str);
}
return buffer.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
三、适配器代码
public class MyAdapter extends BaseAdapter {//继承BaseAdapter
private ArrayList<JsonBean.DataBean> list;
private Context context;
public MyAdapter(ArrayList<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 View getView(int position, View convertView, ViewGroup parent) {
convertView = View.inflate(context, R.layout.item, null);
ImageView imageView = convertView.findViewById(R.id.imageView);
TextView textView = convertView.findViewById(R.id.textView);
JsonBean.DataBean dataBean = list.get(position);
textView.setText(dataBean.getBookname());
***//设置图片 需要导Glide包***
Glide.with(context).load(dataBean.getBook_cover()).into(imageView);
return convertView;
}
}
=下面是ListView优化时候代码==
ViewHolder holder;
if (convertView==null){
convertView=View.inflate(context,R.layout.item,null);
holder = new ViewHolder();
holder.textView=convertView.findViewById(R.id.textView);
holder.textView2=convertView.findViewById(R.id.textView2);
holder.imageView=convertView.findViewById(R.id.imageView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(list.get(position).getType());
holder.textView2.setText(list.get(position).getCreatedAt());
Bean.DataBean dataBean = list.get(position);
// holder.imageView.setImageURI(list.get(position).getUrl());
Glide.with(context).load(dataBean.getUrl()).into(holder.imageView);
return convertView;
}
class ViewHolder{
TextView textView,textView2;
ImageView imageView;
}