我正在开发一款应用,需要 -
我基本上知道如何单独实现它们。例如,我已经设法拉取本地联系人,我还没有达到2和3.我对他们几乎没有任何疑问。
问题可能看起来很广泛,但考虑到单个应用程序,我觉得它们是紧密耦合的。我期待着关于实现这些功能的推荐方法的专家意见。
谢谢!
答案 0 :(得分:1)
您通常将它们保存到内部文件夹或目录中的SD卡。内部数据文件夹将锁定到您的应用程序(除非手机已植根)并且其他应用程序无法使用,SD卡将仅限4.3及更高版本。无论哪种方式,您都应该管理缓存的数据量,设置限制并且不允许它高于该值(在某些情况下将其踢出,很可能是LRU或LFU)。你需要亲自动手或者找一个库来为你做这件事,它不是内置于Android中的。
至于从服务器下载它们 - 通常只是一个HTTP请求,带有一个web服务,它会在发送图像结果或错误之前进行任何必要的隐私检查。你不想在这里做任何像JSON之类的东西,它只会浪费带宽。
答案 1 :(得分:0)
答案 2 :(得分:0)
关于第三个问题,如果您要继续使用Volley
,可以尝试覆盖 getBody()以返回图片的字节,其余其他参数应该在URL内编码,这种方式将同时使用GET和POST方法。
public class ContactRequest extends StringRequest {
public static String buildRequestUrl(String url,
Map<String, String> params, String paramsEncoding) {
StringBuilder urlBud = new StringBuilder(url).append('?');
try {
for (Map.Entry<String, String> entry : params.entrySet()) {
urlBud.append(URLEncoder.encode(entry.getKey(), paramsEncoding));
urlBud.append('=');
urlBud.append(URLEncoder.encode(entry.getValue(), paramsEncoding));
urlBud.append('&');
}
return urlBud.toString();
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("Encoding not supported: " + paramsEncoding);
}
}
private String imageFilePath;
public ContactRequest(String url, String imageFilePath,
Response.Listener<String> listener, Response.ErrorListener errorListener) {
super(Method.POST, url, listener, errorListener);
this.imageFilePath = imageFilePath;
}
@Override
public byte[] getBody() throws AuthFailureError {
return getBytesFromFile(new File(imageFilePath));
}
}
构建ContactRequest
并像这样服务于RequestQueue:
String originUrl = "http://.../contact_push.do";
String imageFilePath = "/sdcard/.../contact_avatar_path";
Map<String, String> params = new HashMap<String, String>();
params.put("firstName", "Vince");
params.put("lastName", "Styling");
new ContactRequest(
ContactRequest.buildRequestUrl(originUrl, params, HTTP.UTF_8),
imageFilePath, null, null);
因为我以前从未遇到过这个问题,所以我不确定这个请求是否可以正确到达服务器,对我来说这是一个非测试解决方案,希望可以提供帮助。< / p>