当前位置: 首页 > news >正文

Android 中get请求网络数据 详细举例

请求链接 https://api.bilibili.com/x/web-interface/ranking

1.添加网络权限 依赖等

implementation 'com.squareup.okhttp3:okhttp:4.9.3'
implementation 'com.google.code.gson:gson:2.8.9'

8ceaf5311c7647adb19735eeedffe345.png

2.写请求类network

package com.example.myapplication;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.ImageView;import androidx.annotation.NonNull;import org.jetbrains.annotations.NotNull;import java.io.IOException;
import java.io.InputStream;
import java.security.PublicKey;
import java.util.function.BiFunction;import javax.xml.transform.OutputKeys;import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;public class NetWork {private static OkHttpClient client=new OkHttpClient.Builder().build();//get请求方式public static void get(String url, Callback callback){Request request=new Request.Builder().url(url).build();client.newCall(request).enqueue(callback);}//post请求方式public static void post(String url,Callback callback,String token,String json){RequestBody body=RequestBody.create(MediaType.get(""),json);Request request=new Request.Builder().url(url).post(body).build();client.newCall(request).enqueue(callback);}//网络图片下载public static void getimg(String url, ImageView img) throws IOException {img.setTag(url);Request request=new Request.Builder().url(url).build();Response response=client.newCall(request).execute();Bitmap bitmap= BitmapFactory.decodeStream(response.body().byteStream());//判断图片是否重复显示img.post(new Runnable() {public void run() {if (url.equals(img.getTag())) {img.setImageBitmap(bitmap);}}});}}

3.使用listview列表接收接口数据并显示

    <ListViewandroid:id="@+id/video_list"android:layout_width="match_parent"android:layout_height="wrap_content"/>

4.编写bean类和适配器adapter 还有adapter页面的子布局

package com.example.myapplication.Bean;import java.io.Serializable;public class VideoBean implements Serializable {private String img;private String name;private int id;private String time;public VideoBean(String img, String name, int id, String time) {this.img = img;this.name = name;this.id = id;this.time = time;}public int getId() {return id;}public String getImg() {return img;}public String getName() {return name;}public String getTime() {return time;}
}

子布局xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:layout_gravity="center"><ImageViewandroid:id="@+id/img"android:layout_width="150dp"android:layout_height="150dp"android:layout_gravity="center"/><TextViewandroid:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="15sp"android:layout_gravity="center"android:layout_marginTop="5dp"/><TextViewandroid:id="@+id/time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="15sp"android:layout_gravity="center"android:layout_marginTop="5dp"/></LinearLayout>
</LinearLayout>

Listview适配器adapter的编写

package com.example.myapplication.Adapter;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
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 android.widget.Toast;import androidx.constraintlayout.helper.widget.Layer;import com.example.myapplication.Bean.VideoBean;
import com.example.myapplication.NetWork;
import com.example.myapplication.R;
import com.example.myapplication.ToastUtil;import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class VideoAdapter extends BaseAdapter {private List<VideoBean> list;private Context context;public VideoAdapter(List<VideoBean> list, Context context) {this.list = list;this.context = context;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView==null){convertView= LayoutInflater.from(context).inflate(R.layout.adapter_video,parent,false);}VideoBean bean=list.get(position);ImageView imageView=convertView.findViewById(R.id.img);TextView name=convertView.findViewById(R.id.name);TextView time=convertView.findViewById(R.id.time);name.setText(bean.getName());time.setText(bean.getTime());//开启子线程去下载图片new Thread(new Runnable() {public void run() {try {String url=bean.getImg();NetWork.getimg(url,imageView);}catch (Exception e){ToastUtil.show(context,"图片下载失败");}}}).start();return convertView;}
}

5.最后数据请求并且填充到listview上面

public class MainActivity extends AppCompatActivity {private ListView listView;private List<VideoBean>video_data=new ArrayList<>();protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView=findViewById(R.id.video_list);NetWork.get("https://api.bilibili.com/x/web-interface/ranking", new Callback() {@Overridepublic void onFailure(@NotNull Call call, @NotNull IOException e) {ToastUtil.show(MainActivity.this,"网络异常");}public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {String json=response.body().string();Map<String,Object> map=new Gson().fromJson(json, HashMap.class);Map<String,Object>data= (Map<String, Object>) map.get("data");List<Map<String, Object>>list= (List<Map<String, Object>>) data.get("list");runOnUiThread(new Runnable() {public void run() {for (Map<String,Object>list:list){Integer id;try {id=Integer.valueOf(list.get("aid").toString());}catch (Exception e){id=0;}VideoBean bean=new VideoBean(list.get("pic").toString(),list.get("title").toString(), id,list.get("duration").toString());video_data.add(bean);}listView.setAdapter(new VideoAdapter(video_data,MainActivity.this));listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {VideoBean bean=video_data.get(position);ToastUtil.show(MainActivity.this,bean.getId()+"");}});}});}});}
}

6.写一个ToastUtil工具类(判断是否需要在子线程发送)

package com.example.myapplication;import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;import androidx.annotation.NonNull;import org.jetbrains.annotations.NotNull;public class ToastUtil {private static Handler handler=new Handler(Looper.getMainLooper());public static void show(Context ctx,String txt){if (Looper.myLooper()==Looper.getMainLooper()){Toast.makeText(ctx, txt, Toast.LENGTH_SHORT).show();}else {handler.sendEmptyMessage(0);handler.post(new Runnable() {@Overridepublic void run() {Toast.makeText(ctx, txt, Toast.LENGTH_SHORT).show();}});}}
}

7.开始运行(效果图)

a4a28a20eb314cc9b5d6bc49aca607fc.png7e0c70bdc0024392bbd79ded851bd574.png

 

http://www.lryc.cn/news/311968.html

相关文章:

  • 每日五道java面试题之mysql数据库篇(六)
  • Latex——多张图排列
  • 前端复选框问题-节点赋值未选中最后显示时确变成选中状态?
  • JavaScript命名标识符规范,前端开发面试
  • 从零学习Linux操作系统 第三十部分 部署Anisble
  • C++对象模型剖析(六)一一Data语义学(三)
  • Java 代理模式详解(附案例源代码)
  • 七牛云 上传 文件 file is empty
  • 【AI视野·今日Sound 声学论文速览 第五十二期】Tue, 5 Mar 2024
  • 使用 BLAS 调用加快生成的独立代码中的矩阵运算
  • 一台服务器,最大支持的TCP连接数是多少?
  • 微信小程序云开发教程——墨刀原型工具入门(编辑页面)
  • flutter打包app
  • 力扣543. 二叉树的直径
  • python网络爬虫教程笔记(1)
  • C# 异步返回类型详解
  • BAT等大厂必问技术面试题,【2024Android最新学习路线
  • 72. 编辑距离【leetcode】/动态规划难
  • 【MySQL】视图、索引
  • 反编译java生成的.class文件
  • Cookie 探秘:了解 Web 浏览器中的小甜饼
  • Python线性代数数字图像和小波分析之二
  • LC.exe”已退出,代码为 -1
  • springboot + jpa + 达梦数据库兼容 Mysql的GenerationType.IDENTITY主键生成策略
  • Redis优化与应用
  • 深入了解Kafka的文件存储原理
  • RabbitMQ 高级
  • 音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(Android)
  • 直播美颜SDK开发指南:构建个性化的主播美颜工具
  • 羊大师揭秘,羊奶有哪些好处和不足呢?