Fragen zu Java

Diskutiere Fragen zu Java im Java Basics - Anfänger-Themen Bereich.
CT9288

CT9288

Hallo ihr Lieben.
Nachdem ich meine erste App veröffentlicht habe (nicht erwähnenswert, da sowieso kein Erfolg) und ich mir eine Pause gegönnt habe, bin ich nun wieder an den Start gegangen. Jetzt arbeite ich an meiner zweiten App, es soll eine kleine, informative App sein, mehr nicht. Aber im Rahmen des Ganzen kamen mir wieder Fragen, auf die ich so keine Antwort finde.

1. Frage: Angenommen ich erstelle eine kleine Simulation, ein kleiner Kreis, der Nahrung sucht, sich bewegt, der sich, bei einer bestimmten Nährstoffkonzentration teilt, in zwei Individuen. Angenommen die Menge an Individuen it auf 100 begrenzt, wie sähe das Theoretisch aus? Müsste für jedes Individuum eine separate Datei vorhanden sein, die man bei Bedarf Aktivieren oder deaktivieren kann? Ich denke da z.B. an die App Cell Lab, bei der sich eine Zelle in endlos viele teilt. Was ist der Zauber dahinter?

2. Frage: das mit den Activities bei Android Studio finde ich interessant, man ruft eine neue Activity und beendet die Alte. Soetwas hatte ich bei Netbeans nicht. Ist das AS Spezifisch? Oder lässt sich sowas auch in Netbeans und ähnliche impementieren?

3. Frage: Wenn ich ein Point und Click adventure erstellen würde, wie kann ich z.B. das Bild eines Raumes als Hintergrund plazieren, und dann im Vordergrund transparente ImageButtons plazieren, auf die man clickt, um einen Gegenstand zu finden? Also genauer, wie schafft man es, dass die Kästchen immer dort bleiben, wo auch die richtige Stelle im Bild wäre? Manchmal verschieben sich Positionen, je nach Endgerät. Kann man soetwas an ein Bild "tackern"?

Danke erst mal im Voraus. Ich bin gespannt =)
 
mihe7

mihe7

2. Frage: das mit den Activities bei Android Studio finde ich interessant, man ruft eine neue Activity und beendet die Alte. Soetwas hatte ich bei Netbeans nicht. Ist das AS Spezifisch? Oder lässt sich sowas auch in Netbeans und ähnliche impementieren?
Das hat nichts mit der IDE zu tun. So arbeitet Android.

Müsste für jedes Individuum eine separate Datei vorhanden sein, die man bei Bedarf Aktivieren oder deaktivieren kann?
Wieso Datei? Jedes Individuum ist ein Objekt, oder verstehe ich Dich falsch?

Manchmal verschieben sich Positionen, je nach Endgerät. Kann man soetwas an ein Bild "tackern"?
Man kann immer mit fixen Positionen arbeiten. S. auch https://developer.android.com/training/custom-views/custom-drawing
 
W

White_Fox

1. Frage: Angenommen ich erstelle eine kleine Simulation, ein kleiner Kreis, der Nahrung sucht, sich bewegt, der sich, bei einer bestimmten Nährstoffkonzentration teilt, in zwei Individuen. Angenommen die Menge an Individuen it auf 100 begrenzt, wie sähe das Theoretisch aus? Müsste für jedes Individuum eine separate Datei vorhanden sein, die man bei Bedarf Aktivieren oder deaktivieren kann? Ich denke da z.B. an die App Cell Lab, bei der sich eine Zelle in endlos viele teilt. Was ist der Zauber dahinter?
Also...ICH würde mir eine Klasse schreiben und das Verhalten einer Zelle in dieser implementieren.
 
CT9288

CT9288

Okay, erst mal vielen Dank für eure Antworten.

