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

12.11.2015, 21:56:11 via Website

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

— geändert am 12.11.2015, 22:04:16

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

13.11.2015, 12:49:21 via App

sieht doch schon bessr aus ;)

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

Jonas Schmauder
  • Forum-Beiträge: 68

13.11.2015, 12:50:44 via App

Es wird aber weiterhin ein Fehler angezeigt 🙊

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

13.11.2015, 12:52:23 via App

Welcher denn?
Hast du deine ListView auch als Variable oder nutzt du nur die Klasse?

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

Jonas Schmauder
  • Forum-Beiträge: 68

13.11.2015, 15:56:31 via Website

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.AdapterView;
import android.widget.Button;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
ListView listView ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btnStart = (Button)findViewById(R.id.btnStart);
    // Get ListView object from xml
    listView = (ListView) findViewById(R.id.wlanList);

    class WifiScanReceiver extends BroadcastReceiver {
        public void onReceive(Context c, Intent intent) {

        }
    }
    WifiScanReceiver wifiScanReceiver = new WifiScanReceiver();
    registerReceiver(wifiScanReceiver, 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();
            List<String> wlanList = new ArrayList<String>();
            for(ScanResult sr : wifiScanList)
            {
              wlanList.add(sr.toString());
            }
            ArrayAdapter <String> adapter = new ArrayAdapter <String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, wlanList);
            ListView.setAdapter(adapter);
        }

    });
}

}

Hier hast du mal meinen Code.
Die Problem die ich meinte sind in dieser Zeile ab diesem "this":
ArrayAdapter adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, android.R.id.text1, wlanList);
--> "Cannot resolve constructor 'ArrayAdapter(anonymous android.view.View.OnClickListener,int, int, java.util.List)' "
und in dieser Zeile das setAdapter:
ListView.setAdapter(adapter);
--> "Non-static methode 'setAdapter(android.widget.ListAdapter)' cannot be referenced from a static context "

— geändert am 13.11.2015, 16:03:59

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

13.11.2015, 16:27:36 via Website

Dass muss ja auch so heissen:

    ArrayAdapter <String> adapter = new ArrayAdapter <String>(MainActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, wlanList);

Zumal benutztz du wirlich einfach die Klasse listView...
Ich habe dir aber gesagt die ListView muss auf deinem LAYOUT (XML!) existieren.

Dannn kannst du di machen:

ListView lv = (ListView)findViewById(R.id.ListView);
lv.setAdapter(adapter);

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

Jonas Schmauder
  • Forum-Beiträge: 68

13.11.2015, 16:39:36 via Website

Danke jetzt funktioniert es wieder etwas mehr. Ich hatte das Listviews schon.
Nun 1 weiterer Schritt und ein Problem:
Problem: Ein Wlan-Netzwerk wird zweimal angezeigt... sie sind im Namen Identisch...
Der weitere Schritt... Wie bekomme ich es hin, dass mir nur die Namen (SSID) angegebnen wird. ?

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

13.11.2015, 16:40:55 via Website

Was wird denn bisher angezeigt?
Text ändern eichach hier nen naderen String hinzufügen:
wlanList.add(sr.toString());

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

Jonas Schmauder
  • Forum-Beiträge: 68

13.11.2015, 16:54:39 via Website

Angezeigt wird bisher :
-SSiD:
-bc:
-capabilities:
-level:
-frequency:
-timestamp:
-distance:
-distanceSD:
und bei dem Wlan wo ich angemeldet bin noch:
-status: 17

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

13.11.2015, 16:58:39 via Website

Wenn du dich etwas informeren würdest, wüsstest du dann stu das sr.toString()
durch sr.SSID ersetzen musst

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

Jonas Schmauder
  • Forum-Beiträge: 68

13.11.2015, 17:17:13 via Website

Ja ok stimmt :/ tut mir Leid. Aber vllt kannst du mir noch sagen warum es mein eigenes Wlan-Netzwerk doppelt anzeigt ?

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

13.11.2015, 19:05:17 via App

Das kann ich nicht sagen. Du kannst es mit einer If in der For schleife aber filtern indem du prüfst ob es diese SSID schon gibt in der Liste

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

Jonas Schmauder
  • Forum-Beiträge: 68

13.11.2015, 19:23:55 via App

hmm :/ ok anderes Thema wei kann ich jetzt machen das ich mich da anmelden kann ? hab da nur anleitungen gefunden wie man sein Handy normal da verbindet aber nicht wie man selber ne app dazu schreibt

