Android Studio App stürzt immer ab. Wer kann mir sagen was an diesen Zeilen falsch ist?

  • Antworten:121
  • GeschlossenBentwortet
Jonas Schmauder
  • Forum-Beiträge: 68

03.11.2015, 20:40:07 via Website

Habe Problem mit Android Studio. Meine App stürtz immer wieder ab. Ich habe nun durch auskomentieren herausgefunden das es an diesen 3 Zeilen liegen muss. Kann mir jemand sagen was genau hier falsch ist? Weiß auch nicht genau ob die Informationen reichen da es so viele gibt. Hier die 3 Zeilen:
1 List wifiScanList = mainWifiObj.getScanResults();
2 String data = wifiScanList.get(0).toString();
3 ((EditText)findViewById(R.id.tmlWifi)).setText(data);

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.11.2015, 20:42:34 via Website

Hallo Jonas,
was sagt denn LogCat zu dem Fehler?

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

03.11.2015, 20:57:01 via Website

Ich muss zugeben das ich neu in der App-Programmier-Scene bin🙊 was bitte ist LogCat ?

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.11.2015, 21:50:49 via Website

Logcat ist der Debug Log von Android, hier werden alle System und App Relevanten Logs und Errors heineingeschrieben:
https://developer.android.com/tools/debugging/debugging-studio.html

Dabei sind die Roten Zeilen interessant, da diese den Hinweis auf die Zeile in der der Fehler auftritt enthalten.

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

03.11.2015, 22:05:48 via App

Achso das ist mir schon bekannt. Ich kannte nur den Namen nicht. Das ist ja mein Problem es wird kein Fehler angezeigt und die App wird ganz normal aufs Handy übertragen. Aber wenn ivh auf den Button drücke stürzt die App ab, außer ich klammere diese 3 Zeile von oben aus.

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.11.2015, 22:45:10 via Website

Das kann nicht sein, normalerweise kommt da immer was rein (Du musst die App aber im Debug Modus ausführen!), dann siehst du die Meldungen, manchmal etwas verspätet

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

03.11.2015, 22:50:35 via App

ok ich werds mir morgen nochmal anschsauen. ist das den der Richtige Code um W-lan-Netzteerke abzurufen ?

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.11.2015, 22:58:22 via Website

Theoretisch ja, aber
1. In deiner TextBox wird nur der Name des 1. gefundenen Wlans angezeigt
2. Hast du die Wlan Permission gesetzt also das lesen des netzwerkstatuses?
3. Könnte genauso gut eine NullPointerException sein weil ein Objekt null ist.

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

03.11.2015, 23:00:36 via App

bitte was ? 😵 bringt es dir was den ganzen Code zu sehen ?

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.11.2015, 23:04:51 via Website

Ja zumindest etwas mehr der Lesefunktion
Zudem ist es wichtig dass du die Grundlagen lernst, damit du sofort weisst was gemeint ist wenn ich solche Begriffe benutze ;)
Da gibt es mehrere möglichkeiten
1. Buch und ducharbeiten (vorschläge kannt du einen Thread hier im Forum entnehmen)
2. Tutorials, Grundlagen etc. selber aus dem Internet zusammensuchen und versuchen zu verstehen und nicht nur kopieren :D (smug)

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

03.11.2015, 23:12:20 via App

Ok ja tut mir Leid. ich versuche es über Tutorials doch viele die ivh gefunden habe sind nicht für Android Studio oder sehr sehr schlecht gemacht. Mit Büchern hab ich in diesem Bereich leider auch schlechte Erfahrung gemacht. Ich werde mich erstmsl versuchen weiter so durchzuschlagen. Und hoffe das mehr so netter Menschen wie du mir helfen wollen :) vllt kannst du mir ja auch Privat "Unterricht" geben. ich werde morgen den Code reinstellen. Jetzt schonmal danke ! 👍

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.11.2015, 23:18:42 via Website

Privat Unterricht gebe ich keinen, zudem habe ich dafür auch keine Zeit :D
Wenn dann Hilfe nur übers Forum Danke



Es bringt nur Übung was, in Zusammenhang mit der Theorie.
Erst sollte man mal Java können und wissen um was es geht, was man damit alles machen kann etc. dann kann man sich an die Android Programmierung machen.
Als Quereinsteiger (so wie ich) hat man es gerade am Anfang nicht leicht, lieber alles in Ruhe machen und verstehen wa man tut als alles auf einmal.

