2010-07-27 2 views
2

я построил деятельность для обработки жестов в моей Android игры и хочу, чтобы ответить на жест в любом месте на экране, но я получаю эту ошибку на бревне:Исключение Null Pointer при назначении вида активности?

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) 

Я понимаю, что нужно выделить посмотрите на активность, и, как вы увидите в моем XML-представлении, эти вызовы будут использоваться для этой цели, но я буду продолжать получать инфляционные ошибки при попытке раздуть представление. Раньше, когда это происходило со мной, это была ошибка написания имени вида в XML, но на этот раз я не думаю, что это не так.

Как правильно назначить представление «жест» для этого действия, чтобы предотвратить ошибки?

Я надеюсь, что кто-то знает ответ и может мне помочь !! Большое спасибо

Я определил свою деятельность в своем коде, как это:

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){ ...} 
} 

Я создал свою деятельность в основном потоке в это doStart() метод, говоря:

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

И мой макет XML выглядит следующим образом:

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

ответ

2

findViewById() требует либо использования setContentView(), либо для вызова в режиме просмотра. , поэтому я бы посоветовал вам либо вызвать setContentView (R.layout.nameOfYourXmlfile), либо раздуть его с помощью надувного устройства Layout.

+0

Спасибо, так что если я изменить его на: \t \t \t \t \t \t общественной ничтожной OnCreate (Bundle savedInstanceState) { \t \t \t \t setContentView (R.layout.main); \t Как бы я хотел связать слушателя, который я ранее использовал, используя этот код: ЖестыРазличные жесты = (GestureOverlayView) findViewById (R.id.gestures); \t \t \t \t \t \t gestures.addOnGesturePerformedListener (это); – ComethTheNerd

+0

вы должны быть в состоянии сделать это просто так, поскольку так называемый идентификатор присутствует в xml, который у вас есть в 'setContentView' – Sephy

+0

Да, я надеялся, что это сработает, но я заметил, что эта строка продолжает появляться, когда она строит, а затем достаточно уверен, что при попытке взаимодействия с программой возникает ошибка nullpointerexception: 07-27 14: 58: 06.048: WARN/InputManagerService (65): запуск ввода для неконцентрированного клиента. com.android.internal.view.IInputMethodClient $ Stub $ Proxy @ 43ea09c0 (uid = 10000 pid = 122) – ComethTheNerd

Смежные вопросы