2016-07-28 62 views
1

我正在使用Volley将图像列表上传到服务器。这发生在一个服务中。一旦图像上传,我将它从列表中删除。互联网连接中断时出现问题。当互联网连接中断并再次出现时,我正在考虑将尚未上传的图像添加回请求队列。Android凌空 - 避免同一类型的多个请求到服务器?

这可能会导致在服务器上保存同一图像的多个副本,因为在获取rseponse之前,对同一图像的请求可能已经过了。

我该如何解决这种情况?

+0

也许你可以计算哈希值用于其存储在服务器数据库的每个文件,发送一组新的图像进行比较,在该数据库的那些哈希值时,如果暴露出来的,从您的图片列表中删除启动请求......这可能不是最好的解决方案,但第一个在我脑海里的是...... – David

+0

是的,我想到了这一点。但我不想改变服务器代码。我想从应用程序本身防止这种情况。 – user3282666

+0

好的,那么每次一个文件成功上传到服务器时事件怎么样,所以你可以记住下次。因此,也许从列表中单独上传每个图像和onPostRequest从列表中删除图像,并继续下一个 – David

回答

2

我不太清楚你为什么使用服务来安排请求,因为凌乱地在一个单独的线程中自动运行请求。

不过,您可以通过添加监听器来监听请求结果,成功和不成功。

只要您使用volley安排请求,就可以从列表中删除图像。如果成功,您可以根据需要进行操作,但如果失败,则可以将其重新添加回您的列表。

public static Request getImageUploadRequest(final String image) { 
    Response.Listener<T> responseListener = new Response.Listener<T>() { 
       @Override 
       public void onResponse(T response) { 
        // do whatever you like 
       } 
    }; 

    Response.ErrorListener errorListener = new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        // put the image back onto the list 
        SomeClass.addImageToList(image); 
       } 
    }; 

    return new JsonArrayRequest(Request.Method.GET, YOUR_URL, null, responseListener, errorListener); // Use any subclass of Request you like 
} 
+0

但在“onErrorResponse(VolleyError错误)”我怎么知道哪些是上传失败的图像? “错误”论点没有任何这样的信息。 – user3282666

+0

没错。但是,如果您首先创建请求,则可以将参数传递到错误侦听器。我会更新我的答案。 – Endzeit

+0

谢谢!所以这使用了匿名内部类可以访问最终局部变量的事实吗? – user3282666