首页 > 解决方案 > 尝试更新 MainActivity 之外的 UI 元素

问题描述

作为序言,我是一名学生,对 Java/编程很陌生。我对android框架很陌生。我希望 5 个骰子 ImageView 在一个循环中循环,看起来就像它们在滚动一样。我相信我遇到的主要问题是我的 UI 更改发生在 onCreate() 之外。有没有办法连接 MainActivity 和一个单独的 Java 类?

主要活动

  super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        Button rollButton = (Button) findViewById(R.id.rollButton);
        rollButton.setOnClickListener( new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Thread die1 = new Thread((Runnable) new ShipDriver(0));

                die1.start();

独立的 Java 类

public class ShipDriver implements Runnable {
    ImageView imageView;
    ImageView imageView2;
    ImageView imageView3;
    ImageView imageView4;
    ImageView imageView5;
    int dieIndex;
    int rolled;
    Handler myHandlerObj;
    Runnable runnable;


    public static final Random RANDOM = new Random();


    public ShipDriver(int tdieIndex) {

        dieIndex = tdieIndex;

    }


    public void run() {
        rolled = randomDiceValue();
        Handler myHandlerObj = new Handler(Looper.getMainLooper());

        for(int i=0; i<40; i++) {

            try {

                Thread.sleep(1000);
            }catch (InterruptedException e) {
                e.printStackTrace();
            }

            if (dieIndex == 0) {
                myHandlerObj.post(new Runnable() {
                    @Override
                    public void run() {
                        switch (rolled) {
                            case 1:

                                imageView.setImageResource(R.drawable.die1);
                            case 2:
                                imageView.setImageResource(R.drawable.die2);
                            case 3:
                                imageView.setImageResource(R.drawable.die3);
                            case 4:
                                imageView.setImageResource(R.drawable.die4);
                            case 5:
                                imageView.setImageResource(R.drawable.die5);
                            case 6:
                                imageView.setImageResource(R.drawable.die6);

                    }
                }
                });
            if (dieIndex == 1) {
                myHandlerObj.post(new Runnable() {
                    @Override
                    public void run() {
                        switch (rolled) {
                            case 1:
                                imageView2.setImageResource(R.drawable.die1);
                            case 2:
                                imageView2.setImageResource(R.drawable.die2);
                            case 3:
                                imageView2.setImageResource(R.drawable.die3);
                            case 4:
                                imageView2.setImageResource(R.drawable.die4);
                            case 5:
                                imageView2.setImageResource(R.drawable.die5);
                            case 6:
                                imageView2.setImageResource(R.drawable.die6);
                        }
                    }
                });
            }

...... 

在 logcat 中,我收到此错误:

attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

我对此有点不知所措。任何见解将不胜感激。

标签: javaandroid

解决方案


您显示的错误是在对象未初始化时出现的。首先你初始化你的 imageview 对象。你显示的错误不是线程错误。


推荐阅读