我们找到一个简单的接口 用用RecyclerView请求网络数据展示出来
过程中要注意细节 导两个包 gson和Imageloder 添加网络请求权限 和 自定义application中的name
现在开始上干货吧!
======================================MianActivity===============================
package test.com.a20171008;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.io.Reader;
import test.com.a20171008.bran.Da;
public class MainActivity extends AppCompatActivity {
RecyclerView rv;
Da da;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件 创建数据源
rv= (RecyclerView) findViewById(R.id.rv);
initRV();
}
public void initRV(){
initData();
//布局管理器
LinearLayoutManager manager=new LinearLayoutManager(this);
rv.setLayoutManager(manager);
}
public void initData(){
new AsyncTask<String,String,String>(){
@Override
protected String doInBackground(String... strings) {
Reader reader=NetUtils.getNet("http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=one");
Gson gson=new Gson();
da=gson.fromJson(reader, Da.class);
return null;
}
@Override
protected void onPostExecute(String s) {
MyAdapter adapter=new MyAdapter();
rv.setAdapter(adapter);
super.onPostExecute(s);
}
}.execute();
}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=View.inflate(MainActivity.this,R.layout.one_item,null);
MyViewHolder holder=new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv1.setText(da.getData().get(position).getTitle());
ImageLoader.getInstance().displayImage(da.getData().get(position).getImage_url(),holder.iv1);
}
@Override
public int getItemCount() {
return da==null?0:da.getData().size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView tv1;
ImageView iv1;
public MyViewHolder(View itemView) {
super(itemView);
tv1=itemView.findViewById(R.id.tv1);
iv1=itemView.findViewById(R.id.iv1);
}
}
}
}
==============================NetUtils==================================================
public class NetUtils {
public NetUtils() {
super();
}
public static Reader getNet(String path){
Reader reader=null;
try {
URL url=new URL(path);
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
int code=conn.getResponseCode();
if (code==200){
InputStream is=conn.getInputStream();
reader=new InputStreamReader(is);
}
} catch (java.io.IOException e) {
e.printStackTrace();
}
return reader;
}
}
====================================MyApp=====================================
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
File file = this.getCacheDir();
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
this)
// max width, max height,即保存的每个缓存文件的最大长宽
.memoryCacheExtraOptions(480, 800)
// 线程池内加载的数量
.threadPoolSize(3)
// 线程优先级
.threadPriority(Thread.NORM_PRIORITY - 2)
.defaultDisplayImageOptions(options)
// You can pass your own memory cache implementation你可以通过自己的内存缓存实现
// .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))
// .memoryCacheSize(2 * 1024 * 1024)
//硬盘缓存50MB
.diskCacheSize(50 * 1024 * 1024)
//将保存的时候的URI名称用MD5
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
// 加密
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())//将保存的时候的URI名称用HASHCODE加密
.tasksProcessingOrder(QueueProcessingType.LIFO)
.diskCacheFileCount(100) //缓存的File数量
.diskCache(new UnlimitedDiscCache(file))// 自定义缓存路径
// .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
// .imageDownloader(new BaseImageDownloader(context, 5 * 1000,
// 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间
.writeDebugLogs() // Remove for release app
.build();
ImageLoader.getInstance().init(config);
}
}