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>
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
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
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