Android Studio SQLite Befehl zum Löschen von Daten aus Db und aus ListView?

Hello,

ich schreibe gerade ein ToDo listen App. Ich habe meine "ToDo-s" die ich ab jetzt "Daten" nennen werde in eine SQLite Db gespeichert und diese wird beim aufrufen von einer Activity in eine ListView geladen.

Ich will Daten aber auch löschen können. Ich kann die Daten aus dem ListView löschen aber wenn ich zurück und wieder rein gehe sind die Daten wieder da. Denn sie werden nur im ListView gelöscht und nicht in der Datenbank.

Ich habe jetzt versucht das hinzukriegen aber ich komme leider nicht weiter. Ich habe gehofft jemand hier kann mir helfen.

Hier sind meine Codes

// DatabaseHelper.class

public int deleteData (int id){
    SQLiteDatabase db = this.getReadableDatabase();
    return db.delete(TABLE_NAME_1,"id=?",new String [] {String.valueOf(id)});
}

und

//DoList.class

private void SetupListViewListener() {
    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {

            Context context = getApplicationContext();

            Toast.makeText(context, "Todo Removed", Toast.LENGTH_LONG).show();
            toDos.remove(i); // Dieser Zeile löscht ein "ToDo" aus der List View
            // Hier sollte die db zugriff zum löschen passieren.
            DatabaseHelper databaseHelper = new DatabaseHelper(DoList.this);
            toDosAdapter.notifyDataSetChanged();
            return true;
        }
    });
}
Java, Android App, sqlite, Android Studio
1 Antwort
Wifi verbinden mit Strings aus SharendPreferens Java Android?

Ich habe ein Code, der sich mit dem Internet verbindet. Ich möchte aber den Netzwerkname und Netzwerk Passwort über die App ändern wollen und nicht im Code...

 final WifiConfiguration config = new WifiConfiguration();
                config.SSID = "\"Test\"";
                config.preSharedKey = "\"1234567\"";
                wmgr.setWifiEnabled(true);
                int networkId = wmgr.addNetwork(config);
                wmgr.enableNetwork(networkId, true);

Dieser Code funktioniert, möchte mich mit einem festgelegten String verbinden, den man in der App problemlos ändern und speichern kann. Kann wieder aus der Datei laden..

