android:runOnUiThread中的变量

时间:2014-07-15 09:16:15

标签: java android multithreading final webviewrunonuithread

您好我使用的是Android Studio,我在runOnUiThread中使用了Deprecated函数 它迫使我在runOnUiThread中使用一个Final Variable 这对新函数来说没问题但是对于Deprecated函数我得到一个错误

Error:(133, 16) error: incompatible types
required: Thread
found:    void
任何人都可以帮忙解决这个问题。

    Thread thread = new Thread() {
        public void run() {
            try {
                String sURL = "http://pollsdb.com/schlogger/223.png";

                URL url = null;
                url = new URL(sURL);
                assert url != null;

                Bitmap bmp = null;
                bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                bmp = Bitmap.createScaledBitmap(bmp, 200, 200, false);
                BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bmp);

                final BitmapDrawable fbmpdw = bitmapDrawable;

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                            ib1.setBackground(fbmpdw);
                        } else {
                            ib1.setBackgroundDrawable(fbmpdw); // <---- this the problem
                        }
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }.start();

2 个答案:

答案 0 :(得分:3)

您的问题不是setBackgroudDrawable方法,而是Thread.start(),它不会返回任何内容(void),而您尝试将其返回值分配给thread本地变量

您既可以更改Thread thread = new Thread() { ... },又可以在没有作业的情况下致电thread.start()或简单new Thread() { ... }.start();

答案 1 :(得分:1)

您是否需要在其他地方使用thread变量?我觉得你不需要。 如果是这样,只需更改第一行

即可
 Thread thread = new Thread() {

new Thread() {

您的.start()将返回void,并且您无法执行Thread thread=//some thing void,因为它需要一些Thread类型。