2016-06-24 32 views
2

Ich bekomme eine NullPointerException in der StickyGridHeaders library, während andere (this) und (this) scheinen es ohne diese Ausnahme zu verwenden.Warum bekomme ich eine NullPointerException mit der StickyGridHeaders-Bibliothek, während andere die gleiche Bibliothek verwenden?

Ich sollte wahrscheinlich auch erwähnen, dass ich die .jar Datei der Bibliothek in meinem Projekt hinzufügen, weil ich Eclipse (statt Android Studio) verwende.

Wie kann ich dieses Problem lösen?

Teil Logcat:

... 
06-24 08:42:22.419: E/AndroidRuntime(1495): FATAL EXCEPTION: main 
06-24 08:42:22.419: E/AndroidRuntime(1495): java.lang.NullPointerException 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at com.tonicartos.widget.stickygridheaders.StickyGridHeadersSimpleArrayAdapter.getHeaderView(StickyGridHeadersSimpleArrayAdapter.java:93) 
... 

SSCCE:

MainActivity.java:

public class MainActivity extends Activity { 
    private static final String TAG = MainActivity.class.getSimpleName(); 

    private StickyGridHeadersGridView mainGridView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     mainGridView = (StickyGridHeadersGridView) findViewById(R.id.mainActivity_gridView); 

     final String[] dataArray = { 
       "A", 
       "B", 
       "C", 
       "D", 
       "E", 
       "F", 
       "G", 
       "H", 
       "I", 
       "J", 
     }; 

     StickyGridHeadersSimpleArrayAdapter<String> stickyGridHeadersSimpleAdapter = 
       new StickyGridHeadersSimpleArrayAdapter<String>(
       getApplicationContext(), dataArray, R.layout.header, 
       R.layout.item); 
     mainGridView.setAdapter(stickyGridHeadersSimpleAdapter); 

     mainGridView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Log.i(TAG, "Item labelled " + dataArray[position] + "clicked."); 
      } 
     }); 

    } 
} 

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="${relativePackage}.${activityClass}" > 

    <com.tonicartos.widget.stickygridheaders.StickyGridHeadersGridView android:id="@+id/mainActivity_gridView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|center_horizontal" 
      android:background="#90000000" 
      android:gravity="center" 
      android:horizontalSpacing="10dp" 
      android:verticalSpacing="10dp" 
      android:numColumns="4" 
      android:stretchMode="columnWidth" /> 

</RelativeLayout> 

header.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:padding="10dp" 
     android:textColor="#fff" /> 


    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:background="#ff33b5e5" > 
    </FrameLayout> 

</LinearLayout> 

item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:padding="10dp" 
    android:textColor="#fff" /> 

Edit:

06-24 08:42:22.415: W/dalvikvm(1495): threadid=1: thread exiting with uncaught exception (group=0xa62ad288) 
06-24 08:42:22.419: E/AndroidRuntime(1495): FATAL EXCEPTION: main 
06-24 08:42:22.419: E/AndroidRuntime(1495): java.lang.NullPointerException 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at com.tonicartos.widget.stickygridheaders.StickyGridHeadersSimpleArrayAdapter.getHeaderView(StickyGridHeadersSimpleArrayAdapter.java:93) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at com.tonicartos.widget.stickygridheaders.StickyGridHeadersSimpleAdapterWrapper.getHeaderView(StickyGridHeadersSimpleAdapterWrapper.java:57) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapterWrapper.getView(StickyGridHeadersBaseAdapterWrapper.java:172) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.widget.AbsListView.obtainView(AbsListView.java:2267) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.widget.GridView.onMeasure(GridView.java:1030) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at com.tonicartos.widget.stickygridheaders.StickyGridHeadersGridView.onMeasure(StickyGridHeadersGridView.java:822) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.View.measure(View.java:15172) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.View.measure(View.java:15172) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.View.measure(View.java:15172) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.View.measure(View.java:15172) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.View.measure(View.java:15172) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.Choreographer.doFrame(Choreographer.java:525) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.os.Handler.handleCallback(Handler.java:615) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.os.Handler.dispatchMessage(Handler.java:92) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.os.Looper.loop(Looper.java:137) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
06-24 08:42:22.419: E/AndroidRuntime(1495):  at dalvik.system.NativeStart.main(Native Method) 
06-24 08:47:22.611: I/Process(1495): Sending signal. PID: 1495 SIG: 9 
+3

Es sieht aus wie es IDs auf dem 'TextView's im Kopf- und Positions Layouts erwartet; speziell '@android: id/text1' für beide, wenn der verknüpfte Code tatsächlich das ist, was Sie gerade ausführen. Die vollständige Stapelverfolgung wäre hilfreich. –

+0

Für Mike Kommentar-Mitarbeiter besuchen Sie diese: https://github.com/TonicArtios/StickyGridHeaders/blob/master/Example/res/layout/item.xml und https://github.com/TonicArtos/StickyGridHeaders/blob/master/ Beispiel/res/layout/header.xml. – Ironman

+0

@MikeM. Posted Complete Stack-Trace in der Frage – Solace

Antwort

1

Ich habe es nur in Eclipse zu arbeiten. Hier ist, was ich getan habe:

  1. Erstellen Sie ein neues Projekt namens StickyGridHeaders in Eclipse. Machen Sie es zu einem Bibliotheksprojekt und machen Sie ein Paket com.tonicartos.widget.stickygridheaders darin. Erstellen Sie keine Aktivität.
  2. Erstellen Sie sechs Klassen im Paket, und geben Sie ihnen die Namen die Namen der Klassen here.
  3. Öffnen Sie jede der Klassen here und kopieren Sie den Code in die entsprechende Klasse in Ihrem Eclipse-Bibliotheksprojekt in die entsprechende Klasse . Rette sie. Jetzt
  4. , in Ihrem aktuellen SSCCE Projekt, in header.xml und item.xml, im TextView Elemente, fügt android:id="@android:id/item1" Attribut. Danke an Mike M.'s Kommentar für diesen Schritt.
  5. Entfernen Sie in Ihrem SSCCE-Projekt die JAR-Datei der Bibliothek, die Sie zuvor mit hatten.
  6. Fügen Sie in Ihrem SSCCE-Projekt dieses Projekt hinzu, als ob Sie ein beliebiges anderes Projekt aus Ihrem Arbeitsbereich hinzufügen würden: .

Grund:

In Ihrem Stack-Trace, Linie 93 von StickyGridHeadersSimpleArrayAdapter erwähnt, aber diese Linie ist in der Github Version der Klasse leer. Zeile 172 von StickyGridHeadersBaseAdapterWrapper wird in Übereinstimmung mit getView() Methode erwähnt, aber diese Zeile ist in getItemViewType() Methode und ruft auch nicht getView().

So stellte ich fest, dass die .jar eine frühere Version des Projektes ist ..