Den meisten Code habe ich weggelassen, da es nixs mit dem verbinden hat. Die App lädt den gespeicherte Wert in den String(Was bei der änderungsseite super funktioniert!) Und das Wlan holt sich den Netzwerkname und Passwörter von den Strings. (Siehe unten.) Leider funktioniert nur der obrige Code beim verbinden. Wie kann ich den geladenen String aus den SharendPreferens in die Wlan verbindung laden ohne den Code ständig umändern zu müssen?

 private String tag1p1netz = "";
    private String tag1p1pass = "";
    private String tag1p2netz = "Tag 1.2";
    private String tag1p2pass = "passtag1p2";
    private String tag1p3netz = "";
    private String tag1p3pass = "";
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_internet);
        
         SharedPreferences prefsnetzeinstellung = getSharedPreferences("netzwerkeinstellung", MODE_PRIVATE);
        tag1p1netz = prefsnetzeinstellung.getString("tag1p1netz", tag1p1netz);
        tag1p2netz = prefsnetzeinstellung.getString("tag1p2netz", tag1p2netz);
        tag1p3netz = prefsnetzeinstellung.getString("tag1p3netz", tag1p3netz);
        tag1p1pass = prefsnetzeinstellung.getString("tag1p1pass", tag1p1pass);
        tag1p2pass = prefsnetzeinstellung.getString("tag1p2pass", tag1p2pass);
        tag1p3pass = prefsnetzeinstellung.getString("tag1p3pass", tag1p3pass);

}
        
        
         @Override
    public void onClick(View e) {
    
    if (e.equals(tag1p1)){
            if (coins < 5*stufe){
                Toast.makeText(getApplicationContext(), "Du hast nicht genügend Coins!", Toast.LENGTH_LONG).show();
            }else if(coins >= 5*stufe){
                Toast.makeText(getApplicationContext(), "Du bekommst Internet!", Toast.LENGTH_LONG).show();

                WifiManager wmgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

                final WifiConfiguration config = new WifiConfiguration();
                config.SSID = tag1p1netz;
                config.preSharedKey = tag1p1pass;
                wmgr.setWifiEnabled(true);
                int networkId = wmgr.addNetwork(config);
                wmgr.enableNetwork(networkId, true);

                coins-= 5*stufe;

}
}

Ps.: Tag 1.2 als Beispiel nehmen
    
Programmieren, Java, Android, String, wifi connection, Variablen, wifi Verbindung, Android Studio
1 Antwort
Werte überschreiben in Java?

Ich benötige eure Hilfe. Ich bekomme es einfach es nicht hin. Das ist bis jetzt das einzige, was ich bei der App aktuell nicht hinbekomme.

Diese Schritte sollen genau erklären, was die App macht:

  1. App wird geöffnet.
  2. Lädt Datum aus SharedPreferences.
  3. App vergleicht das Datum aus der Datei mit dem heutigen Datum.
  4. Sind die Daten gleich, dann setzt START_TIME_IN_MILLIS den Wert auf 7200000.
  5. Wenn die App den Wert überschrieben hat, speichert die App das heutige Datum + 1 Tag (nächsten Tag).

Der Rest der App läuft sehr gut, nur dieser Teil (der Wichtigste) will nicht.

private static final long START_TIME_IN_MILLIS = 7200000; // 2 Stunden

private long timeLeftInMilliseconds;

private long mEndTime;

private boolean timerRunning;

private boolean internetcheck;

private SharedPreferences speichen;

private SharedPreferences.Editor editor;

protected void internetbonus() {
  // heutiger Tag
  Calendar calendar = Calendar.getInstance();
  String Day = DateFormat.getDateInstance().format(calendar.getTime());

  speichen = getApplicationContext().getSharedPreferences("Bonus", MODE_PRIVATE);
  editor = speichen.edit();

  // öffnet SharedPreferences und Lesen der Datei
  if (speichen.getString("datum", null) != null) {
    if ("datum" == Day) {
      START_TIME_IN_MILLIS = 7200000;
      Calendar calendar2 = Calendar.getInstance();
      String Day2 = DateFormat.getDateInstance().format(calendar.getTime());
      calendar2.add(Calendar.DATE, 1);

      if (Day2 != null) {
        SharedPreferences prefs = getSharedPreferences("Bonus", MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("datum", Day2);
        editor.commit();
      }
    }
  }

  // if-Anweisung ist ausgelegte Datei gleich heutiger Tag, dann setzen START_TIME_IN_MILLIS = 7200000.
  // Wenn es gesetzt ist, wird der heutige Tag + 1 in die Datei geschrieben.
}
Programmieren, Java, Informatik, Android Studio
1 Antwort
2 Stunden Countdown App in Java?

Ich habe in Youtub ein Video gesehen, wo jemand in Englisch eine Countdown App programmiert hat. Diese hat funktioniert. Er hat es mit 10 Minuten gemacht. Ich möchte das mit 2 Stunden, aber es funktioniert überhaubt nicht. Wenn man die App öffnet, dann zeigt es irgendwelche Zahlen an und dann läuft der Timer nicht. Was habe ich falsch gemacht? Ich habe es genauso gemacht, wie im Video. Es wäre sehr schön, wenn der Fehler hier behoben wird, dann können andere auch einen größeren Timer machen. Ich bedanke mich im Vorraus ;)

    private TextView countdownText;
    private Button countdownButton;

    private CountDownTimer countDownTimer;
    private long timeLeftInMilliseconds = 7200000; //2 Stunden
    private boolean timerRunning;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_internet);
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);



        countdownText = findViewById(R.id.countdowntext);
        countdownButton = findViewById(R.id.button3);

        countdownButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                startStop();

            }

        });
        updateTimer();
    }


    public void startStop(){


        if (timerRunning){

            stopTimer();

        }else{

            startTimer();
        }

    }



    public void startTimer(){

        countDownTimer = new CountDownTimer(timeLeftInMilliseconds, 1000) {
            @Override
            public void onTick(long l) {

                timeLeftInMilliseconds = 1;
                updateTimer();
            }

            @Override
            public void onFinish() {

            }
        }.start();

        countdownButton.setText("Pause");
        timerRunning = true;
    }


    public void stopTimer(){

        countDownTimer.cancel();
        countdownButton.setText("Start");
        timerRunning = false;
    }

    public void updateTimer(){
        int hours = (int) timeLeftInMilliseconds / 3600000;
        int minutes = (int) timeLeftInMilliseconds | 3600000 / 60000;
        int seconds = (int) timeLeftInMilliseconds | 60000 / 1000;

        String timeLeftText;

        timeLeftText = "" + hours;
        timeLeftText += ":";
        timeLeftText += "" + minutes;
        timeLeftText += ":";
        timeLeftText += "" + seconds;

        if(seconds < 10)  timeLeftText  += "0";
        timeLeftText += seconds;

        countdownText.setText(timeLeftText);

    }


}
App, Programmieren, Java, Android, Informatik, Countdown, Android Studio
1 Antwort
Android Studio Java-Fehler: Can not resolve symbol 'sendMessage'?
package com.example.strassenlaternenapp;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