Ich bräuchte mal wieder Hilfe. Es geht um ein Problem, dass zwar aktuell keine Schwierigkeiten macht, aber langfristig schon, und ich sitze jetzt bestimmt schon seit 2 Stunden daran zu Googeln und zu wurschteln und was weiß ich, ich habe Codes auskommentiert, Fehlerquellen isoliert, habe die betroffenen Code-Zeilen mal in den Constructor genommen, mal draußen gelassen, aber ich raffe einfach nicht, was das Problem ist.

Android Studio

Aktuell ist es immer so, dass wenn ich per "cardName[1] = App.getContext().getString(R.string.card1);"

immer einen Null-Pointer-Fehler erhalte, obwohl in der IDE der String als Text angezeigt wird (also muss ja irgendwas ankommen), in der App allerdings führt es zum Absturz und zu gesagter Fehlermeldung. Wenn ich den Zugriff auf die Strings weglasse, und einfach etwas schreibe wie cardName[1] = "Herz Dame";
Dann gibt es kein Problem.
Internet sagt, womöglich erhält man den Nullpointer, weil die Variable, der String, zwar da sei, aber zum Zeitpunkt des Zugriffs nicht initialisiert.
Aber ich komme. nicht. weiter. Seit mindestens zwei stunden. Ich bin jetzt wie gesagt dazu übergegangen, die Strings handschriftlich zu ersetzen, aber langfristig muss das laufen, da die App bilingual werden soll.
Was mache ich nur falsch? Braucht ihr etwas spezielles zur Fehleranalyse? Schreibt nur, ich liefer euch dann, ich will nur nicht jetzt schon unnötig zutexten, wenns vielleicht auf der Hand liegt.

Vielen verzweifelten Dank im Voraus T.T
 
mihe7

mihe7

Vorausgesetzt, App ist eine Klasse, kann die NPE an der Stelle nur auftreten, wenn zum Zeitpunkt des Ausführung

a) cardName null ist
b) App.getContext() null liefert.

Ansonsten könnte auch App null sein. Das würde ich an Deiner Stelle mal prüfen.
 
CT9288

CT9288

Okay, ich habe die App.class selbst nicht in erwägung gezogen und mich gleich drann gemacht, aber ich finde ums verrecken meinen Fehler nicht.

Das hier ist der Fehler-Log:

Code:
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.manticore.manticorekartenlegen, PID: 12424
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.manticore.manticorekartenlegen/com.manticore.manticorekartenlegen.SheetActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getString(int)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3042)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3282)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1970)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7156)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getString(int)' on a null object reference
        at com.manticore.manticorekartenlegen.CardNames.<init>(CardNames.java:9)
        at com.manticore.manticorekartenlegen.SheetActivity.<init>(SheetActivity.java:13)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1219)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3030)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3282) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1970) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7156) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975) 
I/Process: Sending signal. PID: 12424 SIG: 9
Disconnected from the target VM, address: 'localhost:8600', transport: 'socket'
Hier die CardNames.class

Java:
package com.manticore.manticorekartenlegen;

public class CardNames {

    public String[] cardName = new String[53];

