我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android网络编程,调用API获取网络数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android网络编程,调用API获取网络数据

实现步骤:

  1. 阅读API接口使用文档
  2. 使用okhttp 获取网络数据
  3. 使用 gson将json数据转为数据实体类
  4. 安装GsonFormatPlus插件
  5. 使用glide加载网络图片

  • build.gradle下导入相关依赖
     //数据解析    implementation 'com.google.code.gson:gson:2.8.9'    //图片加载    implementation 'com.github.bumptech.glide:glide:4.16.0'    //网络请求    implementation 'com.squareup.okhttp3:okhttp:4.11.0'
  • AndroidManifest.xml 加入网络权限和 application节点下设置
 <uses-permission android:name="android.permission.INTERNET" />

注意事项:在手机高版本中,需要在application节点下设置 android:networkSecurityConfig=“@xml/network_security_config”

network_security_config.xml文件如下

<?xml version="1.0" encoding="utf-8"?><network-security-config xmlns:android="http://schemas.android.com/apk/res/android">    <base-config cleartextTrafficPermitted="true" /></network-security-config>
  • 编写activity_news.xml新闻主页面
<?xml version="1.0" encoding="utf-8"?><androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:orientation="vertical"    android:layout_height="match_parent"    tools:context=".NewsActivity">    <androidx.appcompat.widget.Toolbar        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="@color/teal_200"        app:titleTextColor="@color/white"        app:title="新闻列表"/>    <androidx.recyclerview.widget.RecyclerView        android:id="@+id/recyclerView"        android:layout_width="match_parent"        tools:listitem="@layout/new_item"        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"        android:layout_height="wrap_content"/></androidx.appcompat.widget.LinearLayoutCompat>
  • 根据网络返回数据编写NewsInfo实体类
public class NewsInfo {    private String reason;    private ResultBean result;    private Integer error_code;    public String getReason() {        return reason;    }    public void setReason(String reason) {        this.reason = reason;    }    public ResultBean getResult() {        return result;    }    public void setResult(ResultBean result) {        this.result = result;    }    public Integer getError_code() {        return error_code;    }    public void setError_code(Integer error_code) {        this.error_code = error_code;    }    public static class ResultBean {        private String stat;        private List<DataBean> data;        private String page;        private String pageSize;        public String getStat() {            return stat;        }        public void setStat(String stat) {            this.stat = stat;        }        public List<DataBean> getData() {            return data;        }        public void setData(List<DataBean> data) {            this.data = data;        }        public String getPage() {            return page;        }        public void setPage(String page) {            this.page = page;        }        public String getPageSize() {            return pageSize;        }        public void setPageSize(String pageSize) {            this.pageSize = pageSize;        }        public static class DataBean {            private String uniquekey;            private String title;            private String date;            private String category;            private String author_name;            private String url;            private String thumbnail_pic_s;            private String is_content;            private String thumbnail_pic_s02;            public String getUniquekey() {                return uniquekey;            }            public void setUniquekey(String uniquekey) {                this.uniquekey = uniquekey;            }            public String getTitle() {                return title;            }            public void setTitle(String title) {                this.title = title;            }            public String getDate() {                return date;            }            public void setDate(String date) {                this.date = date;            }            public String getCategory() {                return category;            }            public void setCategory(String category) {                this.category = category;            }            public String getAuthor_name() {                return author_name;            }            public void setAuthor_name(String author_name) {                this.author_name = author_name;            }            public String getUrl() {                return url;            }            public void setUrl(String url) {                this.url = url;            }            public String getThumbnail_pic_s() {                return thumbnail_pic_s;            }            public void setThumbnail_pic_s(String thumbnail_pic_s) {                this.thumbnail_pic_s = thumbnail_pic_s;            }            public String getIs_content() {                return is_content;            }            public void setIs_content(String is_content) {                this.is_content = is_content;            }            public String getThumbnail_pic_s02() {                return thumbnail_pic_s02;            }            public void setThumbnail_pic_s02(String thumbnail_pic_s02) {                this.thumbnail_pic_s02 = thumbnail_pic_s02;            }        }    }}
  • 创建新闻NewsListAdapter适配器