public class Main extends AppCompatActivity {
    Client client = new Client("192.168.178.45", 8000);
    client.sendMessage("Hallo");

    private Button lightButton;

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

        lightButton = (Button) findViewById(R.id.lightButton);
        lightButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               
            }
        });
    }
}

Main-Datei

package com.example.strassenlaternenapp;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;

public class Client {

    private InetSocketAddress adress;

    public Client(String hostname, int port) {
        adress = new InetSocketAddress(hostname, port);
    }

    public void sendMessage(String msg) {

        try {
            System.out.println("[Client] Verbinde zu Server...");
            Socket socket = new Socket();
            socket.connect(adress, 5000);
            System.out.println("[Client] Verbunden...");



            System.out.println("[Client] Sende Nachricht...");
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
            pw.println(msg);
            pw.flush();                            //schickt die "msg" ab
            System.out.println("[Client] Nachricht gesendet...");

            Scanner s = new Scanner(new BufferedReader(new InputStreamReader(socket.getInputStream())));
            if(s.hasNextLine()) {
                System.out.println("[Client] Neue Nachricht von Server: " + s.nextLine());
            }

            //Verbindung schließen
            pw.close();
            s.close();
            socket.close();

        } catch(Exception e) {
            e.printStackTrace();
        }

    }
}

Client-Datei

Wer findet meinen Fehler? Ich habe im Internet schon viel dazu gefunden, aber nichts hat funktioniert.

LG

LBr03

Programmieren, Java, Android Studio
2 Antworten
Android Studio: Margin für BottomNavigation-Item?

Hallo zusammen,

ich habe eine Frage bezüglich der BottomNavigationView. Auf StackOverflow habe ich seit über einer Woche keine Antwort erhalten, deshalb versuche ich es hier.

Ich benutze eine BottomNavigationView und möchte die Höhe animieren, damit es erweiterbar ist. Mein Problem ist, dass die Items vertikal zentriert bleiben. Aber ich möchte, dass es oben eine feste Margin von z.B. 5dp gibt. Wie ist es möglich, sie mit der Oberseite der Navigationsleiste nach oben zu bewegen?

So sieht es im Moment aus (Bildlink):

https://i.stack.imgur.com/a3bXC.gif

XML für ein Item (mit Text!) (im menu-Ordner):

