2016-08-05 22 views
0

Ich habe eine MainActivity, die eine Schaltfläche namens Überwachung hat. Wenn ich den Knopf drücke, sollte er die nahegelegenen Beacons anzeigen. Wenn ich den Knopf drücke, erscheint ein Fehler, der besagt, dass meine Anwendung nicht mehr funktioniert. Hier ist der Code der Schaltfläche Aktivität:ListAdapter funktioniert nicht

public class MonitoringBeacons extends AppCompatActivity { 

    private ProximityManagerContract proximityManager; 

    ListAdapter beaconsAdapter; 
    ListView listView; 
    List<String> beaconsList = new ArrayList<String>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_monitoring_beacons); 
     KontaktSDK.initialize("kasjdhioasjkdoasdjo"); 

     proximityManager = new ProximityManager(this); 
     proximityManager.setEddystoneListener(createEddystoneListener()); 

     setAdapter(); 


     listView.setOnItemClickListener(
       new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
         String beacon = String.valueOf(adapterView.getItemAtPosition(position)); 
         Toast.makeText(MonitoringBeacons.this, beacon, Toast.LENGTH_SHORT).show(); 
        } 
       } 
     ); 
    } 

    protected void setAdapter() { 
     if(beaconsList.isEmpty()) { 
      Toast.makeText(MonitoringBeacons.this, "No beacons found", Toast.LENGTH_SHORT).show(); 
      return ; 
     } 
     beaconsAdapter = new CustomListAdapter(this, beaconsList); 
     listView = (ListView) findViewById(R.id.listView); 
     listView.setAdapter(beaconsAdapter); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     startScanning(); 
    } 

    @Override 
    protected void onStop() { 
     proximityManager.stopScanning(); 
     super.onStop(); 
    } 

    @Override 
    protected void onDestroy() { 
     proximityManager.disconnect(); 
     proximityManager = null; 
     super.onDestroy(); 
    } 

    private void startScanning() { 
     proximityManager.connect(new OnServiceReadyListener() { 
      @Override 
      public void onServiceReady() { 
       proximityManager.startScanning(); 
      } 
     }); 
    } 

    private EddystoneListener createEddystoneListener() { 
     return new SimpleEddystoneListener() { 
      @Override 
      public void onEddystoneDiscovered(IEddystoneDevice eddystone, IEddystoneNamespace namespace) { 
       beaconsList.add(eddystone.getUniqueId()); 
       setAdapter(); 
      } 

      @Override 
      public void onEddystoneLost(IEddystoneDevice eddystone, IEddystoneNamespace namespace) { 
       beaconsList.remove(eddystone.getUniqueId()); 
       setAdapter(); 
      } 
     }; 
    } 

} 

und der Code von CustomListAdapter:

public class CustomListAdapter extends BaseAdapter { 

    private List<String> beaconsList; 
    private Activity activity; 
    private LayoutInflater inflater; 

    public CustomListAdapter(Activity activity, List<String> beaconsList) { 
     this.activity = activity; 
     this.beaconsList = beaconsList; 
    } 

    @Override 
    public int getCount() { 
     return beaconsList.size(); 
    } 

    @Override 
    public Object getItem(int location) { 
     return beaconsList.get(location); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (inflater == null) 
      inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) 
      convertView = inflater.inflate(R.layout.custom_row, null); 

     String singleBeaconItem = String.valueOf(getItem(position)); 
     TextView beaconText = (TextView) convertView.findViewById(R.id.BeaconText); 
     ImageView beaconImage = (ImageView) convertView.findViewById(R.id.BeaconImage); 

     beaconText.setText(singleBeaconItem); 
     beaconImage.setImageResource(R.drawable.tough_beacon_1); 

     return convertView; 
    } 
} 

Im Idealfall, wenn ich die Taste drücken, die in der Nähe Baken als Liste erschienen sein sollte, und wenn eine Bake entdeckt oder verloren die Liste sollte automatisch aktualisiert werden. 02: 15,276 2559-2559/com.example.panagiotis

Stapelüberwachung in LogCat