Und wie genau schreibe ich diese If-Schleife ? if (sr.SSID != ? )

— geändert am 13.11.2015, 19:34:56

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

13.11.2015, 20:29:02 via App

if ist keine Schleife sondern eine Bedingung.

if(!wlanList.contains(sr.SSID))

Und Anmelden mach dich mal schlau dazu...

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

Jonas Schmauder
  • Forum-Beiträge: 68

13.11.2015, 21:20:59 via App

ok viele Dank :) werde ich einbauen.
Kannst du mir einen Tipp gebe nach was ich genau suchen soll, hab keine Seiten gefunden, die das erklären oder gar ansprechen... :(

Jonas Schmauder
  • Forum-Beiträge: 68

13.11.2015, 22:21:01 via Website

Hä keien Ahnung was du anderst machst :D
VIelen Dank. versuche es alleine hinzubekommen (cool)

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

13.11.2015, 22:23:13 via Website

Was mache ich anders?
1. ich google Grundsätzlich alles was mit programmieren zu tun hat auf Englisch, da findet man schneller was
2. Ich versuche meine Suchanfrage zu päzisieren in unserem fall jetzt:
"android connect to wifi programmatically"

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

Jonas Schmauder
  • Forum-Beiträge: 68

13.11.2015, 22:26:00 via Website

ok
relativ kompliziert die Antworten von deinem Link :/ aber danke

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

13.11.2015, 22:27:32 via Website

Was, Wie Kompliziert ;)
Die erste Antwort ist Quasi schon eine komplettlösung die du nur noch anpassen musst.
Sei froh dass es sowas schon gibt du du das nicht selber schreiben musst.
Die benutztung dieser Klassen ist jetzt nicht wiklich komplex..

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

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 10:47:13 via Website

Also ich kopier mir jetzt die Zeilen Zusammen... in etwa so:
SSID = "test";
String networkPass = "pass";

WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + networkSSID + "\""; // Please note the quotes. String should contain ssid in quotes
conf.wepKeys[0] = "\"" + networkPass + "\"";
conf.wepTxKeyIndex = 0;
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
conf.preSharedKey = "\""+ networkPass +"\"";
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
wifiManager.addNetwork(conf);
List list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
wifiManager.disconnect();
wifiManager.enableNetwork(i.networkId, true);
wifiManager.reconnect();

     break;
}           

}

Wo genau muss ich das in mein Programm einfügen :?

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

14.11.2015, 11:34:46 via Website

Erstmal zum testen auf nen Button legen, dann kannst du eifacher debuggen und testen.

Sobald der Code dann mal tut beracuhst du af der ListView ein ItemClickListener der dir eine PW Input Dialog bringt, wenn ein Wlan ausgewählt wird.
Sobald das dann eingegeben ist kannst du den Connect Code ausführen.

— geändert am 14.11.2015, 11:34:53

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

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 11:57:35 via App

quasie die bestehende App nehmen und nochmal einen Button einbauen ?

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

14.11.2015, 12:24:14 via App

Ja einfach zu testzwecken des verbindungscodes. Sobald das dann tut kannst du das dann erweitern

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

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 12:52:41 via App

Wie kann ich ein Project "kopieren" und umbenennen ?

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

14.11.2015, 12:55:11 via App

Projektordner kopieren und dann package etc. umbenennen

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

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 13:25:44 via Website

Ich habe wohl etwas dummes getan.... Habe mein Project kopiert und auf meien Externe gezogen zum sichern des Standes. Nun wollt ich schauen ob ich das Project von dort laufen lassen kan (ging nicht) danach wollt ich mein altes Programm wieder von C:/ aus abrufen doch jetzt werden bei mir links 3 Ordner rot angeziegt und in mein MainActivity sind Fehler aufgetaucht :O

Hängt wohlalles damit zusammen, dass in dieser Zeile :
import android.support.v7.app.AppCompatActivity;
das "AppCompatActivity" rot wird.

— geändert am 14.11.2015, 13:32:17

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

14.11.2015, 13:29:49 via Website

Kommt darauf an was du umbenennen willst...
Warum überhaupt 2 Projekte?
Ich würde auf jeden Fall das Package änndern, und der Rest sind einfach nur Ordnernamen und Strings in der App die könntest du ändern musst aber nicht zwangsweise

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

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 13:35:41 via Website

