Volley之Get
来源:互联网 发布:orancle in优化 编辑:程序博客网 时间:2024/05/29 13:57
声明:
该文是参照慕客网视频和网友的博客所整理,参考链接如下。
http://www.imooc.com/learn/468
http://www.cnblogs.com/caobotao/p/5071658.htm
volley的英文意思为'群发'、'迸发'。Volley是2013年谷歌官方发布的一款Android平台上的网络通信库。Volley非常适合一些数据量不大,但需要频繁通信的网络操作。使用Volley进行网络开发可以使我们的开发效率得到很大的提升,而且性能的稳定性也比较高。但是Volley不适用于文件的上传下载操作。
Volley的特点:
1 使网络通信更快,更简单,更健壮;2 Get/Post网络请求及网络图像的高效率异步请求; 3 可以对网络请求的优先级进行排序处理;4 可以进行网络请求的缓存;5 可以取消多级别请求;6 可以和Activity生命周期联动。
为什么要使用Volley?
功能上: 高效的Get/Post方式的数据请求交互; 网络图片的加载和缓存过程简单化。其他: 谷歌官方推出的,比较权威; 性能很稳定、强劲。
关于Volley
1.Volley的网络请求队列建立与取消队列请求
使用Volley需要建立一个全局的请求队列,这样我们就可以将一个请求加入到这个全局队列中,并可以管理整个APP的所有请求,包括取消一个或所有的请求。
2.Volley的Get和Post请求方式的使用
Volley的Get和Post请求方式其实是对Android原生Get和Post请求方式进行了二次封装,对效率等进行优化。在使用Get和Post请求方式之前,我们要确定所请求的数据返回什么对象。
Volley自带了三种返回类型:
StringRequest:主要使用在对请求数据的返回类型不确定的情况。StringRequest涵盖了JsonObjectRequest和JsonArrayRequest。JsonObjectRequest:当确定请求数据的返回类型为JsonObject时使用。JsonArrayRequest:当确定请求数据的返回类型为JsonArray时使用。
3.Volley与Activity生命周期的联动
简单来说就是Volley中的请求是与Activity的生命周期进行关联。这样可以在Android销毁时关闭Volley的请求,防止请求在后台运行造成内存溢出等情况发生。与Activity生命周期进行联动时需要设置Tag标签,因为取消请求需要在请求队列中通过Tag标签进行查找,在Activity的onStop中执行取消请求的操作。
使用Volley前需要往项目中导入Volley的jar包
jar包下载地址:[volley.jar]
Volley实例一:使用Get方式请求数据返回StringRequest对象
当想返回String类型的请求结果数据或者不清楚返回什么类型时可以用StringRequest对象。
使用Get请求方式返回一个String类型的手机归属地信息
MyApplication.java
import android.app.Application;import com.android.volley.RequestQueue;import com.android.volley.toolbox.Volley;public class MyApplication extends Application { public static RequestQueue queue; @Override public void onCreate() { super.onCreate(); queue = Volley.newRequestQueue(getApplicationContext()); } /** * 获取请求队列 */ public static RequestQueue getHttpQueue(){ return queue; }}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.learning.volleydemo"> <!-- 添加网络操作权限 --> <uses-permission android:name="android.permission.INTERNET"/> <!-- 注册自定义的Application:android:name=".MyApplication" --> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" android:name=".MyApplication"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
MainActivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); volleyGet(); } /** * new StringRequest(int method,String url,Listener listener,ErrorListener errorListener) * method:请求方式,Get请求为Method.GET,Post请求为Method.POST * url:请求地址 * listener:请求成功后的回调 * errorListener:请求失败的回调 */ private void volleyGet() { String url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15233333333"; StringRequest request = new StringRequest(Method.GET, url, new Listener<String>() { @Override public void onResponse(String s) {//s为请求返回的字符串数据 Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show(); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Toast.makeText(MainActivity.this,volleyError.toString(),Toast.LENGTH_LONG).show(); } }); //设置请求的Tag标签,可以在全局请求队列中通过Tag标签进行请求的查找 request.setTag("testGet"); //将请求加入全局队列中 MyApplication.getHttpQueues().add(request); }}
运行结果:
Volley实例二:使用Get方式请求数据返回JsonObjectRequest对象
由于我们知道这个请求返回的是Json格式的数据,所以我们可以直接使用JsonObjectRequest作为请求返回结果对象。
使用Get请求方式返回一个Json格式的IP地址信息,修改上一个例子中的MainActivity.java文件即可。
MainActivity.java
/** * new JsonObjectRequest(int method,String url,JsonObject jsonObject,Listener listener,ErrorListener errorListener) * method:请求方式,Get请求为Method.GET,Post请求为Method.POST * url:请求地址 * JsonObject:Json格式的请求参数。如果使用的是Get请求方式,请求参数已经包含在url中,所以可以将此参数置为null * listener:请求成功后的回调 * errorListener:请求失败的回调 */private void volleyGet() { String url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=218.4.255.255"; JsonObjectRequest request = new JsonObjectRequest(Method.GET, url, null, new Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) {//jsonObject为请求返回的Json格式数据 Toast.makeText(MainActivity.this,jsonObject.toString(),Toast.LENGTH_LONG).show(); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Toast.makeText(MainActivity.this,volleyError.toString(),Toast.LENGTH_LONG).show(); } }); //设置请求的Tag标签,可以在全局请求队列中通过Tag标签进行请求的查找 request.setTag("testGet"); //将请求加入全局队列中 MyApplication.getHttpQueues().add(request);}
Volley实例三:使用Get方式请求数据返回JsonArrayRequest对象
使用Get请求方式返回一个Json格式的IP地址信息,修改上一个例子中的MainActivity.java文件即可。
MainActivity.java
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.Toast;import com.android.volley.Response;import com.android.volley.VolleyError;import com.android.volley.toolbox.JsonArrayRequest;import org.json.JSONArray;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); volley_Get(); } public void volley_Get() { String url = "http://192.168.1.108:8080/json/JsonServlet"; JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) {//请求响应返回的JSONArray Log.i("onResponse",response.toString()); Toast.makeText(MainActivity.this, response.toString(), Toast.LENGTH_SHORT).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("onResponse",error.toString()); Toast.makeText(MainActivity.this,error.toString(), Toast.LENGTH_SHORT).show(); } }); request.setTag("abcGet"); MyApplication.getHttpQueue().add(request); }}
由于没有在网上找到返回JsonArray的api,所以自己本地创建一个
打开eclipse创建一个Dynamic Web Project,在src中创建三个类JsonService.java、JsonServlet.java、Person.java。
JsonService.java
import java.util.ArrayList;import java.util.List;public class JsonService { public static List<Person> getListPerson() { List<Person> mLists = new ArrayList<Person>(); mLists.add(new Person("张三", "北京", 20)); mLists.add(new Person("李四", "上海", 30)); mLists.add(new Person("王五", "深圳", 35)); return mLists; }}
JsonServlet.java
import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/JsonServlet")public class JsonServlet extends HttpServlet { private static final long serialVersionUID = 1L; public JsonServlet() { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); List<Person> persons = JsonService.getListPerson(); StringBuffer sb = new StringBuffer(); sb.append('['); for (Person person : persons) { sb.append('{').append("\"name\":") .append("\"" + person.getName() + "\"").append(","); sb.append("\"city\":").append("\"" + person.getCity() + "\"") .append(","); sb.append("\"age\":").append(person.getAge()); sb.append('}').append(","); } sb.deleteCharAt(sb.length() - 1); sb.append(']'); out.write(new String(sb)); out.flush(); out.close(); }}
Person.java
public class Person { private String name; private String city; private int age; public Person(String name, String city, int age) { super(); this.name = name; this.city = city; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", city=" + city + ", age=" + age + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
配置服务器后运行结果:
注意:
在浏览器中打开的时候,地址可以是http://localhost:8080/json/JsonServlet或者是http://192.168.1.108:8080/json/JsonServlet但是在android访问时,只能是http://192.168.1.108:8080/json/JsonServlet同时需要注意自己主机IP地址是变化的,连接报错时,一定就是IP地址有问题。
此时运行android studio后效果:
- Volley之Get
- volley 之get、put、post、delete
- Volley框架之使用GET取得Cookie
- Android:Volley解析(一)之GET、POST请求篇
- Android Volley解析(一)之GET、POST请求篇
- Android Volley解析(一)之GET、POST请求篇
- Android Volley解析(一)之GET、POST请求篇
- Android Volley解析(一)之GET、POST请求篇
- 菜鸟之伤-Volley get请求数据乱码问题
- Android Volley解析(一)之GET、POST请求篇
- Android Volley解析(一)之GET、POST请求篇
- volley get网络请求
- Volley请求,GET+POST
- Volley框架GET POST请求
- volley的用法(get请求)
- volley网络请求,get/post
- volley的get,post请求
- volley 的get post 请求
- 揭秘4大炒房模式 房价就是这么被炒起来的
- HDU 1995 汉诺塔V 和 HDU 1996 汉诺塔VI
- css3 box-sizing属性
- 郑轻OJ/ ZZULIOJ 1053 正弦函数
- Android 应用启动速度优化之 Systrace 的使用
- Volley之Get
- ionic之搜索框浮动在轮播图片上
- HDU-5752 Sqrt Bo(处理字符串)
- BCNF范式(匡正的第三范式)、第四范式和第五范式
- Linux下段错误的原因以及调试方法
- svn 本地仓库使用
- 远程调试 Azure Web App
- simhash与重复信息识别(二)
- JAVA多线程的个人理解