Zudem ist dazu d.android.com als Ofizielle API Doc immer eine Gute Quelle

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

03.11.2015, 23:24:00 via App

Alles klar war nur so eine Idee. Java hab ich im Informatik-Unttericht wo wir mit Netbeans schon verschiedene und auch komplexere Programme geschrieben haben. Jedoch liegen meines erachtens Welten zwischen diesem Programmieren und einer Android-App. Ich weiß auch nicht warum es mir hier so schwer fällt.

Jonas Schmauder
  • Forum-Beiträge: 68

04.11.2015, 09:54:27 via Website

package com.jones.hack;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.util.List;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btnStart = (Button)findViewById(R.id.btnStart);
    WifiManager mainWifiObj;
    mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    class WifiScanReceiver extends BroadcastReceiver {
        public void onReceive(Context c, Intent intent) {
        }
    }
    WifiScanReceiver wifiReciever = new WifiScanReceiver();
    registerReceiver(wifiReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

    btnStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            WifiManager mainWifiObj;
            mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);
           List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
           String data = wifiScanList.get(0).toString();
          ((EditText)findViewById(R.id.tmlWifi)).setText(data);

        }

    });
}

}

Hier noch der Nachtrag der MainActivity.java

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.11.2015, 10:05:12 via App

Schau dir mal das Beispiel an:
http://stackoverflow.com/a/18741306
Der code zum Auslesen muss in den den BroadCast Receiver.

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

04.11.2015, 10:41:29 via Website

Das Beispiel hat mich jetzt nur noch umso mehr verwirrt...

Jonas Schmauder
  • Forum-Beiträge: 68

04.11.2015, 11:20:11 via Website

Über verschiedene Websiten hab ich nun mein Problem gefunden. ich hatte vergessen der App zugriff auf die Wifi_Einstellungen zu geben. Jetzt steiß ich jedoch auf ein anderes Problem. Die App spuckt nur wirres Zueg aus. was sich als mein verbundenes Wlan entpupte. wie bekomme ich es hin das es mir alle Wlan-Netzwerke in einer Liste anzeigt ?

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.11.2015, 11:51:48 via App

Nicht das 0 Element mit get aus der Liste lesen sondern alle.
Falls du ein Beispiel brauchst sag bescheid ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

04.11.2015, 12:27:02 via App

Was schreib ich dann für 0 ? ein Beispiel wäre villeicht wirklich nicht verkehrt🙈 vllt könntest du noch einbauen das es mir die Netztwerke auflistet

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.11.2015, 12:49:56 via Website

Die Frage ist was du mit der Liste machen willstß
Wenn du die einfach nur anzeigen willst dann:

 List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
String out = "";
for(ScanResult res : wifiScanList)
{

out += res.toString() + "\n";

}
    ((EditText)findViewById(R.id.tmlWifi)).setText(out);

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

04.11.2015, 13:06:09 via Website

Sehr gut dein Code funktioniert einwandfrei. Wie schaffe ich es das mir die App das ganze nicht als flüssigen Text liefert sondern nur die Namen der Wlan-Netzwerke. Villeicht ist es wichtig zu sagen das ich in den weiteren Schritten veruschen will mich in den Netzwerken anzumelden.

Jonas Schmauder
  • Forum-Beiträge: 68

06.11.2015, 15:45:44 via Website

Danke der Tipp war sehr gut (lightbulb) aber wie mach ich das jetzt das es mir die Namen der Netzwerke in dieser Liste anzeigt ? Die Zusatzinformationen der Netzwerke bracuh ich dabei nicht.

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.11.2015, 15:52:54 via App

Eine Liste der Stings Namen erstellen und diese dann der ListView übergeben.

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

06.11.2015, 16:04:19 via Website

Ja genau wie geht das nochmal ? Ich weiß ich bin ein schwieriger Fall. Daher vielen Danke !!!

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.11.2015, 16:07:30 via Website

 List<String> wlanList = new ArrayList<String>();
for(ScanResult sr: wifiScanlist)
{
wlanList.add(sr.toString());
}

Dann kannst du die Liste er Strings wieterverwenden

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder

Jonas Schmauder
  • Forum-Beiträge: 68