Ich habe wohl etwas dummes getan.... Habe mein Project kopiert und auf meien Externe gezogen zum sichern des Standes. Nun wollt ich schauen ob ich das Project von dort laufen lassen kan (ging nicht) danach wollt ich mein altes Programm wieder von C:/ aus abrufen doch jetzt werden bei mir links 3 Ordner rot angeziegt und in mein MainActivity sind Fehler aufgetaucht :O

Hängt wohlalles damit zusammen, dass in dieser Zeile :
import android.support.v7.app.AppCompatActivity;
das "AppCompatActivity" rot wird.

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 13:48:26 via Website

wo muss ich was ändern ? Ich finde dieses "dependencies" nicht.

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

14.11.2015, 13:50:16 via Website

String dich mal etwas selber an...
Erstmal was benutzt du?
Die Dependencies funken nur in AndroidSutio,
solltest du Eclipse benutzen google einfch mal danach wie man das da macht.

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

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 13:53:04 via Website

Ich streng mich an !
Ich muss die Abhängigkeiten ändern soviel hab ich verstanden.
Ich nutze schon Android Studio, aber wo finde ich diese Abhängigkeiten ?

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 14:03:07 via Website

imagealso ich habe das eingefügt und es gibt immernoch Fehler...

Vllt hilft dir ja der Screenshot etwas ?

— geändert am 14.11.2015, 14:04:49

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

14.11.2015, 14:07:49 via Website

Irgendqwas hast du falsch gemacht bei mir sieht das in AS ganz anders aus.
Was kann ich dir jetzt auch nicht sagen..

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

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 14:21:15 via Website

(thinking):(
trotzdem danke ich vesuchs mal zu fixen

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 14:44:23 via Website

also Gut hab alle gefixt :D

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 15:01:15 via Website

Muss ich noch etwas bestimmtes importieren zur Wlan-Anmeldung ?
den es wird mir hier einiges als Falsch angezeigt...image

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

14.11.2015, 15:04:48 via Website

Lies die Fehler und versuch diese zu beheben.

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

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 17:46:21 via Website

wie heißt die Erlaubnis zu android:name="android.permission.CHANGE_WIFI_STATE_WIFI_STATE"
das android:name ist falsch was muss dort anstelle hin ?
---Diese Frage hat sich erledigt---

— geändert am 14.11.2015, 17:48:52

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 17:52:52 via Website

image

Das was jetzt noch rot ist hat immer den Fehler "Cannot find Symbole" was hat das zu bedeuten bzw. was muss ich machen ?

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

14.11.2015, 18:41:12 via Website

Cannot find Symbol = undef Var == Nicht definierte Variablen.

Die musst definieren.

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

Jonas Schmauder
  • Forum-Beiträge: 68

14.11.2015, 20:15:55 via App

ja ich versteh des schon aber das sind doch nicht alles Variablen... ? oder doch ?

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

14.11.2015, 21:01:29 via Website

Doch, sind Variablen, aber bedenke, nicht nur definieren sondern auch Daten setzen

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

Jonas Schmauder
  • Forum-Beiträge: 68

15.11.2015, 11:35:37 via Website

ok es handelt sich also um 3 Variablen : SSID; context; networkSSID.
die SSID hätte ich wie folgt definiert : String SSID = null;
Wozu muss ich sie den eigentlich definieren ? Sie wird später nur von dieser Zeile (SSID = "test"; ) verwendet und "test" taucht später nichtmehr auf...

— geändert am 15.11.2015, 11:38:48

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

15.11.2015, 11:43:06 via Website

Genau langsam wird das was, eine ser beiden Variablen SSID/networkSSID ist unötig, da du diese nur einmal brauchst.
Somit entfernst du jetzt die SSID zeile und definierst einen neuen String networkSSID = "test"
Und den Context, da könntest du getApplicationContext() nehmen

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

Jonas Schmauder
  • Forum-Beiträge: 68

15.11.2015, 11:59:01 via Website

Ich habe einen guten Lehrer ;)
also ich hab jetzt "alle" Fehler behoben, jedoch passiert nicht wenn ich auf den Button klicke :? Habe ich etwas vergessen ?

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

15.11.2015, 12:08:47 via Website

Du hast vergessen die richtigen Daten für dein Wlan einzutragen
Denn du hast bestimmt kein Wlan mit SSID = test und pw = (keine Ahnung ) ;)

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

Jonas Schmauder
  • Forum-Beiträge: 68

15.11.2015, 12:31:25 via Website

Ah ok dachte ich mir schon war mir da aber nicht ganz sicher... (lightbulb)