【问题标题】:Downloading images from server and applying them as background for dynamically created buttons从服务器下载图像并将它们用作动态创建按钮的背景
【发布时间】:2014-04-23 10:58:48
【问题描述】:

场景:我必须从服务器下载图像并将它们设置为动态创建按钮的背景。图片的数量不断变化,所以我必须动态创建那么多按钮。

到目前为止我已经完成了什么:我成功地使用 AsyncTask 下载了图像并将它们设置为动态创建按钮的背景。如果没有互联网连接或由于某种原因没有下载图像,则将每个按钮的背景设置为某个默认图像。

问题:在手机上一切正常,即下载图像并根据图像数量动态创建按钮并将图像设置为背景。现在,当我在平板电脑上运行相同的程序时,它无法正常工作。按钮不会动态生成。但是,如果我关闭互联网连接然后运行,就会发生奇迹。!一切正常,即使用默认图像作为背景动态生成按钮。我无法理解为什么会这样。! AsyncTask 有问题吗?任何帮助将不胜感激..

这是异步任务

 public class GetsImages extends AsyncTask<String, Void, Bitmap> {

FileCache fileCache;
ProgressDialog pd;
String url;
GetImages task = null;
Context context;
private Bitmap image;
HomeDynamic activity;
AsyncImage responseImage = null;

public GetImages(String url, HomeDynamic activity) {
    this.url = url;
    // this.context = context;
    this.responseImage = activity;
    attach(activity);
    fileCache = new FileCache(activity);
    //pd = new ProgressDialog(activity);
}

public GetImages(Context context) {

    this.context = context;

}

protected void onPreExecute() {
    super.onPreExecute();

    /*pd.setTitle("Processing");
    pd.setMessage("Please wait...");
    pd.setCancelable(false);
    pd.setIndeterminate(true);
    pd.show();*/
}

@Override
protected void onPostExecute(Bitmap result) {

    /*if (pd.isShowing())
        pd.dismiss();*/
    // studentPic.setImageBitmap(result);
    responseImage.processImage(result);

}

public void detach() {
    activity = null;
}

public void attach(HomeDynamic activity) {
    this.activity = activity;
}

public static void CopyStream(InputStream is, OutputStream os) {
    final int buffer_size = 1024;
    try {
        byte[] bytes = new byte[buffer_size];
        for (;;) {
            int count = is.read(bytes, 0, buffer_size);
            if (count == -1)
                break;
            os.write(bytes, 0, count);
        }
    } catch (Exception ex) {
    }
}

@Override
protected Bitmap doInBackground(String... arg0) {
    // TODO Auto-generated method stub
    File f = fileCache.getFile(url);

    // from SD cache
    Bitmap b = decodeFile(f);
    if (b != null)
        return b;

    // from web
    try {
        Bitmap bitmap = null;
        URL imageUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) imageUrl
                .openConnection();
        conn.setConnectTimeout(15000);
        conn.setReadTimeout(15000);
        conn.setInstanceFollowRedirects(true);
        InputStream is = conn.getInputStream();
        OutputStream os = new FileOutputStream(f);
        CopyStream(is, os);
        os.close();
        bitmap = decodeFile(f);
        return bitmap;
    } catch (Exception ex) {
        ex.printStackTrace();
        return null;
    }
}

private Bitmap decodeFile(File f) {
    try {

        // decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f), null, o);
        // Find the correct scale value. It should be the power of 2.
        final int REQUIRED_SIZE = 64;
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE
                    || height_tmp / 2 < REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }

        // decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(new 
                     FileInputStream(f), null,   o2);
    } catch (FileNotFoundException e) {
    }
    return null;
}

  }

【问题讨论】:

    标签: android android-asynctask android-button


    【解决方案1】:

    如果不显示您所做的任何代码,就很难找出问题所在。如果您的活动涉及大量照片,我建议使用 Picasso 库,它可以很好地处理图像。

    【讨论】:

    • 感谢所有阅读我很长问题的人。我刚刚添加了权限 。它现在工作正常。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多