Ⅰ android volley框架淘汰了吗
淘汰策略一般是通过数量或者容量限制。每写一个app都自成一套。此外,一旦我们脱离了程序,我们将不再获得我们Bitmap的元数据,比如请求网络链接,资源描述符等等,而且对于同一个网络请求我们要用单独的装饰器来拦截。当然,之所以列举这些出来,是因为在Volley里面已经很好的解决了这些问题,当你下载了Volley的源码编译以后,你会发现,Volley所涵盖的功能远比你考虑的要多。而且这些东西,已经被很好的封装起来。而且Volley的代码读起来也非常的顺口,并不像Android原生的一些代码一样又臭又长。如果说Volley是一种好的开源框架,不如说Volley是一套现在看起来还不错的设计模式。而且从Volley所提供的有些接口来说,Volley已经将很大部分封装在框架内部,对于api调用者来说,无疑是个福音。
Ⅱ android volley request 有对相应数据进行hander 处理吗
有hander机制的,来完成主要的异步操作. 原生开发中抛开AsyncTask,只有hander机制能显示子线程对于UI线程的操作.
1.volley只适应于8也就是2.2以上的版本,因为其中使用了androidhttpclient
2.volley工作原理:
下面这图是volley的工作原理:
其核心为requestqueue,在其中包含一个CacheDispatcher和若干个networkDispatcher。所有的下载任务都在一个优先级队列中维护,然后会发到cacheQueue,CacheDispatcher不断盯着cacheQueue,进行任务处理,其中的细节见3.若没得到cache,讲任务假如到networkQueue,networkDispatcher不断盯着networkQueue,进行网络请求,其中的细节见4。不管在cacheDispatcher还是networkDispatcher,若得到response,发出给listener接听到。
3.cacheDispatcher工作细节
此处用到了本地的文件缓存,此处设计借鉴了浏览器的缓存设计。会读取response的header请求,根据header的内容设置缓存的过期时间。缓存文件分为两部分,第一部分为存储缓存的头,第二部分就是缓存的实际内容。在读取缓存时,会根据头部过期时间的设置,判断是否需要再发出网络请求。
4.networkDispatcher工作细节
此处是网络请求,这块有两个关键类,一个是BasicNetwork,一个是httpStack。 basicNetwork中包含了httpstack,在httpstack中进行网络请求,然后basicNetwork对得到的response进行了parse和加入文件缓存等工作处理,最后在此处发出response,由listener接收。
5.图片处理
在上文中是volley一般的工作原理,根据图片的特点,volley中还有三个特殊的类 NetworkImageView,ImageLoader和ImageRequest对图片做了一些特殊处理。
ImageRequest在doparse中结合图片和控件特点,对bitmap生成进行大小缩放,以达到清晰
和占用更少内存的目的
ImageLoader是加载图片的helper,其中有个两个map,flightRequest和BatchResponse,flight的主要目的对每个request进行唯一性确认,使其不再重复生成,而且在控件显示图片不回出现错图的情况。batch response则是在收到图片厚发给listen时控制,这样也可以再此处取消请求,加快加载速度
NetworkImageView继承与Imageview,主要结合了ImageLoader可以异步展示网络图片,同时在detach时取消网络请求。
Ⅲ 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的请求应答例子。