我正在尝试为服务器JSON响应创建和使用缓存.
例如:
将JSON对象缓存到内部存储器,并在我们没有Internet连接时使用它.
在下面的示例代码中,我找不到任何有关如何缓存它的文档,Volley并且当再次更新的服务器头不会过期时重用该文档. 
像这样:将expiration设置为header并使用缓存并尝试在到期后再次加载.
我正在尝试为此方法设置缓存机制:
private void makeJsonArryReq() {
    JsonArrayRequest req = new JsonArrayRequest(Const.URL_JSON_ARRAY,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    msgResponse.setText(response.toString());
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    });
    AppController.getInstance().addToRequestQueue(req,tag_json_arry);
}
缓存方法:
public static Cache.Entry parseIgnoreCacheHeaders(NetworkResponse response) {
    long now = System.currentTimeMillis();
    Map<String, String> headers = response.headers;
    long serverDate = 0;
    String serverEtag = null;
    String headerValue;
    headerValue = headers.get("Date");
    if (headerValue != null) {
        serverDate = HttpHeaderParser.parseDateAsEpoch(headerValue); …我在使用新的Volley库实现Image缓存时遇到了麻烦.在演示文稿中,代码看起来像这样
mRequestQueue = Volley.newRequestQueue(context);
mImageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache());
BitmapLruCache显然不包含在工具包中.知道如何实现它或指向一些资源?
http://www.youtube.com/watch?v=yhv8l9F44qo @ 14:38
谢谢!
在Android的Photo Collage应用程序中,我使用Volley来加载图像.我正在使用具有50 mb存储空间的DiskBasedCache(包含在volley中),以防止多次重新下载相同的图像.
上次我检查DiskBasedCache包含大约1000个缓存条目.
当我的应用程序启动时,Volley调用mCache.initialize(),它将在我的Galaxy S4上花费大约10秒钟(!)来执行以下操作:
我发现在启动时读取1000多个文件并不是加载缓存索引的有效方法!:-)
从volley/toolbox/DiskBasedCache.java:
@Override
public synchronized void initialize() {
    if (!mRootDirectory.exists()) {
        if (!mRootDirectory.mkdirs()) {
            VolleyLog.e("Unable to create cache dir %s", mRootDirectory.getAbsolutePath());
        }
        return;
    }
    File[] files = mRootDirectory.listFiles();
    if (files == null) {
        return;
    }
    for (File file : files) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            CacheHeader entry = CacheHeader.readHeader(fis);
            entry.size = file.length();
            putEntry(entry.key, entry);
        } catch (IOException e) {
            if (file != null) { …由于有关于Volley的这个精彩的演示文稿,我试图将它包含在我正在进行的项目中.我发现自己纠正了我在发布的源代码中发现的一些错误.
有没有人知道是否会有一些可以为项目做贡献的GitHub项目,还是有其他方式向开发人员传达错误和功能请求?
关于我与Volley的问题:
1.似乎重定向不能正常工作:Volley返回错误代码302而不是重定向到响应头中给出的位置.
2.获取缓存目录在运行4.2.2的模拟器上不起作用:
cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);  
final String cacheDir1 = "/Android/data/cache/";
cacheDir = new File(Environment.getExternalStorageDirectory().getPath() + cacheDir1);
但是,此解决方法是特定于平台的.只是想为完成添加它.
除此之外,我认为Volley真的是一段很棒的代码,而且正是我一直在寻找的,直到我自己做了;)
更新1
这里是AOSP贡献页面的另一个链接.我认为它更像是一个独立的库.我会检查出来,虽然我仍然欣赏有关Volley的更多信息和教程.我建议的源代码只是一个快速而肮脏的修复,它在我的演示项目中完成了这个技巧.
更新2
我发现Ognyan Bankov提到的另一个有趣的博客文章是对另一个问题的回答,这可能会有所帮助.
我正在尝试在Volley JsonObjectRequest中发送POST参数.最初,它通过遵循官方代码所说的传递包含JsonObjectRequest的构造函数中的参数的JSONObject来为我工作.然后它突然停止工作,我没有对以前工作的代码进行任何更改.服务器不再识别正在发送任何POST参数.这是我的代码:
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://myserveraddress";
// POST parameters
Map<String, String> params = new HashMap<String, String>();
params.put("tag", "test");
JSONObject jsonObj = new JSONObject(params);
// Request a json response from the provided URL
JsonObjectRequest jsonObjRequest = new JsonObjectRequest
        (Request.Method.POST, url, jsonObj, new Response.Listener<JSONObject>()
        {
            @Override
            public void onResponse(JSONObject response)
            {
                Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_SHORT).show();
            }
        },
        new Response.ErrorListener()
        {
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show();
            }
        });
// Add the request to …我将JsonRequest发布到服务器.服务器很慢.Volley倾向于多次调用慢速服务器,因为它没有得到第一个请求的响应(因为我的服务器很慢).有没有办法禁止Volley重试请求,以便它可以收到第一个响应?
我试过了:
myRequest.setRetryPolicy(new DefaultRetryPolicy(
                TIMEOUT_MS, 
                RETRIES, 
                BACKOFF_MULT)); 
我已经替换了TIMEOUT_MS = 0,RETRIES = 0,甚至BACKOFF_MULT = 0,但它不起作用.
还有其他建议吗?
我正在使用Volley为我的应用程序调用Web请求.但是,因为我是第一次排球.我只是想知道如何使用multipart通过凌空上传图像/视频媒体数据.
我搜索了很多网站,我得到了一些结果
如何使用Volley在Android中发送"multipart/form-data"POST
但是,这些方法看起来不好或有效.那么,请帮助我如何使用凌空上传媒体数据.或者我不应该使用Volley,应该采用以前的手动方法
无论如何,所有的想法和答案都非常感激.谢谢您的帮助.
我正在试用Google的新Volley库,当我使用这种方法时,它看起来很清晰,可以快速加载图像setImageUrl:
holder.image.setImageUrl(url, ImageCacheManager.getInstance().getImageLoader());
我想在其中添加一个回调/侦听器方法,该方法将在加载完成后启动,因此我可以删除progressBar视图并显示图像.这是Universal Image Loader和Picasso库中存在的一个选项,但出于某种原因,我找不到在Volley中这样做的方法,尝试了Google的不同选项,但到目前为止还没有找到任何参考.
有人有代码示例来说明它是如何完成的吗?
有没有办法可以禁用Volley缓存管理?我的应用程序使用Google Volley库来管理传输层,但我有自己的缓存管理器实现,因为服务器不使用Cache-Control标头.我想节省Volley缓存正在使用的空间,因为它完全没用.
有什么简单的方法吗?或者我应该实现自己的版本RequestQueue?
任何建议表示赞赏.
我最近开始使用谷歌的Volley lib来处理我的网络请求.我的一个请求获得错误301重定向,所以我的问题是,可以自动地以某种方式自动处理重定向,还是我必须手动处理parseNetworkError或使用某种在RetryPolicy这里?
谢谢.
android ×10
android-volley ×10
caching ×3
bitmapcache ×1
callback ×1
http-post ×1
image ×1
jsonobject ×1
listener ×1
networking ×1
open-source ×1
performance ×1
post ×1
rest ×1