<item
  android:id="@+id/testid1"
  android:icon="@drawable/ic_test1"
  android:title="@string/Overview"
  android:state_pressed="true"
/>

XML für Navbar:

<com.google.android.material.bottomnavigation.BottomNavigationView
  android:id="@+id/bottom_navigation"
  android:layout_width="match_parent"
  android:layout_height="56dp"
  android:layout_gravity="bottom"
  android:background="@color/white"
  app:elevation="0dp"
  app:itemIconSize="26dp"
  app:itemIconTint="@color/NavBarGrey"
  app:itemRippleColor="#B5F1F1F1"
  app:itemTextColor="@color/NavBarGrey"
  app:layout_constraintBottom_toBottomOf="parent"
  app:layout_constraintEnd_toEndOf="parent"
  app:layout_constraintHorizontal_bias="0.0"
  app:layout_constraintStart_toStartOf="parent"
  app:menu="@menu/bottom_nav_menu" />

Kotlin-Code für "ausklappen":

val anim = ValueAnimator.ofInt(
  convertDpToPixel(56.0).toInt(),
  convertDpToPixel(400.0).toInt())
anim.addUpdateListener { valueAnimator ->
  val
  val = valueAnimator.animatedValue as Int
  val layoutParams:
    ViewGroup.LayoutParams = bottom_navigation.getLayoutParams()
    layoutParams.height = val
    bottom_navigation.setLayoutParams(layoutParams)
}
anim.setInterpolator(OvershootInterpolator(1.0f))
anim.duration = 450
anim.start()

Das blaue Pluszeichen ist ein separates Element und kein Teil der NavBar. Deshalb kann ich das auch nach oben bewegen (siehe Bild!).

Beste Grüße und vielen Dank im Voraus!

Computer, Programmieren, Android, Android App, XML, Android Studio
1 Antwort
ImageButton wird nicht angezeigt (Android Studio)?

Hallo liebe Community,

Ich habe eine App programmiert, die mir mit einem WebView-Element eine Website anzeigt. Nun wollte ich einen ImageButton benutzen, um zur vorherigen Seite zurückzukehren, doch der Button wird nicht angezeigt, nur die Website. Bei einem normalen Button funktioniert dies Jedoch. Weiß jemand was der Fehler sein könnte?

Vielen Dan im Voraus,

Hallllomenschen

XML-Code der Activity:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <ImageButton
    android:id="@+id/imageButton2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:contentDescription="@string/imageDescription"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="@+id/logHost"
    app:layout_constraintTop_toTopOf="parent"
    android:src="@drawable/back" />

    <WebView
    android:id="@+id/logHost"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.0" />

    </WebView>
    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Computer, Handy, Webseite, Programmieren, Java, Android, Android App, Android Studio
1 Antwort
Java / Android Studio: split funktioniert nicht?

Hallo,

ich möchte gerade eine App programmieren, für die ich eine Website herunterladen möchte. Ich möchte die Website aber in einem Array in zwei Teile splitten und da taucht mein Problem auf. Immer wenn ich meine App starten möchte, zeigt Android Studio mir einen Fehler in Zeile 79:

String[] splitResult = result.split("<div class=\"sidebarContainer\">");

an. Schon einmal danke im Voraus.

(Ich habe alle nötigen Sachen importiert, kann die Zeile nur wegen der Länge nicht rein nehmen. Der Text wäre dann zu lang).

Hier mein Code (geschrieben in Java):

package com.example.a2erratedenvip;

public class MainActivity extends AppCompatActivity {
  Button button0, button1, button2, button3;
  ImageView imageView;
  ArrayList<String> celebUrls = new ArrayList<String>();
  ArrayList<String> celebNames = new ArrayList<String>();

  public class DownloadTask extends AsyncTask <String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
      String result = "";
      URL url;
      HttpURLConnection urlConnection = null;