    CardNames(){
        cardName[0] = "2 of Hearts";
        cardName[1] = App.getContext().getString(R.string.card1);
//        cardName[2] = App.getContext().getString(R.string.card2);
//        cardName[3] = App.getContext().getString(R.string.card3);
//        cardName[4] = App.getContext().getString(R.string.card4);
//        cardName[5] = App.getContext().getString(R.string.card5);
//        cardName[6] = App.getContext().getString(R.string.card6);
//        cardName[7] = App.getContext().getString(R.string.card7);
//        cardName[8] = App.getContext().getString(R.string.card8);
//        cardName[9] = App.getContext().getString(R.string.card9);
//        cardName[10] = App.getContext().getString(R.string.card10);
//        cardName[11] = App.getContext().getString(R.string.card11);
//        cardName[12] = App.getContext().getString(R.string.card12);
//
//        cardName[13] = App.getContext().getString(R.string.card13);
//        cardName[14] = App.getContext().getString(R.string.card14);
//        cardName[15] = App.getContext().getString(R.string.card15);
//        cardName[16] = App.getContext().getString(R.string.card16);
//        cardName[17] = App.getContext().getString(R.string.card17);
//        cardName[18] = App.getContext().getString(R.string.card18);
//        cardName[19] = App.getContext().getString(R.string.card19);
//        cardName[20] = App.getContext().getString(R.string.card20);
//        cardName[21] = App.getContext().getString(R.string.card21);
//        cardName[22] = App.getContext().getString(R.string.card22);
//        cardName[23] = App.getContext().getString(R.string.card23);
//        cardName[24] = App.getContext().getString(R.string.card24);
//        cardName[25] = App.getContext().getString(R.string.card25);
//
//        cardName[26] = App.getContext().getString(R.string.card26);
//        cardName[27] = App.getContext().getString(R.string.card27);
//        cardName[28] = App.getContext().getString(R.string.card28);
//        cardName[29] = App.getContext().getString(R.string.card29);
//        cardName[30] = App.getContext().getString(R.string.card30);
//        cardName[31] = App.getContext().getString(R.string.card31);
//        cardName[32] = App.getContext().getString(R.string.card32);
//        cardName[33] = App.getContext().getString(R.string.card33);
//        cardName[34] = App.getContext().getString(R.string.card34);
//        cardName[35] = App.getContext().getString(R.string.card35);
//        cardName[36] = App.getContext().getString(R.string.card36);
//        cardName[37] = App.getContext().getString(R.string.card37);
//        cardName[38] = App.getContext().getString(R.string.card38);
//
//        cardName[39] = App.getContext().getString(R.string.card39);
//        cardName[40] = App.getContext().getString(R.string.card40);
//        cardName[41] = App.getContext().getString(R.string.card41);
//        cardName[42] = App.getContext().getString(R.string.card42);
//        cardName[43] = App.getContext().getString(R.string.card43);
//        cardName[44] = App.getContext().getString(R.string.card44);
//        cardName[45] = App.getContext().getString(R.string.card45);
//        cardName[46] = App.getContext().getString(R.string.card46);
//        cardName[47] = App.getContext().getString(R.string.card47);
//        cardName[48] = App.getContext().getString(R.string.card48);
//        cardName[49] = App.getContext().getString(R.string.card49);
//        cardName[50] = App.getContext().getString(R.string.card50);
//        cardName[51] = App.getContext().getString(R.string.card51);
//
//        cardName[52] = App.getContext().getString(R.string.card52);
    }
}
Das hier wäre die App.class

Java:
package com.manticore.manticorekartenlegen;

import android.app.Application;
import android.content.Context;

public class App extends Application {
    
    private static Context mContext;
    
    @Override
    public void onCreate(){
        super.onCreate();
        mContext = this;
    }
    
    public static Context getContext(){
        return mContext;
    }
}
und das hier meine strings.xml