06.11.2015, 19:38:39 via Website

for(ScanResult sr: wifiScanlist) in dieser Zeile wird "wifiScanlist" rot warum ?

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.11.2015, 19:44:57 via Website

Wie ich sehe hast de den Test nicht bestanden ;)
Spaß beiseite, hast du mal geschaut warum?
Und auf den Namen deiner WiFi Liste geschaut?
Wenn du beide Vergleichst sollte dir etwas auffallen.

Tipp: DasHierIstDerTipp xD

— geändert am 06.11.2015, 19:48:05

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

06.11.2015, 19:52:35 via Website

Joa hab den Fehler gerade selber gesehen. Dieser TEil des Codes hattich ja eigentlich bereitsch schon facepalm.
Jedoch zeigt Android Studie jetzt bei dieser Zeile Fehler:
wlanList.add(sr.toString());
wlan List : Cannot resolve Symbol ''wlanList'
sr: Cannot resolve Symbol ''sr'
Warum ?

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.11.2015, 19:56:37 via Website

Weiss ich nicht was du gemacht hast..

Der Code stimmt?
Hast du die passenden Imports drin?
Was schlägt android Studio fürs Fixen vor?

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

06.11.2015, 20:06:14 via Website

Den ersten Fehler hab ich gefixt aber was mit dem sr ist weiß ich immernoch nicht. Wo kann ich schauen was AS zum fixen vorschlägt ?

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.11.2015, 20:07:44 via Website

Maus drüberhalten oder auf das "rote" klicken und Tastenkombi Alt+Enter drücken.
Aber sr ist doch fediniert in der For schleife.
Wie sieht denn dein Code aus?

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

06.11.2015, 20:17:23 via Website

Ok hab den Fehler auch wenn ich nicht weiß wie des passieren konnt...
Jedoch macht die App jetzt nichts mehr ? fehlt die Ausgabe ?

public void onClick(View v) {
WifiManager mainWifiObj;
mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);
List wifiScanList = mainWifiObj.getScanResults();
String out = "";
List wlanList = new ArrayList();
for(ScanResult sr : wifiScanList)
{
wlanList.add(sr.toString());

            }

        }

    });
}

}

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.11.2015, 20:26:57 via Website

Ja die Fehlt dir...
Das bzw. die Liste muss du jetzt mit der ListView aus dem oben stehenden Tutorial verbinden

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

06.11.2015, 20:27:42 via Website

aha (thinking):?

Jonas Schmauder
  • Forum-Beiträge: 68

07.11.2015, 10:03:43 via Website

Dann ist diese Zeile,
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
für die Ausgabe verantwortlich ?

Bzw was müsste ich jetzt da verändern das es mir meinen neuen Text ausgibt

— geändert am 09.11.2015, 12:27:38

Jonas Schmauder
  • Forum-Beiträge: 68

09.11.2015, 14:26:52 via Website

image

Was ist jetzt hier falsch ? finde einfach meinen Fehler nicht :?

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.11.2015, 20:14:50 via Website

Du darfst im Adapter nicht "this" verwenden. Das bezieht sich immer auf die Aktuelle Klasse welche nun nicht mehr die Aktivity ist sondern der OnClickListener.

Benutz lieber getApplicationContext() oder ActivityName.this

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

09.11.2015, 20:49:05 via App

Alles klar. Aber ist diese Zeile überhaupt richtig ? was macht diese genau ? Ich brauche ja einen Befehl der mir nur den Namen des Wlan.Netzwerks gibt. Und einen Befehl um die Namen auszugeben...
und ja ich hab deinen Link gesehen aber mir ist nicht ganz klar wo da die Ausgabe ist.

— geändert am 09.11.2015, 20:49:41

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.11.2015, 21:26:08 via App

So noch garnicht es fehlt auf dem Layout noch deine ListView welche du im Editor in die XML eintrafen musst und per code die view per findViewvById suchen musst. Dann kannst du den Array Adaper auf die ListView seten mit ListView#setAdapter()
Dann hast du deine Ausgabe als Liste in deiner App.

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder

Jonas Schmauder
  • Forum-Beiträge: 68

10.11.2015, 16:41:38 via Website

Ich habe doch noch gar kein Array Adapter ? Ich weiß nicht genau wie ich diesen in meinem speziellen Fall erstelle... Bitte um Hilfe.