      try {
        url = new URL(urls[0]);
        urlConnection = (HttpURLConnection) url.openConnection();
        InputStream inputStream = urlConnection.getInputStream();
        InputStreamReader reader = new InputStreamReader(inputStream);

        reader.read();
        int data = reader.read();

        while (data != -1) {
          char current = (char)data;
          result += current;
          data = reader.read();
        }

        return result;
      }
      catch (Exception e) {
        e.printStackTrace();
        return null;
      }
    }
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button0 = findViewById(R.id.button_0);
    button1 = findViewById(R.id.button_1);
    button2 = findViewById(R.id.button_2);
    button3 = findViewById(R.id.button_3);
    imageView = findViewById(R.id.imageView);

    DownloadTask task = new DownloadTask();
    String result = null;

    try {
      result = task.execute("http://www.posh24.se/kandisar").get();
      String[] splitResult = result.split("<div class=\"sidebarContainer\">");
      Pattern p = Pattern.compile("<img src=\"(.*?)\"");
      Matcher m = p.matcher(splitResult[0]);

      while (m.find()) {
        celebUrls.add(m.group(1));
      }
    }
    catch (ExecutionException e) {
      e.printStackTrace();
    }
    catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}
Schule, Programmieren, Java, Android, split, Android Studio
2 Antworten
Unreal Engine oder doch eher Blender?

Nun ich fange mal so an,

ich habe mich dazu entschlossen eine App zu programmieren die allerdings nicht einem Spiel oder anderem ähnelt, sondern eine App welche mit einem anderem, auch von mir entwickeltem, Produkt kommunizieren soll, sei es über Bluetooth oder über WLAN. Nun habe ich mir überlegt, dass die Oberfläche der App so gestalten werden soll, das es nicht wie jede anderen herkömmliche App aussieht, sondern zum Teil 3D Design und mit 3D Animationen. Ich möchte erst einmal mit Android Arbeiten, IOS steht fürs erste Außen vor. Mein Gedankengang war so das ich beispielsweise ein kleines Modell in 3D designe und diesen in der App betrachten kann und entsprechende Funktionen aktivieren kann. Dabei ist mir in den Sinn gekommen das Modell in Blender zu designen und später bei Android Studio mit einzubauen und damit zu arbeiten. Dabei ist zu beachten das hierbei sehr Hardware nah programmiert wird, weshalb ich C/C++ nutzen werden. Android Studio unterstützt diese Sprache, Blender auch. Nun habe ich nach gelesen das Unreal Engine auch mit C/C++ klarkommt. Der Unterschied ist allerdings das Blender ein Modellierungsprogramm ist und Unreal Engine eine Game-Engine. Nun stehe ich so bisschen auf dem Schlauch. Was würdet ihr denn so Empfehlen b.z.w raten? Eventuell liege ich ja ganz falsch und es gibt andere Methoden meinen Wunsch zu ermöglichen. Freue mich schon auf eure Antworten!

Computer, Technik, Blender, 3D Modellierung, 3D Modelling, Blender 3d, Technologie, blender-game-engine, Unreal Engine, app entwicklung, Android Studio, Unreal Engine 4
3 Antworten
Android Studio: Ungültiger Dateideskriptor?

Guten Abend,

ich habe auf meinem Windows 10-Laptop ein Projekt in Android Studio angefangen.

Nun wollte ich auf meinem Linux Mint-Rechner daran weiter arbeiten. Deshalb habe ich mir das Projekt auf das NAS gezogen, um mit beiden Geräten arbeiten zu können.

Am Windows 10-Laptop klappt alles ganz wunderbar.

Doch bei Android Studio auf Linux bekomme ich, wenn ich die App auf meinem Handy ausführen will, die Fehlermeldung:

ungültiger Dateideskriptor
What went wrong: Failed to release lock on file hash cache (/home/johannes/Code/Penguin/.gradle/5.4.1/fileHashes) > Ungültiger Dateideskriptor

-

