XML中的代码:
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"></ListView>
Activity中的代码:
private Mybase mybase;
private final int UPDATE_UI=1;
private String lujing="http://apis.juhe.cn/cook/query?key=9e7b4454a8f999479620c28f4624de83&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=30&pn=3";
private ListView listView;
@SuppressLint("HandlerLeak")
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
//把解出来的数据给了适配器中的集合
List<Bean.Data> datas= (List<Bean.Data>) msg.obj;
mybase.setList(datas);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取资源ID
listView = findViewById(R.id.listview);
//判断网络是否可用
if (!keyong()){
Toast.makeText(this, "网络不可用", Toast.LENGTH_SHORT).show();
return ;
}
mybase=new Mybase(this);
listView.setAdapter(mybase);
new Thread(
new Runnable() {
@Override
public void run() {
huoqu();
}
}
).start();
}
private boolean keyong(){
//获取网络状态连接服务
ConnectivityManager cm= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//获取网络状态权限
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
return activeNetworkInfo!=null&&activeNetworkInfo.isAvailable();
}
//网络请求
private void huoqu(){
try {
//定义url地址
URL url=new URL(lujing);
//打开连接
HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();
//请求方法
urlConnection.setRequestMethod("GET");
//读取超时
urlConnection.setReadTimeout(5000);
//连接超时
urlConnection.setConnectTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if (responseCode==200) {
String result = zifu(urlConnection.getInputStream());
Bean bean = new Gson().fromJson(result, Bean.class);
handler.sendMessage(handler.obtainMessage(UPDATE_UI,bean.getResult().getData()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
//字节流转化成字符流
private String zifu(InputStream zijie) throws IOException {
InputStreamReader inputStreamReader=new InputStreamReader(zijie);
BufferedReader buff=new BufferedReader(inputStreamReader);
StringBuilder builder=new StringBuilder();
for (String imp=buff.readLine();imp!=null;imp=buff.readLine()){
builder.append(imp);
}
return builder.toString();
}
适配器中的代码:
private List<Bean.Data> list;
private Context context;
public Mybase(Context context) {
this.context = context;
list=new ArrayList<>();
}
public void setList(List<Bean.Data> list) {
this.list = list;
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Bean.Data getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView==null){
holder=new ViewHolder();
convertView=LayoutInflater.from(context).inflate(R.layout.list,parent,false );
holder.text=convertView.findViewById(R.id.text);
holder.image=convertView.findViewById(R.id.image);
convertView.setTag(holder);
}else{
holder= (ViewHolder) convertView.getTag();
}
holder.text.setText(getItem(position).getTitle());
return convertView;
}
class ViewHolder{
private ImageView image;
private TextView text;
}
解析使用的Bean类:
public Result result;
public void setResult(Result result) {
this.result = result;
}
public Result getResult() {
return result;
}
class Result{
public List<Data> data;
public void setData(List<Data> data) {
this.data = data;
}
public List<Data> getData() {
return data;
}
}
class Data{
public String id;
public String title;
public void setId(String id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public String getId() {
return id;
}
public String getTitle() {
return title;
}
}