首先在xml文件上界面布局 这边采用LinearLayour布局,首先添加TextView控件来显示标题,第二采用RecyclerView列表控件来实现内容的显示,第三添加SwipeRefreshLayout控件实现内容的刷新。在添加RecyclerView列表控件时,需要在Build.gradle文件中下载
implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:support-v4:28.0.0' implementation 'com.android.support:appcompat-v7:28.0.0'代码如下
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="微博实时热点" android:layout_gravity="center" android:textSize="30sp"/> <androidx.swiperefreshlayout.widget.SwipeRefreshLayout android:id="@+id/s1" android:layout_width="wrap_content" android:layout_height="wrap_content"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/r1" android:layout_width="match_parent" android:layout_height="wrap_content"/> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> </LinearLayout>界面截图 第二步:在Mainactivity.java完成功能的实现 第一步:绑定id 第二步:数据解析 定义一个类DataModel.class
public class DataModel implements Serializable { }使用快捷键(Alt+s)粘贴全部过去数据,之后一直点击OK 在网络请求之前在AndroidManifest.xml文件中添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>第三步:完成网络的请求 定义一个请求接口
public void requestDate() { }在该接口进行网络请求
public void requestDate() { String url="http://api.tianapi.com/txapi/weibohot/index? key=a9fa9ae02ea18c7623fc94a04c1c0cf8"; OkHttpClient okHttpClient=new OkHttpClient(); final Request request=new Request.Builder() .url(url) .get() .build(); Call call=okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String result=response.body().string(); Gson gson=new Gson(); final DateModel model=gson.fromJson(result,DateModel.class); //切换线程 runOnUiThread(new Runnable() { @Override public void run() { refreshDate(model); } }); } }); }第三步:完成列表的相关操作 首先定义列表的布局,在layou下创建一个xml文件,实现布局 这边采用LinearLayour布局,添加TextView控件来显示内容
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/t1" android:padding="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="10dp" android:textSize="20sp" android:text="第一个"/> </LinearLayout>第二步:定义一个类来实现列表的功能
public class Adapter2 { }在该类中继承RecyclerView.Adapter
public class Adapter2 extends RecyclerView.Adapter { }之后把鼠标移至Adapter2,在键盘按Alt+Enter 选择第一个,最后选择ok 在倒数第二个花括号中定义一个类
public class ViewHolder extends RecyclerView.ViewHolder { }之后把鼠标移至RecyclerView.ViewHolder,在键盘按Alt+Enter,选择第一个,按确定 在该类中填写控件的id
public class ViewHolder extends RecyclerView.ViewHolder { private TextView t1;//文本框id public ViewHolder(@NonNull View itemView) { super(itemView); t1=itemView.findViewById(R.id.t1);//绑定id } }将Json的数据放进列表 更改当前的值 绑定xml ,并返回当前的值 将获取到的JSON数据传递到指定的控件 返回数据的长度 第四步:在MainActivity.java文件,输入代码选择列表显示的样式并提取解析后的相关数据
private void refreshDate(DateModel model) { if(model==null||model.getNewslist()==null) { return; } Adapter2 adapter=new Adapter2(model.getNewslist());//把全部数据传递给列表 r1.setAdapter(adapter);//传递数值过去 s1.setRefreshing(false);//停止刷新 Toast.makeText(MainActivity.this, "更新完成" , Toast.LENGTH_SHORT).show();//提示 }第五步:完成自动刷新数据 首先定义一个Handler和Timer 第二:定义两个接口
第一个:定时器接口,发送信息
public void startMyTimer()//启动定时器 一分钟自动更新一次内容 { } public void startMyTimer()//启动定时器 一分钟自动更新一次内容 { timer=new Timer(); timer.schedule(new TimerTask() { @Override public void run() { mhandler.sendEmptyMessage(0x22); } }, 0, 60000); }第二个接口接收信息
public void startFlicker() { } public void startFlicker() { mhandler=new Handler() { @Override public void handleMessage(Message msg) { if(msg.what==0x22) { requestDate();//请求数据 } super.handleMessage(msg); } }; startMyTimer();//启动定时器 }最后启动该接口 第六步:实现下拉列表更新数据
s1.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { new Handler().postDelayed(new Runnable() { @Override public void run() { requestDate();//请求数据 } }, 2000);//实现2秒完成更新 } });该项目采用了两种来获取数据,第一种:每60秒自动刷新获取数据;第二种:下拉刷新获取数据,如果需要在真机使用软件,请在(AndroidManifest.xml)中的application输入以下代码,防止真机对网络请求不了
android:usesCleartextTraffic="true"下面是本项目的源代码 https://download.csdn.net/download/Scxioi0/12910679