android之网络请求 -- 获取RecyclerView的列表项
示意图,网络请求的地址,插件及依赖
示意图:
网络请求的地址:
http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1
插件:GsonFormat,用来解析Gson,在设置中的Plugins下载
依赖:在解析图片地址时,我用的是Glide,要添加它的依赖。
implementation ‘com.github.bumptech.glide:glide:4.3.1’
annotationProcessor ‘com.github.bumptech.glide:compiler:4.3.1’
代码架构
- 主界面:MainActivity.java , activity_main.xml
- RecyclerTask.java ,这个异步任务得到从网络上请求到的Json字符串。
- NetworkAdapter.java , 这个适配器用来展示ui界面。
- networkitem.xml, 适配器中每一项的布局情况。
- NetworkJson.java, 这个就是网络上获得的Json的Bean类。就是用GsonFormat来解析从网络上得到的JSON字符串,它可以用插件自动生成。
- 顺便说一下ActivityManifest中,首先添加一个权限,
<uses-permission android:name="android.permission.INTERNET" />
还要在Application下写一句话:android:networkSecurityConfig="@xml/network_security_config"
这是关于网络安全的,必须写!!!所以还需要写network_security_config.xml
代码内容
一些比较细节的地方或需要注意的地方我都写了注释
MainActivity.java
package com.example.myapplication;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapplication.Adapter.NetworkAdapter;
import com.example.myapplication.Bean.NetworkJson;
import com.example.myapplication.Task.RecyclerTask;
import java.util.List;
public class MainActivity extends AppCompatActivity implements RecyclerTask.NetBeanListener {
private RecyclerView recycler;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recycler = findViewById(R.id.recycler);
//findViewById(R.id.button).setOnClickListener(this);
RecyclerTask task = new RecyclerTask();
task.setNetBeanListener(this);
//开始线程
task.execute();
mHandler = new Handler();
//如果不用Handler,直接获取的话, 你就没有给asyncTask一些时间来得到List<NetworkJson.DataBean>这个数组
//那么你传给适配器的数组就会为空,就会报错
mHandler.postDelayed(run, 2000);
}
private List<NetworkJson.DataBean> mDataBeanList;
@Override
public void getNetBean(List<NetworkJson.DataBean> bean) {
mDataBeanList = bean;
Log.d("bean", "bean -- >" + mDataBeanList.get(0).getId());
}
public Runnable run = new Runnable() {
@Override
public void run() {
LinearLayoutManager llm = new LinearLayoutManager(MainActivity.this, RecyclerView.VERTICAL, false);
recycler.setLayoutManager(llm);
recycler.setItemAnimator(new DefaultItemAnimator());
recycler.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(@NonNull Rect outRect, int itemPosition, @NonNull RecyclerView parent) {
super.getItemOffsets(outRect, itemPosition, parent);
outRect.bottom = 5;
outRect.left = 5;
outRect.right = 5;
outRect.top = 5;
}
});
NetworkAda