所以我有一个带有表的数据库,其中用户名对应于图像的名称。所以在我的AsyncHTTP中,我检索用户名,并希望将该用户名映射到正确的图像(所有图像都位于我的可绘制文件夹中)
在我的XML中,这个图像将被渲染我只是放了一个imageview并且从未为它分配一个图像(此imageView的Id是myImage)
那么当我运行代码时,图像不会被渲染。由于范围问题,我无法在异步之外分配图像。
Context context = this;
AsyncHTTPPost asyncHttpPost2 = new AsyncHTTPPost(
"http://lamp.ms.wits.ac.za/~s1363679/avatars.php", params) {
@Override
protected void onPostExecute(String s) {
try {
JSONArray all = new JSONArray(s);
for (int i = 0; i < all.length(); i++) {
JSONObject item = all.getJSONObject(i);
fName = item.getString("avatarName");
System.out.println();
Toast.makeText(Profile.this, fName, Toast.LENGTH_LONG).show();
ImageView Image = (ImageView) findViewById(R.id.myImage);
System.out.println("");
theName = fName;
//String imagename="kaius";
Resources res = context.getResources();
int resID = res.getIdentifier(theName, "drawable", context.getPackageName());
Image.setImageResource(resID);
}
} catch (Exception e) {
Toast.makeText(Profile.this, e.toString(), Toast.LENGTH_LONG).show();
}
}
};
asyncHttpPost2.execute();
}
正确检索imageName并将其存储在变量&#34; theName&#34;但它似乎没有渲染到视图上。
答案 0 :(得分:0)
在drawable文件夹的同一级别,还应该有一些带有这些名称的文件夹:
-drawable-HDPI
-drawable-xhdpi
-drawable-xxhdpi
-drawable-xxxhdpi
您的图像应根据不同的dpi进行缩放,并放置在这些文件夹中,以便在所有屏幕中正确呈现。
你可以做的另一件事是:
// get drawable path
String imageUri = "drawable://" + R.drawable.image;
imageView.setImageBitmap(decodeSampledBitmapFromFile(imageUri , 1920, 1080));
并在此处声明decodeSampledBitmapFromFile:
public static Bitmap decodeSampledBitmapFromFile(String imagePath,
int reqWidth, int reqHeight) {
// BitmapFactory.decodeFile(this.getFilesDir().getPath() + "/" + imagestoplay[currImage])
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
// BitmapFactory.decodeResource(res, resId, options);
BitmapFactory.decodeFile(imagePath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(imagePath, options);
}
不要忘记将1080和1920更改为所需的大小(以像素为单位)。