0
votes

Essayer de mettre à jour les éléments de l'interface utilisateur en dehors de la maactilité

Préface, je suis étudiant et jolie nouvelle à Java / Programmation. Je suis très nouveau dans le cadre Android. Je veux que 5 dés ImageView soit pour faire du vélo sur une boucle pour apparaître comme si elles sont roulées. Je crois que le problème principal que j'ai eu est que mes changements d'interface utilisateur se produisent en dehors de Oncreate (). Existe-t-il un moyen de combler la maadactivité et une classe Java distincte?

MainActivity P>

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


4 Réponses :


0
votes

Je pense que le problème est que vous essayez de faire des changements d'interface utilisateur en dehors du fil principal et que vous ne pouvez pas faire cela sur Android, essayez d'utiliser RunonUthread à la place, comme l'exemple ci-dessous:

runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                    }
                }


1 commentaires

Il crée un gestionnaire pour le boucleur principal et le postait à cela. C'est équivalent à runonuthread



0
votes

Avez-vous essayé de définir un contexte? Je pense que cela aiderait ...

Essayez quelque chose comme le contexte de contexte.

context.ImageView.setimageresource

ou

this.ImageView.setimageresource < / p>

juste une supposition

mise à jour: Utilisez ceci comme exemple

MainAlactivité xxx

cwarningcontrol xxx

}

Mais

les chaînes (r.string.xxx), vous devez créer dans res ou simplement les faire par vous-même. Idem pour l'image obj.


2 commentaires

Je viens de donner ça un aller. Plus particulièrement MainActivity.ImageView.setimageresource. IDE ne lance aucune erreur, mais à la course, le logcat me donne un: tentative d'invoquer la méthode virtuelle 'android.content.res.resources android.content.context.getresources ()' sur une référence d'objet null


J'ai suivi votre code et le mine sous-tiré dans. Je reçois toujours une exception NullPoinger lorsque mon code devient MainActivity.ImageView.setimageresource (R.Drawable.die #); Ma sortie de construction me donne également des erreurs : Erreur: la variable non statique imageView ne peut pas être référencée à partir d'un contexte statique que j'ai d'autres questions ASWELL. Pourquoi avez-vous déclaré votre variable dans votre statique de MainActivity? Voulez-vous aussi clarifier votre phrase "mais"?



0
votes

L'erreur que vous affichez est surveille lorsque l'objet n'est pas initialisé. Tout d'abord, vous initiez vos objets imageView.L'étraction que vous afficher n'est pas une erreur de thread.


1 commentaires

Je pensais un peu ça. Je me lance juste pour le faire répandre pour que mon application fonctionnera. Lorsque IAM regarde le logcat, je peux voir que la logique du jeu est au travail. L'image de matrice aléatoire est choisie et les cas de commutation fonctionnent, mais lorsqu'il frappe SettimagerSources, il échoue. À ce stade, mon code est différent par rapport au code que j'ai posté ci-dessus.



0
votes

J'ai compris mon exception nulle point. Mon Findview (pour l'imageviews) a été incorrectement défini. Je les ai essayé de chercher R.Drawable.imgs. Il fallait être un r.id.imageview.

Cependant, je suis en train de rencontrer un nouveau problème dans lequel les images ne sont pas cyclistes. Je suppose que malade fait plus de creuser dans ça. Je suis juste content d'avoir fait des progrès après 40 heures de frapper ma tête sur ce problème. Vous trouverez ci-dessous le code de ma solution. P>

package com.example.bernh.cptshipmatecrew;

import android.annotation.SuppressLint;
import android.os.Handler;
import android.widget.ImageView;

import java.util.Random;

public class ShipDriver extends MainActivity implements Runnable {
    int dieIndex;
    Random random;
    int rolled;
    ImageView imageView1;
    Handler mainHandler = new Handler();


    public ShipDriver(int dieIndex) {
        this.dieIndex = dieIndex; //why do we declare this. Is this shipdriver obj or MainObj


    }

    @SuppressLint("ResourceType")
    @Override
    public void run() {
        Random random = new Random();


        rolled = random.nextInt(6) + 1;

        for (int i = 0; i < 30; i++) {
            try {
                Thread.sleep(500);
            } catch(Exception e) {
                e.printStackTrace();
            }

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

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

        }
    }
}


0 commentaires