Um Fehler auszuschließen, habe ich am PC ein komplett neues Projekt erstellt. Wie erwartet kommt immer noch die gleiche Fehlermeldung.

Mein Handy wird vom PC korrekt erkannt und USB-Debugging ist aktiviert.

In Android Studio wird mein Handy automatisch ausgewählt, um die App auszuführen. Im Connection Assistant steht aber, dass kein Gerät erkannt wurde. Das finde ich komisch, da ja mein Handy angezeigt wird, um die App laufen zu lassen.

Um diesen Fehler auszuschließen, wollte ich die App auf einem virtuellen Gerät ausführen. Dazu habe ich mein SM J320F mit Android 5.1.1 nachgebaut und das Google Pixel 3 sowohl mit Android 9 und 10 verwendet.

Es bleibt immer die gleiche Fehlermeldung.

Im Internet finde ich nichts zu diesem Fehler, den scheinbar keiner außer mir hat.

Kann mir jemand von euch weiterhelfen? Mit der Fehlermeldung kann ich mit meinem laienhaften Wissen leider nichts anfangen.

Vielen Dank schon mal für eure Hilfe! 😃

PC, Computer, Linux, Programmieren, Java, Android, Android App, Android Studio
1 Antwort
Android Studio Fehler Emulator woher kommt er?

Habe diesen Fehler, aber weiß nicht woher er kommt. Läuft alles super mit meiner App und diese ist eigentlich fast fertig. Aber habe den Fehler neulich mal entdeckt. Kann das ein Fehler vom Emulator sein, welchen ich vernachlässigen kann(PIXEL XL API 29)?

2019-11-17 13:29:02.031 3886-3886/system_process E/LoadedApk: Unable to instantiate appComponentFactory

   java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[],nativeLibraryDirectories=[/system/priv-app/GoogleSdkSetup/lib/x86, /system/lib, /system/product/lib, /system/lib, /system/product/lib]]

       at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)

       at java.lang.ClassLoader.loadClass(ClassLoader.java:379)

       at java.lang.ClassLoader.loadClass(ClassLoader.java:312)

       at android.app.LoadedApk.createAppFactory(LoadedApk.java:256)

       at android.app.LoadedApk.updateApplicationInfo(LoadedApk.java:370)

       at android.app.ActivityThread.handleDispatchPackageBroadcast(ActivityThread.java:5951)

       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1941)

       at android.os.Handler.dispatchMessage(Handler.java:107)

       at android.os.Looper.loop(Looper.java:214)

       at com.android.server.SystemServer.run(SystemServer.java:541)

       at com.android.server.SystemServer.main(SystemServer.java:349)

       at java.lang.reflect.Method.invoke(Native Method)

       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)

       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:908)

Android, Android Studio
1 Antwort
Warum bekomme ich in Android Studio eine NullPointerException, wenn ich findViewById() auf einen Button anwende?

Guten Morgen,

ich arbeite im Moment in zwei Klassen: In der von Android Studio angelegten MainActivity und einer selbsterstellten Klasse (BrainTrainer).

(Arbeitete zuerst nur in der ManActivity, möchte den Code nun in die BrainTrainer outsourcen.).

Exception

java.lang.RuntimeException: Unable to start activity ComponentInfo{net.xxxxx.braintrainer/net.xxxxx.braintrainer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

MainActivity.java

public class MainActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        final BrainTrainer bt = new BrainTrainer(getApplicationContext());
        bt.gameStartButton = findViewById(R.id.gameStartButton);
    }
}

BrainTrainer.java

public class BrainTrainer extends Activity
{
    public Button gameStartButton;
    public Context c;

    public BrainTrainer(Context context)
    {
        this.c = context;
   
        gameStartButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            { 
        
            }
        }
    }
}

Hat jemand eine Idee, wo hier der Wurm drin ist?

Dankeschön!

Liebe Grüße

Programmieren, Java, android-sdk, Android Studio
2 Antworten

Meistgelesene Fragen zum Thema Android Studio