-1

submit をクリックするとアプリがクラッシュします。クラッシュするButton場所として qf.xml と Math.java を見てください。以下のテキストはlogcat(アプリの初期化からクラッシュまで) からのものです。

05-20 12:08:11.671: D/libEGL(22022): ロードされた /system/lib/egl/libGLES_android.so
05-20 12:08:11.686: D/libEGL(22022): ロード済み /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
05-20 12:08:11.694: D/libEGL(22022): ロード済み /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
05-20 12:08:11.694: D/libEGL(22022): ロード済み /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
05-20 12:08:11.866: D/OpenGLRenderer(22022): デバッグ モードを有効にしています 0
05-20 12:08:16.514: D/OpenGLRenderer(22022): キャッシュのフラッシュ (モード 0)
05-20 12:08:22.335: D/AndroidRuntime(22022): VM をシャットダウンしています
05-20 12:08:22.335: W/dalvikvm (22022): threadid=1: キャッチされない例外で終了するスレッド (グループ = 0x40a421f8)
05-20 12:08:22.342: E/AndroidRuntime(22022): 致命的な例外: メイン
05-20 12:08:22.342: E/AndroidRuntime(22022): java.lang.NullPointerException
05-20 12:08:22.342: E/AndroidRuntime(22022): com.wael.test.Math$1$1.onClick(Math.java:85)
05-20 12:08:22.342: E/AndroidRuntime (22022): android.view.View.performClick (View.java:3511) で
05-20 12:08:22.342: E/AndroidRuntime(22022): android.view.View$PerformClick.run(View.java:14105) で
05-20 12:08:22.342: E/AndroidRuntime(22022): android.os.Handler.handleCallback(Handler.java:605) で
05-20 12:08:22.342: E/AndroidRuntime(22022): android.os.Handler.dispatchMessage(Handler.java:92) で
05-20 12:08:22.342: E/AndroidRuntime(22022): android.os.Looper.loop(Looper.java:137)
05-20 12:08:22.342: E/AndroidRuntime(22022): android.app.ActivityThread.main(ActivityThread.java:4424) で
05-20 12:08:22.342: E/AndroidRuntime(22022): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で
05-20 12:08:22.342: E/AndroidRuntime(22022): java.lang.reflect.Method.invoke(Method.java:511) で
05-20 12:08:22.342: E/AndroidRuntime(22022): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) で
05-20 12:08:22.342: E/AndroidRuntime (22022): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:551) で
05-20 12:08:22.342: E/AndroidRuntime(22022): dalvik.system.NativeStart.main(ネイティブ メソッド) で
05-20 12:08:23.913: I/プロセス (22022): 信号を送信しています。PID: 22022 SIG: 9

これは Math.java のコードです。

    package com.wael.test;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.wael.first.app.R;

public class Math extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.math);
        final Button button1 = (Button) findViewById(R.id.lf);
        final Button button2 = (Button) findViewById(R.id.qf);
        button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
                setContentView(R.layout.qf);
                final Button submit1 = (Button) findViewById(R.id.qfButton);
                final EditText ix = (EditText) findViewById(R.id.lfET1);
                final EditText ia = (EditText) findViewById(R.id.lfET2);
                final EditText ib = (EditText) findViewById(R.id.lfET3);
                final TextView result = (TextView)                                   findViewById(R.id.tvResultQf);
            // setting EditText input type
            ix.setInputType(InputType.TYPE_CLASS_NUMBER);
            ia.setInputType(InputType.TYPE_CLASS_NUMBER);
            ib.setInputType(InputType.TYPE_CLASS_NUMBER);
            submit1.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Boolean TF = true;
                    String sx = String.valueOf(ix);
                    String sa = String.valueOf(ia);
                    String sb = String.valueOf(ib);
                    if (sx.matches("")) {
                        TF = false;
                        Context context =  getApplicationContext();
                        CharSequence text = "Enter a value in x";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text,
                                duration);
                        toast.show();
                    }
                    if (sa.matches("")) {
                        TF = false;
                        Context context = getApplicationContext();
                        CharSequence text = "Enter a value in a";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text,
                                duration);
                        toast.show();
                    }
                    if (sb.matches("")) {
                        TF = false;
                        Context context = getApplicationContext();
                        CharSequence text = "Enter a value in b";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text,
                                duration);
                        toast.show();
                    }
                    if (TF == true) {
                        double x = Double.parseDouble(ix.getText()
                                .toString());
                        double a = Double.parseDouble(ia.getText()
                                .toString());
                        double b = Double.parseDouble(ib.getText()
                                .toString());
                        double y = a * x + b;
                        String sy = String.valueOf(y);
                        result.setText(sy);
                    }
                }

            });
        }
    });
    button2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Perform action on click
            setContentView(R.layout.qf);
            final Button submit2 = (Button) findViewById(R.id.qfButton);
            final EditText ix = (EditText) findViewById(R.id.qfET1);
            final EditText ia = (EditText) findViewById(R.id.qfET2);
            final EditText ib = (EditText) findViewById(R.id.qfET3);
            final EditText ic = (EditText) findViewById(R.id.qfET4);
            final TextView result = (TextView) findViewById(R.id.tvResultLf);
            // setting EditText input type
            ix.setInputType(InputType.TYPE_CLASS_NUMBER);
            ia.setInputType(InputType.TYPE_CLASS_NUMBER);
            ib.setInputType(InputType.TYPE_CLASS_NUMBER);
            ic.setInputType(InputType.TYPE_CLASS_NUMBER);

            submit2.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Boolean TF = true;
                    String sx = String.valueOf(ix);
                    String sa = String.valueOf(ia);
                    String sb = String.valueOf(ib);
                    String sc = String.valueOf(ic);
                    if (sx.matches("")) {
                        TF = false;
                        Context context = getApplicationContext();
                        CharSequence text = "Enter a value in x";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text,
                                duration);
                        toast.show();
                    }
                    if (sa.matches("")) {
                        TF = false;
                        Context context = getApplicationContext();
                        CharSequence text = "Enter a value in a";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text,
                                duration);
                        toast.show();
                    }
                    if (sb.matches("")) {
                        TF = false;
                        Context context = getApplicationContext();
                        CharSequence text = "Enter a value in b";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text,
                                duration);
                        toast.show();
                    }
                    if (sc.matches("")) {
                        TF = false;
                        Context context = getApplicationContext();
                        CharSequence text = "Enter a value in c";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text,
                                duration);
                        toast.show();
                    }
                    if (TF == true) {
                        double x = Double.parseDouble(ix.getText()
                                .toString());
                        double a = Double.parseDouble(ia.getText()
                                .toString());
                        double b = Double.parseDouble(ib.getText()
                                .toString());
                        double c = Double.parseDouble(ic.getText()
                                .toString());
                        double y=a*(x*x)+b*x+c;
                        String sy = String.valueOf(y);
                        result.setText(sy);
                    }
                }

            });
        }
    });
}

}

