Volley框架特点:
适用于频繁请求而每次请求数据量不会很大;
在请求的基础上做了磁盘缓存;
防止多次相同请求浪费资源;
提供String、Json、图片异步下载;
网络请求的优先级处理;
图片请求无需担心生命周期问题。
创建Android项目配置volley部件,通过网络访问获取数据,对网络访问的数据(JSON)进行解析。
1、新建一个project:
2、将volley的gradle依赖引入:
compile group: 'com.mcxiaoke.volley', name: 'library', version: '1.0.19'
经过编译后,出现volley的jar包
3、引入网络访问权限:
<uses-permission android:name="android.permission.INTERNET"/>
4、网络请求
package com.example.myvolleytest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.invoke.MethodType;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
ArrayList<UserModel.DataBean> userList;
MyListAdapter listAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initAdapter();
}
private void initAdapter() {
RecyclerView recyclerView = findViewById(R.id.re_list);
LinearLayoutManager manager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(manager);
userList = new ArrayList<>();
listAdapter = new MyListAdapter(userList);
recyclerView.setAdapter(listAdapter);
}
private void initData() {
String url = "http://172.16.10.50:18080/lysd-service/api/v1/parcels/newest?page=1&size=10";
RequestQueue mRequestQueue = Volley.newRequestQueue(this);
JsonObjectRequest req = new JsonObjectRequest(url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Gson gson = new Gson();
userList.clear();
ArrayList<UserModel.DataBean> list= gson.fromJson(response.get("data").toString(),new TypeToken<List<UserModel.DataBean>>(){}.getType());
userList.addAll(list);
listAdapter.notifyDataSetChanged();
Log.e("onResponse: ",userList.get(1).getDescription() );
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("onResponse: ", "error");
}
});
mRequestQueue.add(req);
}
}
5、适配器
package com.example.myvolleytest;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by hbl on 2018/4/23.
*/
public class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.ViewHolder> {
ArrayList<UserModel.DataBean> listData;
public MyListAdapter(ArrayList<UserModel.DataBean> listData) {
this.listData = listData;
}
@Override
public MyListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyListAdapter.ViewHolder holder, int position) {
holder.textView.setText(listData.get(position).getName());
}
@Override
public int getItemCount() {
return listData.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.tv);
}
}
}