当前位置:首页 » 安卓系统 » androidvolley

androidvolley

发布时间: 2022-06-23 09:38:17

① 关于安卓框架Volley返回数据的问题

有回调的方法就是用来写处理结果的,直接在回调函数里写处理的方法。 一般的请求类似于
Json json = http.getHttp(...); json是请求的返回结果,因为是异步的,所以这种情况要封装,加入回调函数,volley已经把这个工作做好了,你再封装回去不是做无用功么。
我知道你的意思,写个方法判断是否登录,有两种情况,一是之前登录过,app保存了session,直接判断有没有缓存就直接决定是否登录,这是同步的,第二种是用账号密码等去请求登录,但这是耗时的,所以要异步,就不能用这种方式了,直接回调里处理(返回值解析没问题了跳转主页面)就行了.
如果你非要同步请求判断,volley有个同步请求的,如下(这个要写在线程里),但这样思路有问题,不是所有东西都封装才好
RequestFuture<String> future = RequestFuture.newFuture();
StringRequest request = new StringRequest("http://vjson.com", future, future);
VjsonVolley.addRequest(request);
try {
String result = future.get();
//future.get(timeout, unit)
Log.d(MainActivity.class.getSimpleName(), result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}

② Android客户端访问网络时,volley与okHttp,哪一个更好

OkHttp
物理质量
使用OkHttp需要 okio.jar (80k), okhttp.jar(330k)这2个jar包,总大小差不多400k,加上自己的封装,差不多得410k。
功能介绍
Square 公司开源的 OkHttp 是一个专注于连接效率的 HTTP 客户端。OkHttp 提供了对 HTTP/2 和 SPDY 的支持,并提供了连接池,GZIP 压缩和 HTTP 响应缓存功能。
优点
支持http请求,https请求。
支持文件下载。
使用的是HttpURLConnection,不要担心android版本的变换。(至少目前是都支持的)。
支持get,post请求。
基于Http的文件上传
加载图片。
缺点
比如callback回来是在线程里面, 不能刷新UI,需要我们手动处理。
封装比较麻烦。
Volley
物理质量
使用Volley 需要Volley.jar(120k),加上自己的封装最多140k。
功能简述
Volley是Goole在2013年Google I/O大会上推出了一个新的网络通信框架,它是开源的。Volley 的特点:特别适合数据量小,通信频繁的网络操作。
优点
非常适合进行数据量不大,但通信频繁的网络操作。
内部分装了异步线程。
支持get,post网络请求。
图片下载。
可直接在主线程调用服务端并处理返回结果。
可以取消请求,容易扩展,面向接口编程
缺点
对大文件下载 Volley的表现非常糟糕。
只支持http请求。
在BasicNetwork中判断了statusCode(statusCode < 200 || statusCode > 299),如果合条件直
图片加载性能一般。
使用的是httpclient,HttpURLConnection。不过在android 6.0不支持httpclient了,如果想支持得添加org.apache.http.legacy.jar。
总结
在我们当前的项目 xxxSDK,xxx商城里面,使用volley就可以了,毕竟经过了日活几十万的测试,至少稳定性是没有问题的。okhttp暂时还用不上。后续如果要使用okhttp,可以再深入okhttp,给项目做重构。
不过既然转战Android studio,网络请求还是推荐使用Retrofit2
Retrofit 是在OkHttp上封装的,可以参考下 Volley vs Retrofit
http://blog.csdn.net/hwz2311245/article/details/46845271

③ 安卓sd卡中volley文件夹里的有几百个文件,可以删吗

Volley是一个Android系统中应用进行网络访问的网络库,就是说你的手机中有某个或者某些应用使用了Volley来访问网络,所以会有这个文件夹,里面的文件是一些缓存文件。你可以删除,不会有影响,但这些缓存文件在你进行网络访问的时候,可能会提升速度(比如你访问的某个资源跟缓存文件是一样的,那么就直接读取本地缓存了),所以并不建议你删除。

④ android volley配合什么使用

,首先需要将Volley的jar包准备好,
下载完成后将它导入到你的Eclipse工程里,然后再导出一个jar包就可以了。如果你的电脑上没有Git,那么也可以直接使用我导出好的jar包,

新建一个Android项目,将volley.jar文件复制到libs目录下,这样准备工作就算是做好了。
3. StringRequest的用法
前面已经说过,Volley的用法非常简单,那么我们就从最基本的HTTP通信开始学习吧,即发起一条HTTP请求,然后接收HTTP响应。首先需要获取到一个RequestQueue对象,可以调用如下方法获取到:
[java] view plain在CODE上查看代码片派生到我的代码片
RequestQueue mQueue = Volley.newRequestQueue(context);
注意这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。

接下来为了要发出一条HTTP请求,我们还需要创建一个StringRequest对象,如下所示:
[java] view plain在CODE上查看代码片派生到我的代码片
StringRequest stringRequest = new StringRequest("http://www..com",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
}
});
可以看到,这里new出了一个StringRequest对象,StringRequest的构造函数需要传入三个参数,第一个参数就是目标服务器的URL地址,第二个参数是服务器响应成功的回调,第三个参数是服务器响应失败的回调。其中,目标服务器地址我们填写的是网络的首页,然后在响应成功的回调里打印出服务器返回的内容,在响应失败的回调里打印出失败的详细信息。