XML:
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Manticore</string>
    <string name="error">Error: please call Support</string>

    <string name="contentMeaningHeadline">Meaning:</string>
    <string name="contentMeaning">Lovers</string>

    <string name="main0">Card Reading</string>
    <string name="main1">Whats behind?</string>
    <string name="main2">Techniques</string>

    <string name="card0">2 of Hearts</string>
    <string name="card1">3 of Hearts</string>
    <string name="card2">4 of Hearts</string>
    <string name="card3">5 of Hearts</string>
    <string name="card4">6 of Hearts</string>
    <string name="card5">7 of Hearts</string>
    <string name="card6">8 of Hearts</string>
    <string name="card7">9 of Hearts</string>
    <string name="card8">10 of Hearts</string>
    <string name="card9">2 of Hearts</string>
    <string name="card10">Jack of Hearts</string>
    <string name="card11">King of Hearts</string>
    <string name="card12">Ace of Hearts</string>

    <string name="card13">2 of Diamonds</string>
    <string name="card14">3 of Diamonds</string>
    <string name="card15">4 of Diamonds</string>
    <string name="card16">5 of Diamonds</string>
    <string name="card17">6 of Diamonds</string>
    <string name="card18">7 of Diamonds</string>
    <string name="card19">8 of Diamonds</string>
    <string name="card20">9 of Diamonds</string>
    <string name="card21">10 of Diamonds</string>
    <string name="card22">Jack of Diamonds</string>
    <string name="card23">Queen of Diamonds</string>
    <string name="card24">King of Diamonds</string>
    <string name="card25">Ace of Diamonds</string>

    <string name="card26">2 of Clubs</string>
    <string name="card27">3 of Clubs</string>
    <string name="card28">4 of Clubs</string>
    <string name="card29">5 of Clubs</string>
    <string name="card30">6 of Clubs</string>
    <string name="card31">7 of Clubs</string>
    <string name="card32">8 of Clubs</string>
    <string name="card33">9 of Clubs</string>
    <string name="card34">10 of Clubs</string>
    <string name="card35">Jack of Clubs</string>
    <string name="card36">Queen of Clubs</string>
    <string name="card37">King of Clubs</string>
    <string name="card38">Ace of Clubs</string>

    <string name="card39">2 of Spades</string>
    <string name="card40">3 of Spades</string>
    <string name="card41">4 of Spades</string>
    <string name="card42">5 of Spades</string>
    <string name="card43">6 of Spades</string>
    <string name="card44">7 of Spades</string>
    <string name="card45">8 of Spades</string>
    <string name="card46">9 of Spades</string>
    <string name="card47">10 of Spades</string>
    <string name="card48">Jack of Spades</string>
    <string name="card49">Queen of Spades</string>
    <string name="card50">King of Spades</string>
    <string name="card51">Ace of Spades</string>

    <string name="card52">Joker</string>

    <string name="cardDescription0">Käsekuchen</string>

    <string name="cardRead0">Käsekuchen</string>
    <string name="cardRead1">Käsekuchen</string>
    <string name="cardRead2">Käsekuchen</string>

    <string name="contentTitle">Blank</string>
    <string name="contentBlank">Hier könnte ein Text stehen. Hier könnte ein Text stehen. Hier könnte ein Text stehen. Hier könnte ein Text stehen.</string>
</resources>
Was bräuchte an mehr? Ab der zweiten cardName[] sind alle auskommentiert, da es bereits ab cardName[1] nicht läuft und ich den Fehler bekomme. Ich raffs nicht...
 
mihe7

mihe7

Bei einer Activity (hier: SheetActivity) darfst Du Dinge, die das Framework betreffen, nicht im Konstruktor verwenden/initialisieren. Dafür gibt es z. B. den Activity-Lifecycle. Initialisiere z. B. in onCreate.
 
CT9288

CT9288

Hm, das Problem ist, ich hab in der SheetActivity nichts in einem Konstruktor.
Weißt du, ich habe Wochen, Monate an meiner ersten App gesessen und diese sogar zum funktionieren gebracht und in den Playstore geladen...und DENNOCH verstehe ich gerade mal die Hälfte dessen, was du versucht hast, mir zu sagen 😓 es ist so ärgerlich

Java:
package com.manticore.manticorekartenlegen;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

public class SheetActivity extends AppCompatActivity {

    private CardReadActivity cra = new CardReadActivity();
    private Cards crd = new Cards();
    private CardNames crdNames = new CardNames();
    private CardDescriptions crdDescr = new CardDescriptions();

    private ImageView imgCardHolder;
    private TextView textCardTitle, textCardContent;

    private int resIDA;

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

        textCardTitle = findViewById(R.id.textCardTitle);
        textCardContent = findViewById(R.id.textCardContent);
        imgCardHolder = findViewById(R.id.imgCardHolder);

        WhichCard();
    }

    public void WhichCard(){
        textCardTitle.setText(crdNames.cardName[cra.cardCount]);
        resIDA = getResources().getIdentifier(crd.card[cra.cardCount], "drawable", getPackageName());
        imgCardHolder.setImageResource(resIDA);
        textCardContent.setText(crdDescr.cardDescription[cra.cardCount]);
    }

}
 
