EditText in externer Klasse abfragen?

  • Antworten:3
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 9

29.02.2016, 16:50:00 via Website

Hallo zusammen, ich bin 's nochmal.

Dieses mal habe ich die Frage, ob man ein EditText in einer externen Klasse, die eigentlich gar nichts mit der Activity zu tun hat, abfragen kann. Der Hintergrund ist folgender:

Ich möchte mit einer App Integrale berechnen können. Dazu habe ich mir folgenden Code herausgesucht: www.java-forum.org/thema/numerische-integration-mit-java.52350/. Der Funktioniert mit dem Beispiel auch einwandfrei.
Mein Problem ist jetzt aber, dass man bei diesem oben genannten Code, die Formel in einer externen Klasse eingeben muss. Und da ich möchte, dass man die Formel in ein EditText-Feld eingeben muss. Das habe ich, in der externen Klasse, wie folgt geölst:

public class Function extends AppCompatActivity implements Integral.FunctionI{

EditText formel = (EditText) findViewById(R.id.funktion);
double fml = Double.parseDouble(formel.getText().toString());

@Override
public double f(double x) {
    return fml;
}

}

Fehlermeldung sieht wie folgt aus:

02-29 15:46:42.851 2370-2370/com.example.jan.rechner E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.jan.rechner, PID: 2370
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.jan.rechner/com.example.jan.rechner.Integral}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
at android.app.Activity.findViewById(Activity.java:2090)
at com.example.jan.rechner.Function.(Function.java:11)
at com.example.jan.rechner.Integral.(Integral.java:33)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Gibt's da eine Lösung?

Grüße, Jan

Antworten
Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 7.158

29.02.2016, 17:10:20 via Website

Hallo,

wenn ich deinen Code so sehe würde ich sagen, dein Problem ist das ViewObjekt

Du darfst nicht das EditText-View außerhalb der onCreate-Methode Referenzieren und vor allem nicht vor der Initialisierung des Layouts.

Edit:

EditText formel;
double fml;


@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContent(R.layout.main_activity_layout);
    formel = (EditText) findViewById(R.id.funktion);
    fml = Double.parseDouble(formel.getText().toString());
}

— geändert am 29.02.2016, 17:14:28

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

Antworten
  • Forum-Beiträge: 9

29.02.2016, 17:26:40 via Website

Okay, danke, die Fehlermeldung ist schon mal weg.

Leider bekomme ich jetzt als Ergegnis "0.0" raus. Ist es denn überhaupt möglich auf diese Weise eine Formel einzugeben, die der Code verarbeiten kann?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

29.02.2016, 17:42:31 via Website

Nein ist es nicht.
Du benutzt nur Double.parseDouble() damit kannst du nur Double Zahlen aus eine String parsen, und keine Formaln auswerten.
Um eine Mathematische Formal auwerten zu können bedarf es mehr logik als nur ParseDouble.
Da brauchst du eine Lib oder selber geschriebenen Code, welcher die Formel interpretiert und dann berechnet.

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

Ludy

Antworten

Empfohlene Artikel