--------- Anfang 08-06 17 Crash EDITED. beaconsproject E/AndroidRuntime: FATALE AUSNAHME: main Prozess: com.example.panagiotis.beaconsproject, PID: 2559 java.lang.RuntimeException: Aktivität konnte nicht gestartet werden ComponentInfo {com.example.panagiotis.beaconsproject/com.example.panagiotis. beaconsproject.MonitoringBeacons}: java.lang.NullPointerException: Versuch zum Aufruf virtuelle Methode 'void android.widget.ListView.setOnItemClickListener (android.widget.AdapterView $ OnItemClickListener)' für eine Nullobjekt-Referenz bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2416) bei android.app.ActivityThread. handleLaunchActivity (ActivityThread.java:2476) bei android.app.ActivityThread.-wrap11 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) at java.lang.reflect.Method.invoke (Native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Verursacht von: java.lang.NullPointerException: Versuch, virtuelle Methode 'void android.widget.ListView.setOnItemClickListener (android.widget.AdapterView $ OnItemClickListener)' auf einem Nullobjekt Referenz bei com.example aufzurufen .panagiotis.beaconsproject.MonitoringBeacons.onCreate (MonitoringBeacons.java:44) bei android.app.Activity.performCreate (Activity.java:6237) bei android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1107) bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2369) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) bei android.app.ActivityThread.-wrap11 (ActivityThread.java) bei Android .app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:148) bei Android .app.ActivityThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method.invoke (systemeigene Methode) bei com.android.internal.os.ZygoteInit $ M ethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) 08-06 17: 02: 18.087 2559-2559/com.beispiel.panagiotis.beaconproject I/Prozess: Signal senden. PID: 2559 SIG: 9 08-06 17: 02: 22.298 3433-3433/com.beispiel.panagiotis.beaconsproject W/System: ClassLoader referenziert unbekannten Pfad: /data/app/com.example.panagiotis.beaconsproject-1/ lib/x86 08-06 17: 02: 22.455 3433-3433/com.beispiel.panagiotis.beaconsproject W/System: ClassLoader referenziert unbekannten Pfad: /data/app/com.example.panagiotis.beaconsproject-1/lib/x86 08-06 17: 02: 22.604 3433-3433/com.beispiel.panagiotis.beaconsproject W/art: Vor Android 4.1, Methode android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter (android.graphics. PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff $ Mode) hätte die Methode package-private in android.graphics.drawable.Drawable falsch überschrieben 08-06 17: 02: 22.715 3433-3460/com. example.panagiotis.beaconsproject D/OpenGLRenderer: Verwenden Sie E GL_SWAP_BEHAVIOR_PRESERVED: true
[08-06 17: 02: 22,718 3433: 3433 D /] HostConnection :: get() Neue Host-Verbindung 0xaa9a71c0 gegründet, tid 3433
[08-06 17: 02: 22,754 3433: 3460 D /] HostConnection :: get() Neue Hostverbindung hergestellt 0xaa9a6920, tid 3460 08-06 17: 02: 22.768 3433-3460/com.beispiel.panagiotis.beaconsproject I/OpenGLRenderer: Initialisierte EGL, Version 1.4 08-06 17: 02: 24.070 3433-3460/com.beispiel.panagiotis.beaconproject E/Oberfläche: getSlotFromBufferLocked: unbekannter Puffer: 0xaa9b17f0 08-06 17: 02: 26.685 3433-3433/com.example.panagiotis.beaconsproject W/ViewRootImpl: Ereignis wegen keinem Fensterfokus abbrechen: Bewegung Ereignis {action = ACTION_CANCEL, actionButton = 0, ID [0] = 0, x [0] = 397.5, y [0] = 956.6797, toolType [0] = TOOL_TYPE_FINGER, buttonState = 0, metaState = 0, Flags = 0x0, edgeFlags = 0x0, pointerCount = 1, historySize = 0, eventTime = 70853, downTime = 67680, deviceId = 0, source = 0x1002} 08-06 17: 02: 26.685 3433-3433/com.beispiel.panagiotis.beaconsproject W/ViewRootImpl: Ereignis wegen keinem Fensterfokus abbrechen: MotionEvent {action = ACTION_CANCEL, actionButton = 0, id [0] = 0, x [0] = 397.5, y [0] = 956.6797, toolType [0] = TOOL_TYPE_FINGER, buttonState = 0, metaState = 0, Flags = 0x0, edgeFlags = 0x0, pointerCount = 1, historySize = 0, eventTime = 70853, downTime = 67680, deviceId = 0, source = 0x1002} 08-06 17: 02: 26.686 3433-3433 /com.example.panagiotis.beaconsproject W/ViewRootImpl: Ereignis wegen keinem Fensterfokus abbrechen: MotionEvent {action = ACTION_CANCEL, actionButton = 0, id [0] = 0, x [0] = 397.5, y [0] = 956.6797 , toolType [0] = TOOL_TYPE_FINGER, buttonState = 0, metaState = 0, Flags = 0x0, edgeFlags = 0x0, pointerCount = 1, historySize = 0, eventTime = 70853, downTime = 67680, deviceId = 0, source = 0x1002} 08-06 17: 02: 26.686 3433-3433/com.beispiel.panagiotis.beaconsproject W/ViewRootImpl : Ereignis wegen keinem Fensterfokus abbrechen: MotionEvent {action = ACTION_CANCEL, actionButton = 0, id [0] = 0, x [0] = 397.5, y [0] = 956.6797, toolType [0] = TOOL_TYPE_FINGER, buttonState = 0 , metastate = 0, flags = 0x0, edgeFlags = 0x0, pointerCount = 1, historySize = 0, eventTime = 70853, downTime = 67680, deviceId = 0, source = 0x1002} 08-06 17: 02: 28.817 3433-3460/com.example.panagiotis.beaconsproject E/Surface: getSlotFromBufferLocked: Unbekannter Puffer: 0xaa9b17f0 08-06 17: 02: 29.373 3433-3460/com.beispiel.panagiotis.beaconsproject E/Surface: getSlotFromBufferLocked: unbekannter Puffer: 0xb40938f0 08- 06 17: 02: 29.375 3433-3460/com.beispiel.panagiotis.beaconsproject D/OpenGLRenderer: endAllStagingAnimators auf 0xa1d53580 (Rip pleDrawable) mit Handle 0xa203f910 08-06 17: 02: 30.806 3433-3460/com.beispiel.panagiotis.beaconsproject E/Oberfläche: getSlotFromBufferLocked: unbekannter Puffer: 0xb4094e60 08-06 17: 02: 32.811 3433-3460/com. example.panagiotis.beaconsproject E/Oberfläche: getSlotFromBufferLocked: unbekannter Puffer: 0xb40938f0 08-06 17: 02: 35.874 3433-3433/com.beispiel.panagiotis.beaconsproject D/AndroidRuntime: Herunterfahren der VM 08-06 17:02: 35.874 3433-3433/com.beispiel.panagiotis.beaconsproject E/AndroidRuntime: FATALE AUSNAHME: Haupt Prozess: com.example.panagiotis.beaconsproject, PID: 3433 java.lang.RuntimeException: Aktivität kann nicht gestartet werden ComponentInfo {com.example.panagiotis.beaconsproject/com.example.panagiotis.beaconsproject.MonitoringBeacons}: java.lang.NullPointerException: Versuch, virtuelle Methode 'void aufzurufen android.widget.ListView.setOnItemClickListener (android.widget.AdapterView $ OnItemClickListener) 'auf einem Nullobjekt Referenz bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2416) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread. Java: 2476) bei android.app.ActivityThread.-wrap11 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) bei andro id.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java. lang.reflect.Method.invoke (Native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java : 616) Verursacht von: java.lang.NullPointerException: Versuch, die virtuelle Methode 'void android.widget.ListView.setOnItemClickListener (android.widget.AdapterView $ OnItemClickListener)' für eine Nullobjekt-Referenz bei com.example.panagiotis aufzurufen. beaconsproject.MonitoringBeacons.onCreate (M onitoringBeacons.java:44) bei android.app.Activity.performCreate (Activity.java:6237) bei android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1107) bei android.app.ActivityThread.performLaunchActivity (ActivityThread. java: 2369) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) bei android.app.ActivityThread.-wrap11 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java : 1344) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java : 726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) 08-06 17: 02: 39.204 3433-3433/com.beispiel.panagiotis.beaconsproject I/Prozess: Sendesignal. PID: 3433 SIG: 9

Irgendeine Idee?

+0

Es sollte eine Stapelverfolgung in LogCat sein, wenn die App abstürzt. Kannst du das zu deiner Frage hinzufügen? – davidgyoung

+0

@davidgyoung ich habe es hinzugefügt. –

Antwort

0

Der Stacktrace erklärt, was passiert.

Wenn diese Zeile Code ausführt:

listView.setOnItemClickListener(... 

Die listView wurde noch nicht initialisiert wurde, so dass es null ist. Dies verursacht eine NullPointerException.

Diese Variable wird in der setAdapter()-Methode initialisiert, aber möglicherweise nicht, weil die Methode früh beendet wird, wenn beaconsList.isEmpty() als wahr ausgewertet wird.

Die einfache Lösung ist, den Code, der listView initialisiert, an die Spitze dieser Methode zu verschieben.