发布时间:2025-06-24 16:26:59 作者:北方职教升学中心 阅读量:470
文章目录
- 1. 实现步骤
- 2. 开发环境
- 3. 运行效果图
- 4.视频教程
1. 实现步骤
- 阅读API接口使用文档
- 使用okhttp 获取网络数据
- 使用 gson将json数据转为数据实体类
- 安装GsonFormatPlus插件
- 使用glide加载网络图片
2. 开发环境
- 开发工具:Androidstudio
- 开发语言:Java
- 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.LinearLayoutCompatxmlns: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.Toolbarandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/teal_200"app:titleTextColor="@color/white"app:title="新闻列表"/><androidx.recyclerview.widget.RecyclerViewandroid: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实体类
publicclassNewsInfo{privateStringreason;privateResultBeanresult;privateIntegererror_code;publicStringgetReason(){returnreason;}publicvoidsetReason(Stringreason){this.reason =reason;}publicResultBeangetResult(){returnresult;}publicvoidsetResult(ResultBeanresult){this.result =result;}publicIntegergetError_code(){returnerror_code;}publicvoidsetError_code(Integererror_code){this.error_code =error_code;}publicstaticclassResultBean{privateStringstat;privateList<DataBean>data;privateStringpage;privateStringpageSize;publicStringgetStat(){returnstat;}publicvoidsetStat(Stringstat){this.stat =stat;}publicList<DataBean>getData(){returndata;}publicvoidsetData(List<DataBean>data){this.data =data;}publicStringgetPage(){returnpage;}publicvoidsetPage(Stringpage){this.page =page;}publicStringgetPageSize(){returnpageSize;}publicvoidsetPageSize(StringpageSize){this.pageSize =pageSize;}publicstaticclassDataBean{privateStringuniquekey;privateStringtitle;privateStringdate;privateStringcategory;privateStringauthor_name;privateStringurl;privateStringthumbnail_pic_s;privateStringis_content;privateStringthumbnail_pic_s02;publicStringgetUniquekey(){returnuniquekey;}publicvoidsetUniquekey(Stringuniquekey){this.uniquekey =uniquekey;}publicStringgetTitle(){returntitle;}publicvoidsetTitle(Stringtitle){this.title =title;}publicStringgetDate(){returndate;}publicvoidsetDate(Stringdate){this.date =date;}publicStringgetCategory(){returncategory;}publicvoidsetCategory(Stringcategory){this.category =category;}publicStringgetAuthor_name(){returnauthor_name;}publicvoidsetAuthor_name(Stringauthor_name){this.author_name =author_name;}publicStringgetUrl(){returnurl;}publicvoidsetUrl(Stringurl){this.url =url;}publicStringgetThumbnail_pic_s(){returnthumbnail_pic_s;}publicvoidsetThumbnail_pic_s(Stringthumbnail_pic_s){this.thumbnail_pic_s =thumbnail_pic_s;}publicStringgetIs_content(){returnis_content;}publicvoidsetIs_content(Stringis_content){this.is_content =is_content;}publicStringgetThumbnail_pic_s02(){returnthumbnail_pic_s02;}publicvoidsetThumbnail_pic_s02(Stringthumbnail_pic_s02){this.thumbnail_pic_s02 =thumbnail_pic_s02;}}}}
- 创建新闻NewsListAdapter适配器
publicclassNewsListAdapterextendsRecyclerView.Adapter<NewsListAdapter.MyHolder>{privateList<NewsInfo.ResultBean.DataBean>mDataBeanList =newArrayList<>();privateContextmContext;publicNewsListAdapter(Contextcontext){this.mContext =context;}/** * 为adapter 设置数据源 */publicvoidsetListData(List<NewsInfo.ResultBean.DataBean>list){this.mDataBeanList =list;//一定要调用notifyDataSetChanged();}@NonNull@OverridepublicMyHolderonCreateViewHolder(@NonNullViewGroupparent,intviewType){//加载布局文件Viewview =LayoutInflater.from(parent.getContext()).inflate(R.layout.new_item,null);returnnewMyHolder(view);}@OverridepublicvoidonBindViewHolder(@NonNullMyHolderholder,intposition){NewsInfo.ResultBean.DataBeandataBean =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);}@OverridepublicintgetItemCount(){returnmDataBeanList.size();}staticclassMyHolderextendsRecyclerView.ViewHolder{ImageViewthumbnail_pic_s;TextViewtitle;TextViewauthor_name;TextViewdate;publicMyHolder(@NonNullViewitemView){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.LinearLayoutCompatxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><androidx.appcompat.widget.LinearLayoutCompatandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="10dp"><ImageViewandroid:id="@+id/thumbnail_pic_s"android:layout_width="90dp"android:layout_height="100dp"android:scaleType="centerCrop"android:src="@mipmap/ic_launcher"/><androidx.appcompat.widget.LinearLayoutCompatandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="10dp"android:orientation="vertical"><TextViewandroid: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"/><TextViewandroid:id="@+id/author_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:text="每日看点快看"/><TextViewandroid: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实现过程
publicclassNewsActivityextendsAppCompatActivity{privatestaticStringURL="http://v.juhe.cn/toutiao/index?key=b6527106fa4e66a226b5b923d2a8b711&type=yule";privateRecyclerViewmRecyclerView;privateNewsListAdaptermNewsListAdapter;privateHandlermHandler =newHandler(Looper.getMainLooper()){@OverridepublicvoidhandleMessage(@NonNullMessagemsg){if(msg.what ==100){Stringdata =(String)msg.obj;NewsInfonewsInfo =newGson().fromJson(data,NewsInfo.class);//刷新适配器if(null!=mNewsListAdapter){mNewsListAdapter.setListData(newsInfo.getResult().getData());}}}};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_news);//初始化控件mRecyclerView =findViewById(R.id.recyclerView);//初始化适配器mNewsListAdapter =newNewsListAdapter(NewsActivity.this);//绑定适配器mRecyclerView.setAdapter(mNewsListAdapter);getHttpData();}privatevoidgetHttpData(){//创建OkHttpClient对象OkHttpClientokHttpClient =newOkHttpClient();//构构造Request对象Requestrequest =newRequest.Builder().url(URL).get().build();//通过OkHttpClient和Request对象来构建Call对象Callcall =okHttpClient.newCall(request);//通过Call对象的enqueue(Callback)方法来执行异步请求call.enqueue(newCallback(){@OverridepublicvoidonFailure(@NonNullCallcall,@NonNullIOExceptione){Log.d("-------------","onFailure: "+e.toString());}@OverridepublicvoidonResponse(@NonNullCallcall,@NonNullResponseresponse)throwsIOException{// Log.d("--------------", "onResponse: " + response.body().string());Stringdata =response.body().string();Messagemessage =newMessage();//指定一个标识符message.what =100;message.obj =data;mHandler.sendMessage(message);}});}}
3. 运行效果图
4.视频教程
- 视频教程: https://www.bilibili.com/video/BV1Qp4y1T76S/?vd_source=984bb03f768809c7d33f20179343d8c8