网络请求框架-Volley

Volley框架特点:

适用于频繁请求而每次请求数据量不会很大;

在请求的基础上做了磁盘缓存;

防止多次相同请求浪费资源;

提供String、Json、图片异步下载;

网络请求的优先级处理;

图片请求无需担心生命周期问题。

扫描二维码关注公众号,回复: 3023596 查看本文章

创建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);
        }
    }

}

 

 

猜你喜欢

转载自blog.csdn.net/dream_miracle/article/details/80180897