— geändert am 10.11.2015, 16:45:15

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.11.2015, 12:54:25 via Website

Aäm schau dir dein Code (Screenshot) nochmal an:
Da steht einduetig ArrayAdapter!
Zudem ist das tutorial anschaulich, sodass man es versteht.
Wo hakt es denn?

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

11.11.2015, 19:46:29 via Website

OK ja stimmt das hab ich aber in der Zwischenzeit rausgenommen, da es nicht funktioniert hat. Ich erkläre mal was ich denke was das Problem ist:
Die Zeile :

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);

greift am Ende auf die Stringvariable "values" zu. Diese ist im deinem Tutorial jedoch fest definiert, was bei mi ja nicht der Fall ist.

// Defined Array values to show in ListView
String[] values = new String[] { "Android List View",
"Adapter implementation",
"Simple List View In Android",
"Create List View Android",
"Android Example",
"List View Source Code",
"List View Array Adapter",
"Android Example List View"
};

Bei meinem Programm soll jedoch eine sich ständig/ je nach Verfügbarkeit ändernde Liste erstellt werden. Was muss ich also machen ?

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.11.2015, 19:47:54 via Website

Pascal P.

 List<String> wlanList = new ArrayList<String>();
for(ScanResult sr: wifiScanlist)
{
wlanList.add(sr.toString());
}

Dann kannst du die Liste er Strings wieterverwenden

Einfach diese erstellte Liste statt dem String array verwenden, funktiopniert genauso

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

12.11.2015, 07:50:31 via Website

Danke Pascal, werde ich Zuhause versuchen! Hoffe es funktioniert endlich.

Jonas Schmauder
  • Forum-Beiträge: 68

12.11.2015, 14:55:40 via Website

Error: (52, 25) error: no suitable method found for setAdapter(List)
method ListView.setAdapter(ListAdapter) is not applicable
(actual argument List cannot be converted to ListAdapter by method invocation conversion)
method AbsListView.setAdapter(ListAdapter) is not applicable
(actual argument List cannot be converted to ListAdapter by method invocation conversion)
method AdapterView.setAdapter(ListAdapter) is not applicable
(actual argument List cannot be converted to ListAdapter by method invocation conversion)

Dieser Fehler wird bei mir für die Zeile:

ListView.setAdapter(wlanList);

angezeigt. Was hat das zu bedeuten ?

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.11.2015, 20:00:28 via App

du musst da den ArrayAdapter setzen nicht die Liste

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder
  • Forum-Beiträge: 68

12.11.2015, 21:28:15 via Website

Dann meinst du sowas ?
List wlanList = new ArrayList();
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, wlanList);
for(ScanResult sr : wifiScanList)
{
wlanList.add(sr.toString());
}
ListView.setAdapter(adapter);`

Weil hier ist auch nochmal etwas falsch in der 2. Zeile wird ein Fehler angezeigt:
Error: (48, 40) error: no suitable constructor found for ArrayAdapter(,int,int,List)
constructor ArrayAdapter.ArrayAdapter(Context,int,int,List) is not applicable
(actual argument cannot be converted to Context by method invocation conversion)
constructor ArrayAdapter.ArrayAdapter(Context,int,List) is not applicable
(actual and formal argument lists differ in length)
constructor ArrayAdapter.ArrayAdapter(Context,int,int,Object[]) is not applicable
(actual argument cannot be converted to Context by method invocation conversion)
constructor ArrayAdapter.ArrayAdapter(Context,int,Object[]) is not applicable
(actual and formal argument lists differ in length)
constructor ArrayAdapter.ArrayAdapter(Context,int,int) is not applicable
(actual and formal argument lists differ in length)
constructor ArrayAdapter.ArrayAdapter(Context,int) is not applicable
(actual and formal argument lists differ in length)

und in der Letzten Zeile (denke kommt vom oberen Fehler...):
Error: (53, 25) error: non-static method setAdapter(ListAdapter) cannot be referenced from a static context

Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.11.2015, 21:31:13 via App

Oh mann schau einfsch mal nach wie das gemacht ist...

Der ArrayAdapter ist hier erstmal vom typ string.

Zum 2. musst du den nach dem Befüllen der Liste also nach der schleife initialisieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Jonas Schmauder