volley get请求带参数同时支持多少个请求

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!用户“xzx”对问题“如何使用Volley和HttpEntity工作POST多部分请求?”的回答 - 问答 - 云+社区 - 腾讯云云+社区首页这不是一个真正的问题,但是,我希望在此分享我的一些工作代码供您参考。正如我们所知道的那样,HttpEntity从API22中弃用并且自API23以后一并删除。目前,我们无法再访问(404)。因此,以下是我的工作示例代码,用于使用Volley并且没有HttpEntity的POST Multipart Request。它的工作,经过测试Asp.Net Web API。当然,代码也许只是一个基本的示例,它会发布两个存在的可绘制文件,对于所有情况来说也不是最好的解决方案,也不是很好的调整。MultipartActivity.java:package com.example.
import android.app.A
import android.content.C
import android.graphics.B
import android.graphics.drawable.BitmapD
import android.graphics.drawable.D
import android.os.B
import android.support.v4.content.ContextC
import android.view.M
import android.view.MenuI
import android.widget.T
import com.android.volley.NetworkR
import com.android.volley.R
import com.android.volley.VolleyE
import java.io.ByteArrayInputS
import java.io.ByteArrayOutputS
import java.io.DataOutputS
import java.io.IOE
public class MultipartActivity extends Activity {
private final Context context =
private final String twoHyphens = &--&;
private final String lineEnd = &\r\n&;
private final String boundary = &apiclient-& + System.currentTimeMillis();
private final String mimeType = &multipart/form-boundary=& +
private byte[] multipartB
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multipart);
byte[] fileData1 = getFileDataFromDrawable(context, R.drawable.ic_action_android);
byte[] fileData2 = getFileDataFromDrawable(context, R.drawable.ic_action_book);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
// the first file
buildPart(dos, fileData1, &ic_action_android.png&);
// the second file
buildPart(dos, fileData2, &ic_action_book.png&);
// send multipart form data necesssary after file data
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// pass to multipart body
multipartBody = bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
String url = &http://192.168.1.100/api/postfile&;
MultipartRequest multipartRequest = new MultipartRequest(url, null, mimeType, multipartBody, new Response.Listener&NetworkResponse&() {
public void onResponse(NetworkResponse response) {
Toast.makeText(context, &Upload successfully!&, Toast.LENGTH_SHORT).show();
}, new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
Toast.makeText(context, &Upload failed!\r\n& + error.toString(), Toast.LENGTH_SHORT).show();
VolleySingleton.getInstance(context).addToRequestQueue(multipartRequest);
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_multipart, menu);
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return super.onOptionsItemSelected(item);
private void buildPart(DataOutputStream dataOutputStream, byte[] fileData, String fileName) throws IOException {
dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd);
dataOutputStream.writeBytes(&Content-Disposition: form- name=\&uploaded_file\&; filename=\&&
+ fileName + &\&& + lineEnd);
dataOutputStream.writeBytes(lineEnd);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(fileData);
int bytesAvailable = fileInputStream.available();
int maxBufferSize = 1024 * 1024;
int bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bufferSize];
// read file and write it into form...
int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
while (bytesRead & 0) {
dataOutputStream.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
dataOutputStream.writeBytes(lineEnd);
private byte[] getFileDataFromDrawable(Context context, int id) {
Drawable drawable = ContextCompat.getDrawable(context, id);
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
MultipartRequest.java:package com.example.
import com.android.volley.AuthFailureE
import com.android.volley.NetworkR
import com.android.volley.ParseE
import com.android.volley.R
import com.android.volley.R
import com.android.volley.VolleyE
import com.android.volley.toolbox.HttpHeaderP
import java.util.M
class MultipartRequest extends Request&NetworkResponse& {
private final Response.Listener&NetworkResponse& mL
private final Response.ErrorListener mErrorL
private final Map&String, String& mH
private final String mMimeT
private final byte[] mMultipartB
public MultipartRequest(String url, Map&String, String& headers, String mimeType, byte[] multipartBody, Response.Listener&NetworkResponse& listener, Response.ErrorListener errorListener) {
super(Method.POST, url, errorListener);
this.mListener =
this.mErrorListener = errorL
this.mHeaders =
this.mMimeType = mimeT
this.mMultipartBody = multipartB
public Map&String, String& getHeaders() throws AuthFailureError {
return (mHeaders != null) ? mHeaders : super.getHeaders();
public String getBodyContentType() {
return mMimeT
public byte[] getBody() throws AuthFailureError {
return mMultipartB
protected Response&NetworkResponse& parseNetworkResponse(NetworkResponse response) {
return Response.success(
HttpHeaderParser.parseCacheHeaders(response));
} catch (Exception e) {
return Response.error(new ParseError(e));
protected void deliverResponse(NetworkResponse response) {
mListener.onResponse(response);
public void deliverError(VolleyError error) {
mErrorListener.onErrorResponse(error);
写回答邀请回答如何使用Volley和HttpEntity工作POST多部分请求?写回答我试图计算如何将文本字段添加到正文,并创建以下函数来执行此操作:private void buildTextPart(DataOutputStream dataOutputStream, String parameterName, String parameterValue) throws IOException {
dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd);
dataOutputStream.writeBytes(&Content-Disposition: form- name=\&& + parameterName + &\&& + lineEnd);
dataOutputStream.writeBytes(&Content-Type: text/ charset=UTF-8& + lineEnd);
dataOutputStream.writeBytes(lineEnd);
dataOutputStream.writeBytes(parameterValue + lineEnd);
回答过的其他问题关于增加备案订单有效期的官方通知:尊敬的腾讯云用户:您好!为了保证您的备案信息能根据最新的管局规则进行审核,腾讯云将在近期对备案订单增加有效期限制,规则如下:
如果您的备案订单等待您继续操作的时间超过
45 天,备案订单将失效,您需要重新提交初审再次审核。备案订单的内容会被......
我正在考虑添加一个CloudWatch事件来触发一个lambda,但是接下来我有lambda的5分钟超时限制。 这是我推荐的方法。CodePipeline发射CloudWatch事件,包括动作失败时:https://docs.aws.amazon.com/codepipeli......
黑色/空白屏幕-两个根小部件 遇到了一个黑色/空白屏幕,因为你的Kivy应用程序中有两个根小部件。其中一个根来自main.py,即返回内存管理系统()。第二个根目录来自kv文件,即内存管理系统:这个声明被称为根规则。 应用程序使用的根小部件是main.py中的一个,即,retu...... 可能需要在本地计算机上安装Oracle客户端组件(安装了SSRS),以便使用Oracle数据库的连接提供程序。 如果不喜欢使用任何插件,使用javascript方法。 我可以这样建议: 在每个作业页面中为联系表单链接添加一个自定义参数 - ?job_title = JOB%A
- 注意url编码。如果愿意也可以在工作模板上编写此代码。然后只需拉取标题并将其添加到联系人窗体的链接即可。然......
你可以: shopt -s nullglob
set -- name1.*.r9.bz2
if [ -n &$1& ]; fi 或 pattern=&name1.*.r9.bz2&
if [ &$(echo $pattern)& != &$p...... Quants&nbsp&#8250&nbsp&nbsp&#8250&nbsp
网络请求库Volley详解
英文原文:&这篇文章是系列文章An Introduction to Volley的一部分,下一篇文章是:Volley是谷歌2013年在I/O大会期间推出的网络库。开发Volley是因为在Android SDK中缺乏一个用户体验良好的网络加载类。在Volley发布之前,开发具有客户端与服务端交互程序的唯一工具是标准的java类java.net.HttpURLConnection以及Apache 的&org.apache.http.client。除开这两个工具的bug不说,所有http链接之外的事情都必须完全自己写,如果你想缓存图片或者发送一个请求,你必须从零开始开发。幸运的是,我们现在有了Volley,完全填补了我们的这些需求。1. 为什么是Volley?避开HttpUrlConnection 和HttpClient在较低的api版本中(多数是在Gingerbread和Froyo中),HttpUrlConnection和HttpClient 远未达到完美。有一些& 和 一直未被修复,HttpClient 自上次api更新(API 22)之后就已经过时,意味着不再维护,后续可能也会被移除。这就是需要转到一个更稳定的处理网络请求的方法的主要原因。也为了避开AsyncTask自从引入Honeycomb(API 11)以来,系统强制网络操作必须运行在单独的线程中,UI线程之外。这个重大的变化导致AsyncTask&Params,&Progress,&Result& 的大量使用。要使用AsyncTask,首先你得在onPreExecute做一些准备工作,比如定义context。然后在doInBackground 方法中执行后台任务,最后在onPostExecute中处理结果。这要比实现更简单直接,因此有大量的例子和文章出现。但是AsyncTask的主要问题是调用的顺序。你无法决定哪个请求走在最前面,哪个请求必须等待,所有的请求都是按照先进先出的顺序,FIFO。在某些情况下,问题就出来了,比如当你需要加载一个item中带有图片的列表。当用户向下滚动想获得新的数据时,你无法告诉Activity先加载下一页的json数据,只有慢慢等待上一页的图片加载完。对于像facebook和Twiitter这种item数据的重要性远大于相关图片的应用来说,这会导致严重的用户体验问题。Volley用其强大的cancellation api解决了这个问题。当调用的时候,你不再需要在onPostExecute中检查Activity是否被销毁。这帮助我们避免了不想要的NullPointerException。它速度更快前些时候,Google+团队针对每种可以使用的网络请求方式做了一些列的性能测试。当应用在RESTful 风格的应用中时,Volley的得分比其他候选方法高近10倍。它可以缓存所有东西Volley可以自动缓存请求,这点确实是关乎生死的问题。让我们暂时回到上面所提到的那个例子。你有一个item的列表 -& 假设是JSON 数组 -& 并且每个item都包括一段描述和一个缩略图。现在设想一下用户旋转屏幕之后会发生的事情:activity销毁,列表重新加载,同样的还有图片。长话短说就是:严重的资源浪费以及糟糕的用户体验。事实证明,Volley在克服这种困难中是相当有用的。它可以记住前一个调用同时处理Activity的销毁与重建。它缓存所有的东西,这点你也不用担心。Small Metadata OperationsVolley在轻量级的调用中堪称完美,比如请求JSON对象,或者列表的一部分,或者被选中item的详情等等。它是为RESTful应用设计的,在这种特定场景下可以发挥自己最好的优势。但是当把它应用在数据流或者大文件下载中,就不是那么好了。这就是为什么它叫Volley(万箭齐发),而不是叫加农炮。2. 内部架构Volley分为三层,每一层都工作在自己的线程中。主线程在主线程中,你只允许触发请求与处理返回结果,不能多也不能少。其结果就是你实际上可以忽略在使用AsyncTask的时候doInBackground 方法里面所做的事情。Volley 自动管理http传输同时捕获网络错误,这些都是以前需要我们自己考虑的。缓存与网络线程当你向队列中添加了一个请求,背后发生了几件事情。Volley会检查这个请求是否可以从缓存中得到。如果可以,缓存将负责读取,解析,和分发。否则将传递给网络线程。在网络线程中,一些列的轮询线程不断的在工作。第一个可用的网络线程线程让请求队列出列,发出http请求,解析返回的结果,并写入到缓存中。最后,把解析的结果分发给主线程的listener中。3. 开始第一步: 导入VolleyVolley设置起来并不是很方便,貌似没有官方的Maven repository,这让人理解不能。你必须依赖官方的源代码。第一件事就是,从 下载Volley源码。这个很简单,下面的Git命令可以为你做完所有的工作:git&clone&https://android.googlesource.com/platform/frameworks/volley几周之前,你还可以使用ant命令行(android update project -p . 然后 ant jar)将所有的东西都打包成jar,然后直接在Android Studio项目中使用compile files('libs/volley.jar')来导入jar。但是最近,google更新了Volley成Android Studio的构建风格,让它很难创建一个标准的jar,你仍然可以这样做,但是只能使用老版本的库,虽然这种方式也许是最快速的的,但个人不推荐你使用这种方式。你应该使用经典的方式来设置Volley,将源码作为一个module导入。在Android Studio中,在打开项目的情况下,选择File & New Module,然后选择Import Existing Project。选择你下载的源码的所在目录然后确认。一个名为Volley的文件夹将出现在你的项目结构中。Android Studio会自动的更新settings.gradle文件以包含Volley module,因此你只需添加你的依赖compile project(':volley'),然后就完成了。不过还有第三种方法,你可以在build.gradle 文件的依赖部分添加这行代码:compile&'com.mcxiaoke.volley:library-aar:1.0.15'这是谷歌官方repository的一个镜像,通常会同步更新。这可能是最简单快速的方法,但是记住,这不是官方的Maven repository,没有保证,不被谷歌支持。在我看来,最好还是多花几分钟导入官方的代码比较好。这样你就可以轻松的跳到原始定义与实现的代码中,如果需要,你还可以修改Volley。第二步: 使用Volley通常Volley只会用到两个类RequestQueue 和Request,你首先创建一个RequestQueue,RequestQueue管理工作线程并将解析的结果发送给主线程。然后你传递一个或者多个Request 对象给他。Request 的构造函数的参数总是包含类型(GET, POST, 等等),数据源的url,以及事件监听者。根据请求类型的不同,可能还需要一些其他的参数。在接下来的例子中,我通过Volley.newRequestQueue方法创建了一个RequestQueue 对象,使用Volley定义的默认值。String&url&=&&http://httpbin.org/html&;
//&Request&a&string&response
StringRequest&stringRequest&=&new&StringRequest(Request.Method.GET,&url,
&&&&&&&&&&&&new&Response.Listener&String&()&{
&&&&@Override
&&&&public&void&onResponse(String&response)&{
&&&&&&&&//&Result&handling&
&&&&&&&&System.out.println(response.substring(0,100));
},&new&Response.ErrorListener()&{
&&&&@Override
&&&&public&void&onErrorResponse(VolleyError&error)&{
&&&&&&&&//&Error&handling
&&&&&&&&System.out.println(&Something&went&wrong!&);
&&&&&&&&error.printStackTrace();
//&Add&the&request&to&the&queue
Volley.newRequestQueue(this).add(stringRequest);正如你看到的那样,这非常直接:创建一个请求,然后将它添加到请求队列,完成。注意listener的语法类似AsyncTask.onPostExecute,只是变成了onResponse。这并不是巧合。Volley 的开发者故意将库的api做的和AsyncTask 方法类似。这样从AsyncTask转到Volley就会轻松很多。如果你需要在几个Activity中触发多个请求,你应该避免使用上面的方法Volley.newRequestQueue.add。在整个项目中实例化一个共享的请求队列会更好些。:MySingletonClass.getInstance().getRequestQueue().add(myRequest);我们这个系列的下一篇教程中我们将看到这种用法。4. 动手实践处理标准的请求 Volley实现了三种常见的请求类型:StringRequestImageRequestJsonRequest每个类都是继承自前面使用了的Request类。我们已经在上个例子中使用了StringRequest ,下面让我们来看看JsonRequest是如何工作的:String&url&=&&http://httpbin.org/get?site=code&network=tutsplus&;
JsonObjectRequest&jsonRequest&=&new&JsonObjectRequest
&&&&&&&&(Request.Method.GET,&url,&null,&new&Response.Listener&JSONObject&()&{
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public&void&onResponse(JSONObject&response)&{
&&&&&&&&&&&&&&&&//&the&response&is&already&constructed&as&a&JSONObject!
&&&&&&&&&&&&&&&&try&{
&&&&&&&&&&&&&&&&&&&&response&=&response.getJSONObject(&args&);
&&&&&&&&&&&&&&&&&&&&String&site&=&response.getString(&site&),
&&&&&&&&&&&&&&&&&&&&&&&&&&&&network&=&response.getString(&network&);
&&&&&&&&&&&&&&&&&&&&System.out.println(&Site:&&+site+&\nNetwork:&&+network);
&&&&&&&&&&&&&&&&}&catch&(JSONException&e)&{
&&&&&&&&&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&},&new&Response.ErrorListener()&{
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public&void&onErrorResponse(VolleyError&error)&{
&&&&&&&&&&&&&&&&error.printStackTrace();
&&&&&&&&&&&&}
&&&&&&&&});
Volley.newRequestQueue(this).add(jsonRequest);很漂亮是吧?你可以看到,返回结果的类型已经是JSONObject的了。如果你需要,你还可以请求JSONArray ,只需用JsonArrayRequest 替代aJsonObjectRequest就可以了。跟之前一样,构造函数的第一个参数是使用的http方法,然后提供获取json的url参数,第三个参数是null,表示请求url不需要带其他请求参数。最后是用于接收返回JSON的listener以及错误listener。如果你想忽略错误,可以为null。获取图片则需要更多的工作。有三种请求图片的方法。ImageRequest 是标准方法。通过提供的Url,她将你请求的图片显示在一个普通的ImageView中。压缩与大小调整的操作都发生在工作线程中。第二种选择是ImageLoader 类。你可以将之想象成数量庞大的ImageRequests,比如生成一个带有图片的ListView。第三种选择是NetworkImageView,下面来看一个例子:String&url&=&&http://i.imgur.com/Nwk25LA.jpg&;
mImageView&=&(ImageView)&findViewById(R.id.image);
ImageRequest&imgRequest&=&new&ImageRequest(url,
&&&&&&&&new&Response.Listener&Bitmap&()&{
&&&&@Override
&&&&public&void&onResponse(Bitmap&response)&{
&&&&&&&&mImageView.setImageBitmap(response);
},&0,&0,&ImageView.ScaleType.FIT_XY,&Bitmap.Config.ARGB_8888,&new&Response.ErrorListener()&{
&&&&@Override
&&&&public&void&onErrorResponse(VolleyError&error)&{
&&&&&&&&mImageView.setBackgroundColor(Color.parseColor(&#ff0000&));
&&&&&&&&error.printStackTrace();
Volley.newRequestQueue(this).add(imgRequest);第一个参数是图片的url,第二个是结果的listener,第三、第四个参数是maxWidth(最大宽度) 和 maxHeight(最大高度),你可以设置为0来忽略他们。然后是用于计算图片所需大小的ScaleType,然后是用于指定图片压缩方式的参数,我建议总是使用&Bitmap.Config.ARGB_8888,最后是一个错误listener。注意Volley默认会将这种请求的优先级设置为low。//&Snippet&taken&from&ImageRequest.java,&
//&in&the&Volley&source&code
public&Priority&getPriority()&{
&&&&return&Priority.LOW;
}注:因为是请求图片,所以没有http类型参数,图片请求总是get的。&POST 请求从get请求切换到post请求是非常简单的。你只需要在request的构造方法中改变Request.Method,同时重写getParams方法,返回包含请求参数的Map&String, String&。String&url&=&&http://httpbin.org/post&;
StringRequest&postRequest&=&new&StringRequest(Request.Method.POST,&url,
&&&&&&&&new&Response.Listener&String&()&{
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public&void&onResponse(String&response)&{
&&&&&&&&&&&&&&&&try&{
&&&&&&&&&&&&&&&&&&&&JSONObject&jsonResponse&=&new&JSONObject(response).getJSONObject(&form&);
&&&&&&&&&&&&&&&&&&&&String&site&=&jsonResponse.getString(&site&),
&&&&&&&&&&&&&&&&&&&&&&&&&&&&network&=&jsonResponse.getString(&network&);
&&&&&&&&&&&&&&&&&&&&System.out.println(&Site:&&+site+&\nNetwork:&&+network);
&&&&&&&&&&&&&&&&}&catch&(JSONException&e)&{
&&&&&&&&&&&&&&&&&&&&e.printStackTrace();
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&},
&&&&&&&&new&Response.ErrorListener()&{
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public&void&onErrorResponse(VolleyError&error)&{
&&&&&&&&&&&&&&&&error.printStackTrace();
&&&&&&&&&&&&}
&&&&@Override
&&&&protected&Map&String,&String&&getParams()
&&&&&&&&Map&String,&String&&&params&=&new&HashMap&&();
&&&&&&&&//&the&POST&parameters:
&&&&&&&&params.put(&site&,&&code&);
&&&&&&&&params.put(&network&,&&tutsplus&);
&&&&&&&&return&
Volley.newRequestQueue(this).add(postRequest);取消一个请求如果你想取消所有的请求,在onStop方法中添加如下代码:@Override
protected&void&onStop()&{
&&&&super.onStop();
&&&&mRequestQueue.cancelAll(new&RequestQueue.RequestFilter()&{
&&&&&&&&@Override
&&&&&&&&public&boolean&apply(Request&?&&request)&{
&&&&&&&&&&&&//&do&I&have&to&cancel&this?
&&&&&&&&&&&&return&&//&-&&always&yes
}这样你就不必担心在onResponse被调用的时候用户已经销毁Activity。这种情况下会抛出NullPointerException异。但是post请求则需要继续,即使用户已经改变了Activity。我们可以通过使用tag来做到,在构造GET请求的时候,添加一个tag给它。//&after&declaring&your&request
request.setTag(&GET&);
mRequestQueue.add(request);如果要取消GET请求,只需简单的添加下面的一行代码:mRequestQueue.cancelAll(&GET&);这样你就只会取消GET请求,让其它请求不受影响。注意你必须手动在销毁的Activity中处理这种情况。管理Cookies和Request优先级Volley doesn't provide a method for setting the cookies of a request, nor its priority. It probably will in the future, since it's a serious omission. For the time being, however, you have to extend the&Request&class.Volley并没有提供设置一个请求的cookies以及优先级的方法。也许在将来会有,毕竟这是一个很严重的疏忽。但是目前,你需要继承Request类。对于cookies的管理,你需要添加请求的header,重写getHeaders方法:public&class&CustomRequest&extends&JsonObjectRequest&{
&&&&//&Since&we're&extending&a&Request&class
&&&&//&we&just&use&its&constructor
&&&&public&CustomRequest(int&method,&String&url,&JSONObject&jsonRequest,
&&&&&&&&&&&&&&&&&&&&&&&&&Response.Listener&JSONObject&&listener,&Response.ErrorListener&errorListener)&{
&&&&&&&&super(method,&url,&jsonRequest,&listener,&errorListener);
&&&&private&Map&String,&String&&headers&=&new&HashMap&&();
&&&&&*&Custom&class!
&&&&public&void&setCookies(List&String&&cookies)&{
&&&&&&&&StringBuilder&sb&=&new&StringBuilder();
&&&&&&&&for&(String&cookie&:&cookies)&{
&&&&&&&&&&&&sb.append(cookie).append(&;&&);
&&&&&&&&headers.put(&Cookie&,&sb.toString());
&&&&@Override
&&&&public&Map&String,&String&&getHeaders()&throws&AuthFailureError&{
&&&&&&&&return&
}有了上面的代码,你就可以直接使用setCookies方法为请求提供cookie列表了。//&Firstly,&you&create&the&list&of&the&cookies,
//&conformed&to&the&HTTP&conventions
//&i.e.&key=value
List&String&&cookies&=&new&ArrayList&&();
cookies.add(&site=code&);
cookies.add(&network=tutsplus&);
//&then&you&invoke&your&custom&method
customRequest.setCookies(cookies);
//&and&finally&add&the&request&to&the&queue
Volley.newRequestQueue(this).add(customRequest);而对于优先级,你同样需要继承Request类,重写getPriority方法。下面是代码的样子:Priority&mP
public&void&setPriority(Priority&priority)&{
&&&&mPriority&=&
public&Priority&getPriority()&{
&&&&//&If&you&didn't&use&the&setPriority&method,
&&&&//&the&priority&is&automatically&set&to&NORMAL
&&&&return&mPriority&!=&null&?&mPriority&:&Priority.NORMAL;
}然后,在主线程中,调用下面的一行代码来设置请求的优先级:customRequest.setPriority(Priority.HIGH);你可以从如下的优先级中选择一个:Priority.LOW&//&images,&thumbnails,&...
Priority.NORMAL&//&residual
Priority.HIGH&//&descriptions,&lists,&...
Priority.IMMEDIATE&//&login,&logout,&...总结在这篇文章中,我们看到了Volley是如何工作的。我们首先看到了为什么使用Volley而不是Android SDK中自带的其他解决方案。然后我们深入到库的内部,查看它的工作流程以及支持的请求类型。最后,我们动手创建了几个简单的Request,并实现了一个可以设置优先级与cookies的自定义Request。在下一部分中,我们将创建一个使用了Volley的简单应用。向你演示如何使用探索者号在火星上收集的天气数据来制作一个火星天气app。
上一篇: 这篇文章不是教你如何使用RxJava,而是解释RxJava的演进过程。 原文链接 : NotRxJava guide for lazy folks 原文作者 : Yaroslav Heriatovych 译文出自 : 开发技术前线 www.devtf.cn 译者 : Rocko 校对者: Mr.Simple 状态 : 完成校对 如果你是一位 Android
下一篇: 单例模式用application的context 如果我们在Activity A中或者其他地方使用Foo.getInstance()时,我们总是会顺手写一个『this』或者『mContext』(这个变量也是指向this)。试想一下,当前我们所用的Foo是单例,意味着被初始化后会一直存在与内存中,以方便我}

我要回帖

更多关于 volley post请求 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信