最后,将这个StringRequest对象添加到RequestQueue里面就可以了,如下所示:
[java] view plain在CODE上查看代码片派生到我的代码片
mQueue.add(stringRequest);
另外,由于Volley是要访问网络的,因此不要忘记在你的AndroidManifest.xml中添加如下权限:
[java] view plain在CODE上查看代码片派生到我的代码片
<uses-permission android:name="android.permission.INTERNET" />

好了,就是这么简单,如果你现在运行一下程序,并发出这样一条HTTP请求,就会看到LogCat中会打印出网络返回给我们的一长串的HTML代码,虽然我们看起来会有些吃力,但是浏览器却可以轻松地对这段HTML代码进行解析,然后将网络的首页展现出来。
这样的话,一个最基本的HTTP发送与响应的功能就完成了。你会发现根本还没写几行代码就轻易实现了这个功能,主要就是进行了以下三步操作:
1. 创建一个RequestQueue对象。
2. 创建一个StringRequest对象。
3. 将StringRequest对象添加到RequestQueue里面。

⑤ android用volley怎么给服务器发送json

1.下载官网的android SDK(本人用的是eclipse)

2.新建一个android项目:

File->new->andriod Application project

7、下面就是具体的使用post和get请求的代码:

A:发送get请求如下:

package com.example.xiaoyuantong;

import java.util.HashMap;

import java.util.Iterator;

import org.json.JSONException;

import org.json.JSONObject;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.widget.TextView;

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;

/**

* Demo

*/

public class MainActivity extends Activity {

private RequestQueue requestQueue ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init();

}

private void init() {

TextView textView = (TextView)findViewById(R.id.textView);

requestQueue = Volley.newRequestQueue(this);

getJson();

textView.setText("hello");

}

private void getJson(){

String url = "http://192.168.20.1:8080/xiaoyuantong/userAction!register.action?pwd='测试'";

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(

Request.Method.GET, url, null,

new Response.Listener<JSONObject>() {

@Override

public void onResponse(JSONObject response) {

//这里可以打印出接受到返回的json

Log.e("bbb", response.toString());

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError arg0) {

// System.out.println("sorry,Error");

Log.e("aaa", arg0.toString());

}

});

requestQueue.add(jsonObjectRequest);

}

}

B:发送post请求如下:

package com.example.xiaoyuantong;

import java.util.HashMap;

import java.util.Map;

import org.json.JSONException;

import org.json.JSONObject;

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 android.os.Bundle;

