使用异步更新映像

时间:2017-06-22 14:44:17

标签: java android android-asynctask

所以我有一个带有表的数据库,其中用户名对应于图像的名称。所以在我的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;但它似乎没有渲染到视图上。

1 个答案:

答案 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更改为所需的大小(以像素为单位)。