public class NewsListAdapter extends RecyclerView.Adapter<NewsListAdapter.MyHolder> {    private List<NewsInfo.ResultBean.DataBean> mDataBeanList = new ArrayList<>();    private Context mContext;    public NewsListAdapter(Context context) {        this.mContext = context;    }        public void setListData(List<NewsInfo.ResultBean.DataBean> list) {        this.mDataBeanList = list;        //一定要调用        notifyDataSetChanged();    }    @NonNull    @Override    public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {        //加载布局文件        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.new_item, null);        return new MyHolder(view);    }    @Override    public void onBindViewHolder(@NonNull MyHolder holder, int position) {        NewsInfo.ResultBean.DataBean dataBean = mDataBeanList.get(position);        //设置数据        holder.author_name.setText(dataBean.getAuthor_name());        holder.title.setText(dataBean.getTitle());        holder.date.setText(dataBean.getDate());        //加载图片        Glide.with(mContext).load(dataBean.getThumbnail_pic_s()).error(R.mipmap.img_error).into(holder.thumbnail_pic_s);    }    @Override    public int getItemCount() {        return mDataBeanList.size();    }    static class MyHolder extends RecyclerView.ViewHolder {        ImageView thumbnail_pic_s;        TextView title;        TextView author_name;        TextView date;        public MyHolder(@NonNull View itemView) {            super(itemView);            thumbnail_pic_s = itemView.findViewById(R.id.thumbnail_pic_s);            title = itemView.findViewById(R.id.title);            author_name = itemView.findViewById(R.id.author_name);            date = itemView.findViewById(R.id.date);        }    }}
  • 编写new_item.xml 新闻布局文件
<?xml version="1.0" encoding="utf-8"?><androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content">    <androidx.appcompat.widget.LinearLayoutCompat        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_margin="10dp">        <ImageView            android:id="@+id/thumbnail_pic_s"            android:layout_width="90dp"            android:layout_height="100dp"            android:scaleType="centerCrop"            android:class="lazy" data-src="@mipmap/ic_launcher" />        <androidx.appcompat.widget.LinearLayoutCompat            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_marginLeft="10dp"            android:orientation="vertical">            <TextView                android:id="@+id/title"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="10dp"                android:text="静音车厢”绝非一劳永逸,考验仍在"                android:textColor="#333"                android:textSize="16sp"                android:singleLine="true"                android:textStyle="bold" />            <TextView                android:id="@+id/author_name"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="10dp"                android:text="每日看点快看" />            <TextView                android:id="@+id/date"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="10dp"                android:text="2023-10-17 08:34:00" />        </androidx.appcompat.widget.LinearLayoutCompat>    </androidx.appcompat.widget.LinearLayoutCompat></androidx.appcompat.widget.LinearLayoutCompat>
  • 新闻NewsActivity实现过程
public class NewsActivity extends AppCompatActivity {    private static String URL = "http://v.juhe.cn/toutiao/index?key=b6527106fa4e66a226b5b923d2a8b711&type=yule";    private RecyclerView mRecyclerView;    private NewsListAdapter mNewsListAdapter;    private Handler mHandler = new Handler(Looper.getMainLooper()) {        @Override        public void handleMessage(@NonNull Message msg) {            if (msg.what == 100) {                String data = (String) msg.obj;                NewsInfo newsInfo = new Gson().fromJson(data, NewsInfo.class);                //刷新适配器                if (null!=mNewsListAdapter){                    mNewsListAdapter.setListData(newsInfo.getResult().getData());                }            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_news);        //初始化控件        mRecyclerView = findViewById(R.id.recyclerView);        //初始化适配器        mNewsListAdapter = new NewsListAdapter(NewsActivity.this);        //绑定适配器        mRecyclerView.setAdapter(mNewsListAdapter);        getHttpData();    }    private void getHttpData() {        //创建OkHttpClient对象        OkHttpClient okHttpClient = new OkHttpClient();        //构构造Request对象        Request request = new Request.Builder()                .url(URL)                .get()                .build();        //通过OkHttpClient和Request对象来构建Call对象        Call call = okHttpClient.newCall(request);        //通过Call对象的enqueue(Callback)方法来执行异步请求        call.enqueue(new Callback() {            @Override            public void onFailure(@NonNull Call call, @NonNull IOException e) {                Log.d("-------------", "onFailure: "+e.toString());            }            @Override            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {//                Log.d("--------------", "onResponse: " + response.body().string());                String data = response.body().string();                Message message = new Message();                //指定一个标识符                message.what = 100;                message.obj = data;                mHandler.sendMessage(message);            }        });    }}
  • 最终效果
    在这里插入图片描述

来源地址:https://blog.csdn.net/jky_yihuangxing/article/details/133869285

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android网络编程,调用API获取网络数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android网络编程,调用API获取网络数据

实现步骤: 阅读API接口使用文档使用okhttp 获取网络数据使用 gson将json数据转为数据实体类安装GsonFormatPlus插件使用glide加载网络图片 build.gradle下导入相关依赖 //数据解析
Android网络编程,调用API获取网络数据
2023-12-23

Android网络编程之获取网络上的Json数据实例

为要获取网络上的Json所以需要服务器端提供的支持。 一、创建服务器端: 服务器端项目结构:服务器端运行效果图:第一步:创建业务所需的JavaBean代码如下: package com.jph.sj.model; import jav
2022-06-06

Python网络爬虫之获取网络数据

本文介绍了Python中用于获取网络数据的重要工具之一——Requests库,详细讲解了Requests库的基本使用方法、请求方法、请求头、请求参数、Cookies、Session等内容,并结合实例代码展示了Requests库的应用场景
2023-05-18

Android编程简单获取网络上的图片

本文实例讲述了Android编程简单获取网络上的图片的方法。分享给大家供大家参考,具体如下: 要获取网络上的图片,首先得有网络的访问权限,这个不再写了,以前的文章中写过,还有布局方式不再写了,就是写也是一个简单的布局,没有多大意义,直接上核
2022-06-06

Android编程获取网络时间实例分析

本文实例讲述了Android编程获取网络时间的方法。分享给大家供大家参考,具体如下: 在网上看到的最常见的方式有:public static void main(String[] args) throws Exception {URL ur
2022-06-06

Python网络爬虫之如何获取网络数据

本篇内容介绍了“Python网络爬虫之如何获取网络数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用 Python 获取网络数据使用 P
2023-07-06

python获取网络数据的方法

本篇内容主要讲解“python获取网络数据的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python获取网络数据的方法”吧!Retrieving Data over HTTPPython
2023-06-14

Android Studio获取网络JSON数据并处理的方法

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下1、需要的网络JSON数据 2、数据实现类package chenglong.activitytest.pengintohospital.entity;im
2023-05-30

Android使用线程获取网络图片的方法

本文为大家分享了Android使用线程获取网络图片的具体代码,供大家参考,具体内容如下 AndroidManifest.xml
2022-06-06

如何使用linux网络编程用到的网络函数

本篇内容主要讲解“如何使用linux网络编程用到的网络函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用linux网络编程用到的网络函数”吧!一.概念介绍网络程序分为服务端程序和客户端程
2023-06-09

android利用消息机制获取网络图片

在前面都写到用AsyncTask来获取网络中的图片。其实利用消息机制也能获取网络中的图片,而且本人感觉用消息机制还是挺简单的。消息机制的图解: 下面就用看代码来理解上面的图片。布局:activity_main.xml
2022-06-06

Nodejs获取网络数据并生成Excel表格

Nodejs的模版中有很多关于Excel表格的,这里我简单介绍一下我使用过的一个模块的使用。 首先,先安装Excel的模块: npm install node-xlsx 然后,在代码中引入模块: var xlsx = require('no
2022-06-04

flutter中的网络请求数据获取详解

这篇文章主要为大家介绍了flutter中的网络请求数据获取示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-11

linux网络编程用到的网络函数详解用和使用示例

一.概念介绍网络程序分为服务端程序和客户端程序。服务端即提供服务的一方,客户端为请求服务的一方。但实际情况是有些程序的客户端、服务器端角色不是这么明显,即互为客户端和服务端。我们编写网络程序时,一般是基于TCP协议或者UDP协议进行网络通信
2022-06-04

python网络编程调用recv函数完整接收数据的三种方法

最近在使用python进行网络编程开发一个通用的tcpclient测试小工具。在使用socket进行网络编程中,如何判定对端发送一条报文是否接收完成,是进行socket网络开发必须要考虑的一个问题。这里,简要介绍一下判别数据接收接收完成常用
2022-06-04

PHP 函数的网络编程高级应用

如何利用 php 函数进行高级网络编程?构建 restful api:可通过函数处理get/post/put/delete请求,使用header()/json_encode()返回json响应。其它高级应用:实现web套接字、异步请求、文件
PHP 函数的网络编程高级应用
2024-04-22

网络爬虫逆向(企名片,创业项目数据获取)

文章目录 网页解析使用Python代码调用JS代码进行数据抓取 目标网址:https://www.qimingpian.com/finosda/project/pinvestment 抓取目标: 创业项目名称业务行业领域地区投资
2023-08-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录