import android.app.Activity;

import android.util.Log;

import android.view.Menu;

import android.widget.TextView;

public class PostActivity extends Activity {

private RequestQueue requestQueue ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_post);

init();

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.post, menu);

return true;

}

private void init() {

TextView textView = (TextView)findViewById(R.id.postView);

requestQueue = Volley.newRequestQueue(this);

getJson();

textView.setText("hellopost");

}

private void getJson(){

String url = "http://192.168.20.1:8080/xiaoyuantong/userAction!reg.action";

JsonObjectRequest jsonObjectRequest ;

JSONObject jsonObject=new JSONObject() ;

try {

jsonObject.put("name", "张三");

jsonObject.put("sex", "女");

} catch (JSONException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

//打印前台向后台要提交的post数据

Log.e("post",jsonObject.toString());

//发送post请求

try{

jsonObjectRequest = new JsonObjectRequest(

Request.Method.POST, url, jsonObject,

new Response.Listener<JSONObject>() {

@Override

public void onResponse(JSONObject response) {

//打印请求后获取的json数据

Log.e("bbb", response.toString());

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError arg0) {

// System.out.println("sorry,Error");

Log.e("aaa", arg0.toString());

}

});

requestQueue.add(jsonObjectRequest);

} catch (Exception e) {

e.printStackTrace();

System.out.println(e + "");

}

requestQueue.start();

}

}

8、在android的logcat里面能查看到打印的请求

(红色的显示的是我在后台请求到数据)

有时候logcat显示不出数据,可能是消息被过滤了,可以在左边点击“减号”删除过滤

在server端,也就是在myeclipse的建立的另一个后台工程里面能获取到请求:


9、后续会补充json数据的解析部分,以及过度到移动云的部分,上面只是c/s模式下的一个简单的基于http的请求应答例子。

⑥ android volley怎么用


//volley挺简单的,

//先把volley的jar包导进你的工程里然后用我的这个方法试试

//我工程里的一个方法

privatevoidgetJSONByVolley(){


RequestQueuerequestQueue=Volley.newRequestQueue(this);

=ProgressDialog.show(this,null,"Loading...");//进度条


StringRequeststringRequest=newStringRequest(url,

newResponse.Listener<String>(){

@Override

publicvoidonResponse(Stringresponse){

//这个JSONUtils一个集成框架,用其他方法解析json一样的


Stringbody=JSONUtils.getString(response,"body","");

Gsongson=newGson();

list=newArrayList<模型>();

list=gson_point.fromJson(mpoint,

newTypeToken<List<模型>>(){

}.getType());


Gsongson_yx=newGson();

myx_list=newArrayList<模型>();

myx_list=gson_yx.fromJson(myx,

newTypeToken<List<模型>>(){

}.getType());

getBtnState(myx_list);

dataAdapter=newDataAdapter(ControlBoxActivity.this,list);

listView_data.setAdapter(dataAdapter);

if(progressDialog.isShowing()&&progressDialog!=null){

progressDialog.dismiss();

}

}

},newResponse.ErrorListener(){

@Override

publicvoidonErrorResponse(VolleyErrorerror){

Log.e("TAG",error.getMessage(),error);

Toast.makeText(ControlBoxActivity.this,"请检查您的网络",Toast.LENGTH_LONG).show();


if(progressDialog.isShowing()&&progressDialog!=null){

progressDialog.dismiss();

}

}

});


requestQueue.add(stringRequest);

}

⑦ android studio 中volley为什么都是锁的