これは qf.xml (レイアウト) のコードです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/lf"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<Space
    android:layout_width="fill_parent"
    android:layout_height="10dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/enter_all"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#FF0000" />

<Space
    android:layout_width="fill_parent"
    android:layout_height="20dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/x"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
    android:id="@+id/lfET1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:digits="true"
    android:ems="10"
    android:hint="@string/x"
    android:inputType="number" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/a"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
    android:id="@+id/lfET2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:digits="true"
    android:ems="10"
    android:hint="@string/b"
    android:inputType="number" >
</EditText>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/b"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
    android:id="@+id/lfET3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:digits="true"
    android:ems="10"
    android:hint="@string/a"
    android:inputType="number" />

<Space
    android:layout_width="fill_parent"
    android:layout_height="20dp" />

<Button
    android:id="@+id/qfButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="@string/sub" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/y"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
    android:id="@+id/tvResultLf"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>    
4

2 に答える 2

2

ANullPointerExceptionは、まだ初期化されていないものにアクセスしようとしたことを意味します。たとえば、次のようなことをするとします。

Button myButton = null;
myButton.setText("some text");

構文的には正しいですがmyButton、UI ではまだ何も参照されていないため、初期化されていないオブジェクトのプロパティを変更しようとすると、アプリがクラッシュします。私はあなたのコードをまだ見ることができないので、これはその例外の原因の単なる例です.

についてのドキュメントからNullPointerException

使用するインスタンスまたは配列がない場合、つまりオブジェクトまたは配列が null を指している場合に、プログラムがオブジェクトのフィールドまたはメソッド、または配列の要素にアクセスしようとするとスローされます。これは、Throwable 参照が null である throw e ステートメントなど、あまり目立たない状況でも発生します。

于 2012-05-20T09:36:22.087 に答える
0

編集:OnClickListener最初の ボタン1の場合、 Button idTextViewで(結果)を検索しますが、レイアウトtvResultQfに1つがありません( id のものがあり、おそらくタイプミスですか?)そしてそれを使用しようとするとtext( ) を設定すると、 がスローされます。R.layout.qftvResultLfresult.setText(sy);NullPointerException

またOnCLickListenerButton button2EditTextの id でを検索しqfET4ますが、レイアウトに 1 つがないR.layout.qfため、inputType( ic.setInputType(InputType.TYPE_CLASS_NUMBER); ) を設定しようとすると、再び がスローNullPointerExceptionされます。

他にもエラーがあるかもしれませんが、これはざっと見ただけです。


どの行が(例外をスローする)かは指摘しませんでしたが、その行にテキストを設定しようとしたときの結果だと85思います:TextView null

result.setText(sy);// the last line in your code

これが行の場合は85、レイアウトをチェックして、 id をR.layout.qf持つ があるかどうかを確認します。持っている場合は、メニューに移動してプロジェクトをクリーンアップしてみてください-> 。TextViewtvResultLfProjectClean

これが機能しない場合は、R.layout.qfファイルのレイアウトを投稿してください。

于 2012-05-20T17:21:44.167 に答える