首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下载并设置壁纸

下载并设置壁纸
EN

Stack Overflow用户
提问于 2013-11-24 12:25:28
回答 2查看 404关注 0票数 0

我有这个小代码,我想要实现这个:程序应该设置一个壁纸从链接的形象。

ImgDownload:

代码语言:javascript
复制
public class ImgDownload extends AsyncTask {
        private String requestUrl;
        private ImageView view;
        private Bitmap pic;

        private ImgDownload(String requestUrl, ImageView view) {
            this.requestUrl = requestUrl;
            this.view = view;
        }

        @Override
        protected Object doInBackground(Object... objects) {
            try {
                URL url = new URL(requestUrl);
                URLConnection conn = url.openConnection();
                pic = BitmapFactory.decodeStream(conn.getInputStream());
            } catch (Exception ex) {
            }
            return null;
        }

        @Override
        protected void onPostExecute(Object o) {
            view.setImageBitmap(pic);
        }
    }

代码语言:javascript
复制
public class MainActivity extends Activity {

    private ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img= (ImageView)findViewById(R.id.img);

//!!!! This is where I am stuck :)
        Object s = new ImgDownload("http://images1.wikia.nocookie.net/__cb20120402213849/masseffect/images/4/42/Uncharted_Worlds_Codex_Image.jpg",img );
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

如何在我的mainActivity中实例化/创建这个类,以便它可以从链接中下载img?如有任何帮助建议、想法,将不胜感激:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-24 13:31:27

您可以这样执行这个AsyncTask:

代码语言:javascript
复制
ImgDownload downloader = new ImgDownload("http://images1.wikia.nocookie.net/__cb20120402213849/masseffect/images/4/42/Uncharted_Worlds_Codex_Image.jpg",img);
downloader.execute();

但是我不建议使用您的代码,因为它会产生内存泄漏。例如,当设备正在下载图像时,请尝试旋转它。我保证你的申请会崩溃。加上AsyncTask是一个泛型类。你可以用它来使你的代码更简单一些。下面是我改进的图像下载任务:

代码语言:javascript
复制
public class ImgDownload extends AsyncTask<Void, Void, Bitmap> { // Use Generics
    private final String requestUrl;
    private final WeakReference<ImageView> imageViewReference; // Use WeakReference to prevent memory leaks

    public ImgDownload(String requestUrl, ImageView view) {
        this.requestUrl = requestUrl;
        this.imageViewReference = new WeakReference<ImageView>(view);
    }

    @Override
    protected Bitmap doInBackground(Void... objects) {
        try {
            URL url = new URL(requestUrl);
            URLConnection conn = url.openConnection();
            return BitmapFactory.decodeStream(conn.getInputStream()); // Return bitmap instead of using global variable
        } catch (Exception ex) {
        }
        return null;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        ImageView imageView = imageViewReference.get();
        if(imageView != null && bitmap != null) { // Check if image or ImageView are null
            imageView.setImageBitmap(bitmap);
        }
    }
} 
票数 1
EN

Stack Overflow用户

发布于 2013-11-24 13:30:32

代码语言:javascript
复制
new ImgDownload("http://images1.wikia.nocookie.net/__cb20120402213849/masseffect/images/4/42/Uncharted_Worlds_Codex_Image.jpg", MainActivity.img).execute();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20174429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档