mihe7

mihe7

Hm, das Problem ist, ich hab in der SheetActivity nichts in einem Konstruktor.
Du initialisierst die Variablen aber auf "Klassenebene":
private CardReadActivity cra = new CardReadActivity(); private Cards crd = new Cards(); private CardNames crdNames = new CardNames(); private CardDescriptions crdDescr = new CardDescriptions();
Das ist im Prinzip nichts anderes, als würde die Initialisierung im Konstruktor stehen.

Pack die Initialisierungen (new ...) mal alle in die onCreate-Methode.

und DENNOCH verstehe ich gerade mal die Hälfte dessen, was du versucht hast, mir zu sagen 😓 es ist so ärgerlich
Ohne den Activity-Lifecycle zu kennen bzw. zu verstehen, ist es sinnlos, Android-Programme zu schreiben. Selbst mit dessen Kenntnis ist die Android-Programmierung strange :)
 
CT9288

CT9288

Java:
package com.manticore.manticorekartenlegen;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

public class SheetActivity extends AppCompatActivity {

    private CardReadActivity cra;
    private Cards crd;
    private CardNames crdNames;
    private CardDescriptions crdDescr;

    private ImageView imgCardHolder;
    private TextView textCardTitle, textCardContent;

    private int resIDA;

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

        new CardReadActivity();
        new Cards();
        new CardNames();
        new CardDescriptions();

        textCardTitle = findViewById(R.id.textCardTitle);
        textCardContent = findViewById(R.id.textCardContent);
        imgCardHolder = findViewById(R.id.imgCardHolder);

        WhichCard();
    }

    public void WhichCard(){
        textCardTitle.setText(crdNames.cardName[cra.cardCount]);
        resIDA = getResources().getIdentifier(crd.card[cra.cardCount], "drawable", getPackageName());
        imgCardHolder.setImageResource(resIDA);
        textCardContent.setText(crdDescr.cardDescription[cra.cardCount]);
    }

}
So inetwa? Bekomme den gleichen Fehler nach wie Vor T.T
Das ärgerliche ist, ich guck mir oft meine erste App an, die ähnlich aufgebaut ist, und bei der musste ich vieles davon nicht machen. Weder bei onCreate initialisieren noch anderes. Da kam dieses Problem nicht.

Ich hab mir was überlegt. Da ich zwar jede Hilfe gerne annehme, aber auch nicht untätig auf Hilfe warten möchte, werde ich die Tage eine Kopie der App erstellen, alles rauslöschen was geht und das Problem herauskristallisieren, dann werd ichs weiter versuchen. Dann kann ich auch mehr Code posten, ohne dass es unübersichtlich wird...
Erstmal vielen Dank euch allen
 
Zuletzt bearbeitet:
mihe7

mihe7

new CardReadActivity();
new Cards();
new CardNames();
new CardDescriptions();
Damit erzeugst Du neue Objekte, die musst Du schon auch Deinen Variablen zuweisen:
Java:
cra = new CardReadActivity(); 
crd = new Cards();
crdNames = new CardNames();
crdDescr = new CardDescriptions();
 
CT9288

CT9288

Ohman. Ich befolge eure Hilfsangebote so gut es mir möglich ist. Ich habe meine App jetzt soweit auf das nötigste reduziert und bekomme nach wie vor diese Fehlermeldungen:
Code:
Process: com.manticore.manticorekartenlegen, PID: 16530
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.manticore.manticorekartenlegen/com.manticore.manticorekartenlegen.SheetActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getString(int)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3042)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3282)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1970)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7156)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getString(int)' on a null object reference
        at com.manticore.manticorekartenlegen.CardNames.<init>(CardNames.java:8)
        at com.manticore.manticorekartenlegen.SheetActivity.<init>(SheetActivity.java:18)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1219)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3030)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3282) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1970) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7156) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

Es geht also nach wie vor darum, einen Fehler beim Zugriff auf die Strings zu beheben, oder?
Meine dateien sehen wie Folgt aus:

Java:
package com.manticore.manticorekartenlegen;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    public int cardCount;

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

    public void SheetActivity(View v) {
        Intent i = new Intent(this, SheetActivity.class);
        startActivity(i);
        overridePendingTransition(0, 0);
        i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    }

    public void CallHeart2(View v) {
        cardCount = 0;
        SheetActivity(v);
    }
}

Java:
package com.manticore.manticorekartenlegen;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

public class SheetActivity extends AppCompatActivity {

    private MainActivity cra;
    private Cards crd;
    private CardNames crdNames;
    private CardDescriptions crdDescr;

    private ImageView imgCardHolder;
    private TextView textCardTitle, textCardContent;

    private int resIDA;

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

        cra = new MainActivity();
        crd = new Cards();
        crdNames = new CardNames();
        crdDescr = new CardDescriptions();

        textCardTitle = findViewById(R.id.textCardTitle);
        textCardContent = findViewById(R.id.textCardContent);
        imgCardHolder = findViewById(R.id.imgCardHolder);

        WhichCard(crdNames.cardName, crd.card, crdDescr.cardDescription, cra.cardCount);
    }

    public void WhichCard(String[] name, String[] card, String[] description, int count){
        textCardTitle.setText(name[count]);
        resIDA = getResources().getIdentifier(card[count], "drawable", getPackageName());
        imgCardHolder.setImageResource(resIDA);
        textCardContent.setText(description[count]);
    }

}

Java:
package com.manticore.manticorekartenlegen;

import android.app.Application;
import android.content.Context;

public class App extends Application {
    
    private static Context mContext;
    
    @Override
    public void onCreate(){
        super.onCreate();
        mContext = this;
    }
    
    public static Context getContext(){
        return mContext;
    }
}

Und hier noch die drei Card.classes die die String-Infos enthalten, alle zusammengefasst, also nicht wundern.

Java:
Cards.java:
package com.manticore.manticorekartenlegen;

public class Cards {

    public String[] card = new String[1];

    Cards(){
        card[0] = "card_herz_2";
    }
}

CardNames.java:
package com.manticore.manticorekartenlegen;

public class CardNames {

    public String[] cardName = new String[1];

    CardNames(){
        cardName[0] = App.getContext().getString(R.string.card0);
    }
}

CardDescriptions.java:
package com.manticore.manticorekartenlegen;

public class CardDescriptions {

    public String[] cardDescription = new String[1];

    CardDescriptions(){
        cardDescription[0] = App.getContext().getString(R.string.cardExplanation0);
    }

}


Ich verstehe es nicht, ich sitze hier seit stunden, auch mit eurer Hilfe. So große Probleme hatte ich bei meiner ersten App nicht, hat sich vielleicht der Duktus in Android Studio irgendwie geändert? Benutze ich irgendwas veraltetes? o_O
 
CT9288

CT9288

Habe einen Rebuild gemacht. Ich habs eben gelesen, damals war der Fehler auf Zeile 18, das wundert mich jetzt immernoch, denn tatsächlich wird der Fehler weiterhin in Zeile 28 angegeben.

at com.manticore.manticorekartenlegen.CardNames.<init>(CardNames.java:8)
at com.manticore.manticorekartenlegen.SheetActivity.onCreate(SheetActivity.java:28)

Es hat sich nichts groß geändert. Gibt es keinen anderen Weg, um auf Ressourcen zuzugreifen?
 
CT9288

CT9288

Ich habe euch nicht vergessen, verzeihung, aber wir ziehen gerade um und haben viel zu renovieren, dann noch mit kleinem Kind, viel Chaos.

Ja, super peinlich. Es lag letzten Endes an der Manifest... die ganze Mühe wegen sowas kleinem. Aber dennoch vielen Dank für eure Hilfe und Unterstützung. Die App funktioniert soweit, aber weiterarbeiten ist erst mal schwierig.
Mit Freundlichen Grüßen
Ich.
 
Thema: 

Fragen zu Java

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben