我是Android和Java的新手,本周我一直在做一个自学成才的速成课程。到目前为止,我所学到的并不是太复杂,因为我已经建立了多年的编码经验。所以,背景历史不在我的问题上。
以下代码是我编写的两个函数,用于从数据库中获取图像ID并解析正确的Uri,然后我可以使用该函数将照片上传到网站。所以,如果我做的工作很糟糕,或者我正在朝着正确的方向前进,或者即使有更好的/本地的方式来做我需要的事情,那么你们可以亲切地看看我的代码并让我知道。
另外,请注意:以下代码确实有效。我只是不知道这是否是正确的做法。
谢谢!
// Usage Map idPath = ImageIdPathFetcher.getRealIdPathFromID(getApplicationContext(), Integer.valueOf(image_id));
public static Map getRealIdPathFromID(Context context, Integer id) {
Map<String,String> idPath = new HashMap<String, String>();
Uri external_images_uri = MediaStore.Images.Media.getContentUri("external");
Uri internal_images_uri = MediaStore.Images.Media.getContentUri("internal");
// initialize uri
Uri uri = external_images_uri;
String ext_img_uri = external_images_uri.toString()+"/"+id;
String int_img_uri = internal_images_uri.toString()+"/"+id;
if(check_uri(context, ext_img_uri))
{
uri = Uri.parse(ext_img_uri);
}else if(check_uri(context, int_img_uri))
{
uri = Uri.parse(int_img_uri);
}else {
idPath.put("id", "");
idPath.put("path", "");
return idPath;
}
String[] proj = { Media.DATA, Media._ID };
Cursor cursor = context.getContentResolver().query(uri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(Media.DATA);
cursor.moveToFirst();
String filepath = cursor.getString(column_index);
idPath.put("id", id.toString());
idPath.put("path", filepath);
return idPath;
}
public static boolean check_uri(Context context, String uri)
{
try{
ContentResolver cr = context.getContentResolver();
String[] projection = {MediaStore.MediaColumns.DATA};
Cursor cur = cr.query(Uri.parse(uri), projection, null, null, null);
if(cur != null)
{
cur.moveToFirst();
String filePath = cur.getString(0);
if(! new File(filePath).exists()){
return false;
}
} else {
return false;
}
} catch (Exception e)
{
return false;
}
return true;
}
答案 0 :(得分:0)
这就是我使用的
var querystring = require("querystring");
module.exports = resTest = {
awaitRes: function *(next) {
var qs = querystring.parse(this.request.querystring);
var key = qs.key;
resTest.qrResponses[key] = this.response;
// I wanna wait here, response in the next method
},
setRes: function *(next) {
var qs = querystring.parse(this.request.querystring);
var key = qs.key;
var val = qs.val;
//reponse here....
resTest.qrResponses[key].body = val;
this.body = "OK";
},
qrResponses: {}
};
router.get("/always-get", resTest.awaitRes);
router.get("/set", resTest.setRes);
答案 1 :(得分:0)
也可以使用MediaStore查询内部和外部MergeCursor数据库:
String myIdImgStr = "123"; // the unique ID of the image in the MediaStore
ContentResolver contentResolver = this.getContext().getContentResolver();
String [] proj = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
MergeCursor cursor = new MergeCursor(new Cursor[] {
MediaStore.Images.Media.query(contentResolver,
Uri.parse(MediaStore.Images.Media.INTERNAL_CONTENT_URI + "/" + myIdImgStr),
proj),
MediaStore.Images.Media.query(contentResolver,
Uri.parse(MediaStore.Images.Media.EXTERNAL_CONTENT_URI + "/" + myIdImgStr),
proj)
});
if(cursor.getCount() == 1) {
cursor.moveToFirst();
String filepath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
}