个人之前一直以为android studio是ADT bundle中那个studio,理论上是的,不过windows上android studio是基于Eclipse的?估计是我下载的版本不对。今天单独下了mac版本的android studio,整个风格和eclipse完全不一样,人家是基于intellij的IDE开发出来的。android studio的下载地址在这里,苦逼的网络,只能从这里下了。
第一次打开android studio的时候会让你选择如何操作,比如新建android工程。和eclipse不同的是,android studio新建工程的时候可能会更新SDK。这里可能就陷入一个“死循环”,更新SDK需要代理网络,但是还没进入主界面……幸好在创建工程的界面菜单中可以设置网络,这样就可以继续创建工程了。
由于我今天想要尝试下volley,传说中的android网络库,但是在怎么把volley纳入自己工程上弄了好久。后来按照这篇文章的步骤打包,把volley.jar移动到当前工程libs目录中,添加为依赖后就可以用了。至于在苦逼的网络下如何git clone volley的库,可以考虑从volley的master分支上下载tgz包。
下面才是如何使用volley的正题,个人分为以下几部分:
常规使用
取消任务
单例
自定义RequestQueue和Request一般不大用到,有需要可以看这里的文章。下面主要说下常规使用。取消任务主要是一个方法RequestQueue#cancelAll,单例不是volley专属的内容,Java的单例模式一般人太熟悉了。
String url = "http://example.com";
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener() {
@Override
public void onResponse(String response) {
mTvMain.setText(response.substring(0, 100));
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
mTvMain.setText("Error Occurred");
}
});
mRequestQueue.add(request);

代码mRequestQueue是RequestQueue的实例。主要流程是创建Request之后加入RequestQueueQueue即可。Request除了StringRequest还有ImageRequest,JsonRequest等等。
最后放到模拟器上看看结果吧,比自己直接写AndroidHttpClient代码要方便很多。

⑧ android 怎么用volley传boolean值

想传递boolean比较简单,可以用Bundle直接putBoolean
对于List类型,需要E是继承了parcelable接口
并且List实际类型要是ArrayList才可以.
调用putParcelableArrayList(String key, ArrayList<? extends Parcelable> list);
关于继承Parcelable接口
需要完成以下内容:
1,声明该类class MyParcelable implements Parcelable;
2,创建Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>()
{
需要实现
public MyParcelable createFromParcel(Parcel source)
{
//例如MyParcelable有String name;
MyParcelable p = new MyParcelable();
p.name = source.readString();

//所有成员都要处理.

}
public MyParcelable[] newArray(int size)

{

return new MyParcelable[size];//这样就可以了
}

}

⑨ android volley框架淘汰了吗

淘汰策略一般是通过数量或者容量限制。每写一个app都自成一套。此外,一旦我们脱离了程序,我们将不再获得我们Bitmap的元数据,比如请求网络链接,资源描述符等等,而且对于同一个网络请求我们要用单独的装饰器来拦截。当然,之所以列举这些出来,是因为在Volley里面已经很好的解决了这些问题,当你下载了Volley的源码编译以后,你会发现,Volley所涵盖的功能远比你考虑的要多。而且这些东西,已经被很好的封装起来。而且Volley的代码读起来也非常的顺口,并不像Android原生的一些代码一样又臭又长。如果说Volley是一种好的开源框架,不如说Volley是一套现在看起来还不错的设计模式。而且从Volley所提供的有些接口来说,Volley已经将很大部分封装在框架内部,对于api调用者来说,无疑是个福音。

热点内容
小陈访问 发布:2024-05-22 08:23:18 浏览:221
ftp上传文件shell 发布:2024-05-22 08:18:05 浏览:876
安卓airpords降噪怎么弄 发布:2024-05-22 08:18:01 浏览:492
se脚本 发布:2024-05-22 08:09:07 浏览:964
怎么删除linux 发布:2024-05-22 08:04:50 浏览:149
go和python 发布:2024-05-22 07:58:26 浏览:237
at24c02存储芯片的参考文献 发布:2024-05-22 07:28:26 浏览:727
微信apiphp 发布:2024-05-22 07:26:49 浏览:148
编译kernel的流程 发布:2024-05-22 07:26:47 浏览:939
u盘头戴式耳机怎么连接安卓手机 发布:2024-05-22 07:25:30 浏览:603