2010-07-27 2 views
2

J'ai construit une activité pour gérer les gestes dans mon jeu Android et que vous voulez qu'il réponde à un geste n'importe où sur l'écran, mais je reçois cette erreur sur le journal:Exception de pointeur nul lorsqu'une vue est affectée à une activité?

07-27 13:55:07.268: ERROR/AndroidRuntime(751): java.lang.NullPointerException 
07-27 13:55:07.268: ERROR/AndroidRuntime(751):  at android.app.Activity.findViewById(Activity.java:1637) 
07-27 13:55:07.268: ERROR/AndroidRuntime(751):  at com.darius.android.distractions.DistractionsView$DistractionsThread$GestureActivity.onCreate(DistractionsView.java:282) 
07-27 13:55:07.268: ERROR/AndroidRuntime(751):  at com.darius.android.distractions.DistractionsView$DistractionsThread.doStart(DistractionsView.java:559) 
07-27 13:55:07.268: ERROR/AndroidRuntime(751):  at com.darius.android.distractions.DistractionsView$DistractionsThread.doKeyDown(DistractionsView.java:829) 
07-27 13:55:07.268: ERROR/AndroidRuntime(751):  at com.darius.android.distractions.DistractionsView.onKeyDown(DistractionsView.java:1278) 

Je comprends que je dois attribuer une Vue de l'activité et comme vous le verrez dans mon XML, une vue appelée Gestes servira à cette fin mais je continue à recevoir des erreurs d'Inflation en essayant de gonfler la vue. Avant quand cela m'est arrivé, c'était une faute d'orthographe sur le nom de la vue dans le XML mais ce n'est pas cette fois-ci je ne pense pas.

Comment affecter correctement la vue 'gesture' à cette activité pour éviter les erreurs? Je souhaite que quelqu'un connaisse la réponse et peut m'aider !! Un grand merci

j'ai défini mon activité dans mon code comme ceci:

public class GestureActivity extends Activity implements GestureOverlayView.OnGesturePerformedListener{ 

     public void onCreate(Bundle savedInstanceState){ 

     GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures); 

     gestures.addOnGesturePerformedListener(this); 
      Log.w(getClass().getName(), "GESTURE ACTIVITY CREATED"); 
       // Load the gesture library 
       Log.w(getClass().getName(), "LOADING GESTURE LIBRARY"); 
       mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); 
       if(!mLibrary.load()){ 
        finish(); 
       } 
      /* 
     GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures); 
     gestures.addOnGesturePerformedListener(this); 
     Log.w(getClass().getName(), "GESTURE ACTIVITY CREATED"); 
     */ 
     } 

     public void onStart(){ 
      //I replicated the code here from onCreate but will change this!! 
GestureOverlayView gestures = (GestureOverlayView) findViewById (R.id.gestures); 
      gestures.addOnGesturePerformedListener(this); 
      Log.w(getClass().getName(), "GESTURE ACTIVITY CREATED"); 
       // Load the gesture library 
       Log.w(getClass().getName(), "LOADING GESTURE LIBRARY"); 
       mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); 
       if(!mLibrary.load()){ 
        finish(); 
       } 


     } 




     public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture){ ...} 
} 

J'ai créé l'activité dans le thread principal dans sa méthode doStart() en disant:

GestureActivity mGestureActivity = new GestureActivity(); 
mGestureActivity.onCreate(null); 

Et ma mise en page XML ressemble à ceci:

<?xml version="1.0" encoding="utf-8"?> 



<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 


<com.darius.android.distractions.DistractionsView 
    android:id="@+id/distractions_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

<android.gesture.GestureOverlayView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/gestures" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 

android:gestureStrokeType="multiple" 
android:eventsInterceptionEnabled="true"/> 


<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <TextView 
     android:id="@+id/text" 
       android:text="Hello" 
       android:visibility="visible" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:gravity="center_horizontal" 
     android:textColor="#88ffffff" 
     android:textSize="24sp"/> 
<TextView android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:text="@string/concentration_bar" 
      android:textColor = "#EB0000" 
      android:textSize="10sp" 
      android:id="@+id/conbartext" 
      android:visibility="visible"    

      ></TextView> 
</RelativeLayout> 

Répondre

2

findViewById() nécessite l'utilisation de setContentView() ou d'être appelé sur une vue. donc je vous conseille de, soit appelé setContentView (R.layout.nameOfYourXmlfile) ou gonfler avec un gonfleur Layout.

+0

Merci, donc si je change à: \t \t \t \t \t { \t \t \t \t \t onCreate public void (Bundle savedInstanceState) setContentView (R.layout.main); Comment est-ce que j'irais joindre l'auditeur que j'ai fait précédemment en utilisant ce code: GestureOverlayView gestures = (GestureOverlayView) findViewById (R.id.gestures); \t \t \t \t \t \t gestures.addOnGesturePerformedListener (ce); – ComethTheNerd

+0

vous devriez être capable de le faire comme ça, comme le soi-disant id est présent dans le fichier XML que vous avez dans 'setContentView' – Sephy

+0

Ouais j'espérais que cela fonctionnerait, mais j'ai remarqué que cette ligne ne cesse de surgir quand il construit, puis bien sûr, l'exception nullpointer suit quand je tente une interaction avec le programme: 07-27 14: 58: 06.048: WARN/InputManagerService (65): Démarrer l'entrée sur un client non ciblé com.android.internal.view.IInputMethodClient $ Stub $ Proxy @ 43ea09c0 (uid = 10000 pid = 122) – ComethTheNerd

Questions connexes