2016-07-13 3 views
-4

Wenn ich die App in AVD in Eclipse starte funktioniert es gut bis ich auf Hinzufügen klicke: Die App wurde mit einer Nachricht beendet. Leider hat das Projekt aufgehört. Ich bin ziemlich neu bei Android, also könnte ich einen dummen Fehler machen. Bitte überprüfen Sie diesen Code und retten Sie mich aus dieser Krise.Ich versuche, toastClick in Eclipse AVD zu erstellen, aber die App stürzte ab, sobald ich auf die Schaltfläche klicke

MainActivity.java

package com.example.firstproject; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.widget.Button; 
import android.widget.EditText; 


public class MainActivity extends Activity { 

    Button button,btnAdd,btnSub; 
    EditText val1,val2; 

    double num1,num2,res; 

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


     val1 = (EditText) findViewById(R.id.txtVal1); 
     val2 = (EditText) findViewById(R.id.txtVal2); 
     btnAdd = (Button) findViewById(R.id.btnSum); 
     btnSub = (Button) findViewById(R.id.btnDiff); 

     btnAdd.setOnClickListener(new MyOnClickListener(this)); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

MyOnClickListener.java

package com.example.firstproject; 

import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Toast; 

public class MyOnClickListener extends MainActivity implements OnClickListener{ 

    MainActivity caller; 
    public MyOnClickListener(MainActivity activity) { 
    this.caller = activity; 
    } 
    public void onClick(View view) { 
     num1 = Double.parseDouble(val1.getText().toString()); 
     num2 = Double.parseDouble(val2.getText().toString()); 
     res = num1 + num2; 
     Toast.makeText(this, String.valueOf(res), Toast.LENGTH_SHORT).show(); 
    } 

} 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <EditText 
     android:id="@+id/txtVal1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="number" > 

     <requestFocus /> 
    </EditText> 

    <EditText 
     android:id="@+id/txtVal2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="number" /> 

    <Button 
     android:id="@+id/btnSum" 
     android:layout_width="127dp" 
     android:layout_height="wrap_content" 
     android:text="Add" /> 

    <Button 
     android:id="@+id/btnDiff" 
     android:layout_width="127dp" 
     android:layout_height="wrap_content" 
     android:text="Subtract" /> 

</LinearLayout> 

ERROR_LOG

07-13 01:02:24.800: D/(972): HostConnection::get() New Host Connection established 0xb8b52560, tid 972 
07-13 01:02:24.930: W/EGL_emulation(972): eglSurfaceAttrib not implemented 
07-13 01:02:24.960: D/OpenGLRenderer(972): Enabling debug mode 0 
07-13 01:02:42.092: D/AndroidRuntime(972): Shutting down VM 
07-13 01:02:42.092: W/dalvikvm(972): threadid=1: thread exiting with uncaught exception (group=0xb3aa3b90) 
07-13 01:02:42.152: E/AndroidRuntime(972): FATAL EXCEPTION: main 
07-13 01:02:42.152: E/AndroidRuntime(972): Process: com.example.firstproject, PID: 972 
07-13 01:02:42.152: E/AndroidRuntime(972): java.lang.NullPointerException 
07-13 01:02:42.152: E/AndroidRuntime(972): at com.example.firstproject.MyOnClickListener.onClick(MyOnClickListener.java:14) 
07-13 01:02:42.152: E/AndroidRuntime(972): at android.view.View.performClick(View.java:4424) 
07-13 01:02:42.152: E/AndroidRuntime(972): at android.view.View$PerformClick.run(View.java:18383) 
07-13 01:02:42.152: E/AndroidRuntime(972): at android.os.Handler.handleCallback(Handler.java:733) 
07-13 01:02:42.152: E/AndroidRuntime(972): at android.os.Handler.dispatchMessage(Handler.java:95) 
07-13 01:02:42.152: E/AndroidRuntime(972): at android.os.Looper.loop(Looper.java:137) 
07-13 01:02:42.152: E/AndroidRuntime(972): at android.app.ActivityThread.main(ActivityThread.java:4998) 
07-13 01:02:42.152: E/AndroidRuntime(972): at java.lang.reflect.Method.invokeNative(Native Method) 
07-13 01:02:42.152: E/AndroidRuntime(972): at java.lang.reflect.Method.invoke(Method.java:515) 
07-13 01:02:42.152: E/AndroidRuntime(972): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
07-13 01:02:42.152: E/AndroidRuntime(972): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
07-13 01:02:42.152: E/AndroidRuntime(972): at dalvik.system.NativeStart.main(Native Method) 
+3

Was ist das Crash-Protokoll – thealeksandr

+0

gerade Zusammenhang mit MyOclicListener Klasse in Toast verwenden .. –

Antwort

0

Sie haben null object reference of EditText bekam während num1 Wert von val1 Variable EditText bekommen. Greifen Sie auf diese Variable zu, indem Sie caller verwenden.

public void onClick(View view) { 
     num1 = Double.parseDouble(caller.val1.getText().toString()); 
     num2 = Double.parseDouble(caller.val2.getText().toString()); 
     res = num1 + num2; 
     Toast.makeText(caller, String.valueOf(res), Toast.LENGTH_SHORT).show(); 
} 
+0

Wenn ich btnSub.setOnCliCkListner (neu OnClickListener) nennen muß, wie ich für diesen Fall anrufen kann –

+0

@SarojShrestha Zuerst müssen 'btnSub' hinzufügen click listner in' MainActivity' wie 'btnSub.setOnClickListener (new MyOnClickListener (this));'. Dann müssen Sie in der 'MyOnClickListener'-Klasse den Schalter case verwenden, in dem Sie über die ID zugreifen können:' btnSub.setOnClickListener (new MyOnClickListener (this)); 'und' switch (view.getId()) { Fall R.id .btnSumme: // alter Code Bruch; Fall R.id.btnDiff: Toast.makeText (Aufrufer, "Diff genannt", Toast.LENGTH_SHORT) .show(); Pause; } ' – Lawrance

0

Sie benötigen einen Context Referenz. Sie können explizit als Parameter übergeben, wenn Sie Ihre Class erstellen. so sollten Sie Ihren Code sein,

public class MyOnClickListener erweitert MainActivity OnClickListener implementiert {

MainActivity caller; 
public MyOnClickListener(MainActivity activity) { 
this.caller = activity; 
} 
public void onClick(View view) { 
    num1 = Double.parseDouble(val1.getText().toString()); 
    num2 = Double.parseDouble(val2.getText().toString()); 
    res = num1 + num2; 
    Toast.makeText(caller, String.valueOf(res), Toast.LENGTH_SHORT).show(); 
} 

} 
1

können Sie erhalten die val1 und val2 Werte und implementieren können button Zuhörer gleichen Klasse wie das ist.

public class MainActivity extends Activity { 

    Button button,btnAdd,btnSub; 
    EditText val1,val2; 

    double num1,num2,res; 

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


     val1 = (EditText) findViewById(R.id.txtVal1); 
     val2 = (EditText) findViewById(R.id.txtVal2); 
     btnAdd = (Button) findViewById(R.id.btnSum); 
     btnSub = (Button) findViewById(R.id.btnDiff); 

     btnAdd.setOnClickListener(new OnClickListener(){ 

      public void onClick(View view) { 
       num1 = Double.parseDouble(val1.getText().toString()); 
       num2 = Double.parseDouble(val2.getText().toString()); 
       res = num1 + num2; 
       Toast.makeText(MainActivity.this, String.valueOf(res), Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 
Verwandte Themen