0

だから私は数週間前にこのプロジェクトを脇に置いて、それは完璧に機能しました。今日の初めにアクティビティの1つにいくつかの変更を加え、エミュレータにロードしましたが、メニュー画面(スプラッシュ->メニュー->新しいアクティビティ)が表示された後に停止しました。そのため、2回クラッシュした後、別のアクティビティを試しました。1つは働いた。戻る...触れられていない別のブームをクリックしました。強制終了/クラッシュ。メニューのJavaファイルやXMLファイル、マニフェストは何も変更していません。

いったい何がこれを引き起こしているのでしょうか?Eclipseにはエラーはなく、これを実行させるために何も変更していないと思いました。

添付のログ:


08-14 14:34:45.301: W/KeyCharacterMap(343): No keyboard for id 0
08-14 14:34:45.301: W/KeyCharacterMap(343): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
08-14 14:35:40.461: D/AndroidRuntime(343): Shutting down VM
08-14 14:35:40.471: W/dalvikvm(343): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-14 14:35:40.491: E/AndroidRuntime(343): FATAL EXCEPTION: main
08-14 14:35:40.491: E/AndroidRuntime(343): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.tomcat.performance/com.tomcat.performance.TireTemps}: java.lang.NullPointerException
08-14 14:35:40.491: E/AndroidRuntime(343):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
08-14 14:35:40.491: E/AndroidRuntime(343):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-14 14:35:40.491: E/AndroidRuntime(343):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-14 14:35:40.491: E/AndroidRuntime(343):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-14 14:35:40.491: E/AndroidRuntime(343):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-14 14:35:40.491: E/AndroidRuntime(343):  at android.os.Looper.loop(Looper.java:123)
08-14 14:35:40.491: E/AndroidRuntime(343):  at android.app.ActivityThread.main(ActivityThread.java:4627)
08-14 14:35:40.491: E/AndroidRuntime(343):  at java.lang.reflect.Method.invokeNative(Native Method)
08-14 14:35:40.491: E/AndroidRuntime(343):  at java.lang.reflect.Method.invoke(Method.java:521)
08-14 14:35:40.491: E/AndroidRuntime(343):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-14 14:35:40.491: E/AndroidRuntime(343):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-14 14:35:40.491: E/AndroidRuntime(343):  at dalvik.system.NativeStart.main(Native Method)
08-14 14:35:40.491: E/AndroidRuntime(343): Caused by: java.lang.NullPointerException
08-14 14:35:40.491: E/AndroidRuntime(343):  at android.app.Activity.findViewById(Activity.java:1637)
08-14 14:35:40.491: E/AndroidRuntime(343):  at com.tomcat.performance.TireTemps.<init>(TireTemps.java:25)
08-14 14:35:40.491: E/AndroidRuntime(343):  at java.lang.Class.newInstanceImpl(Native Method)
08-14 14:35:40.491: E/AndroidRuntime(343):  at java.lang.Class.newInstance(Class.java:1429)
08-14 14:35:40.491: E/AndroidRuntime(343):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
08-14 14:35:40.491: E/AndroidRuntime(343):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
08-14 14:35:40.491: E/AndroidRuntime(343):  ... 11 more

TIRETEMPS.JAVA

package com.tomcat.performance;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
package com.tomcat.performance;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class TireTemps extends Activity implements OnClickListener {
    EditText tempLFouterString = ((EditText) findViewById(R.id.tempLFouter)),
            tempLFmiddleString = ((EditText) findViewById(R.id.tempLFmiddle)),
            tempLFinnerString = ((EditText) findViewById(R.id.tempLFinner)),
            tempRFinnerString = ((EditText) findViewById(R.id.tempRFinner)),
            tempRFmiddleString = ((EditText) findViewById(R.id.tempRFmiddle)),
            tempRFouterString = ((EditText) findViewById(R.id.tempRFouter)),
            tempRRinnerString = ((EditText) findViewById(R.id.tempRRinner)),
            tempRRmiddleString = ((EditText) findViewById(R.id.tempRRmiddle)),
            tempRRouterString = ((EditText) findViewById(R.id.tempRRouter)),
            tempLRouterString = ((EditText) findViewById(R.id.tempLRouter)),
            tempLRmiddleString = ((EditText) findViewById(R.id.tempLRmiddle)),
            tempLRinnerString = ((EditText) findViewById(R.id.tempLRinner));

    TextView tempNoseAverageString = ((TextView) findViewById(R.id.tempNoseAverage)),
            tempLFaverageString = ((TextView) findViewById(R.id.tempLFaverage)),
            tempRFaverageString = ((TextView) findViewById(R.id.tempRFaverage)),
            tempLRaverageString = ((TextView) findViewById(R.id.tempLRaverage)),
            tempRRaverageString = ((TextView) findViewById(R.id.tempRRaverage)),
            tempRearAverageString = ((TextView) findViewById(R.id.tempRearAverage)),
            tempRFLRaverageString = ((TextView) findViewById(R.id.tempRFLRaverage)),
            tempLFRRaverageString = ((TextView) findViewById(R.id.tempLFRRaverage)),
            tempRSaverageString = ((TextView) findViewById(R.id.tempRSaverage)),
            tempLSaverageString = ((TextView) findViewById(R.id.tempLSaverage));

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

        Button calculate = ((Button) findViewById(R.id.calculate));
        calculate.setOnClickListener( new View.OnClickListener() {
            public void onClick(View arg0) {
                double tempLFouter, tempLFmiddle, tempLFinner, tempRFinner, tempRFmiddle, 
                       tempRFouter, tempLRouter, tempLRmiddle, tempLRinner, tempRRinner, 
                       tempRRmiddle, tempRRouter, tempNoseAverage, tempLFaverage, tempRFaverage, 
                       tempLRaverage, tempRRaverage, tempRearAverage, tempRFLRaverage, tempLFRRaverage, 
                       tempLSaverage, tempRSaverage;

                try {
                    tempLFouter = Double.parseDouble(tempLFouterString.getText().toString());
                    tempLFinner = Double.parseDouble(tempLFinnerString.getText().toString());
                    tempLFmiddle = Double.parseDouble(tempLFmiddleString.getText().toString());
                    tempRFouter = Double.parseDouble(tempRFouterString.getText().toString());
                    tempRFmiddle = Double.parseDouble(tempRFmiddleString.getText().toString());
                    tempRFinner = Double.parseDouble(tempRFinnerString.getText().toString());
                    tempRRouter = Double.parseDouble(tempRRouterString.getText().toString());
                    tempRRmiddle = Double.parseDouble(tempRRmiddleString.getText().toString());
                    tempRRinner = Double.parseDouble(tempRRinnerString.getText().toString());
                    tempLRouter = Double.parseDouble(tempLRouterString.getText().toString());
                    tempLRmiddle = Double.parseDouble(tempLRmiddleString.getText().toString());
                    tempLRinner = Double.parseDouble(tempLRinnerString.getText().toString());

                    tempLFaverage = ((tempLFinner + tempLFmiddle + tempLFouter) / 3);
                    tempRFaverage = ((tempRFinner + tempRFmiddle + tempRFouter) / 3);
                    tempLRaverage = ((tempLRinner + tempLRmiddle + tempLRouter) / 3);
                    tempRRaverage = ((tempRRinner + tempRRmiddle + tempRRouter) / 3);
                    tempNoseAverage = ((tempLFaverage + tempRFaverage) / 2);
                    tempRearAverage = ((tempLRaverage + tempRRaverage) / 2);
                    tempRFLRaverage = ((tempRFaverage + tempLRaverage) / 2);
                    tempLFRRaverage = ((tempLFaverage + tempRRaverage) / 2);
                    tempLSaverage = ((tempLFaverage + tempLRaverage) / 2);
                    tempRSaverage = ((tempRFaverage + tempRRaverage) / 2);

                    tempNoseAverageString.setText(String.valueOf(String.format("%.1f", tempNoseAverage)) + "°");
                    tempLFaverageString.setText(String.valueOf(String.format("%.1f", tempLFaverage)) + "°");
                    tempRFaverageString.setText(String.valueOf(String.format("%.1f", tempRFaverage)) + "°");
                    tempLRaverageString.setText(String.valueOf(String.format("%.1f", tempLRaverage)) + "°");
                    tempRRaverageString.setText(String.valueOf(String.format("%.1f", tempRRaverage)) + "°");
                    tempRearAverageString.setText(String.valueOf(String.format("%.1f", tempRearAverage)) + "°");
                    tempRFLRaverageString.setText(String.valueOf(String.format("%.1f", tempRFLRaverage)) + "°");
                    tempLFRRaverageString.setText(String.valueOf(String.format("%.1f", tempLFRRaverage)) + "°");
                    tempLSaverageString.setText(String.valueOf(String.format("%.1f", tempLSaverage)) + "°");
                    tempRSaverageString.setText(String.valueOf(String.format("%.1f", tempRSaverage)) + "°");

                } catch (NumberFormatException e) {
                    Toast andEggs = Toast
                            .makeText(TireTemps.this,
                             "Please verify only numbers are used in your inputs with no blank data.",
                             Toast.LENGTH_LONG);
                    andEggs.show();
                } catch (NullPointerException n) {
                    Toast andEggs = Toast.makeText(TireTemps.this, "Please enter all temperature data for each tire.",
                            Toast.LENGTH_LONG);
                    andEggs.show();
                }
            }
        });

        Button reset_temps = ((Button) findViewById(R.id.reset_temps));
        reset_temps.setOnClickListener( new View.OnClickListener() {
            public void onClick(View arg0) {
                tempLFouterString.setText("");
                tempLFinnerString.setText("");
                tempLFmiddleString.setText("");
                tempRFouterString.setText("");
                tempRFmiddleString.setText("");
                tempRFinnerString.setText("");
                tempRRouterString.setText("");
                tempRRmiddleString.setText("");
                tempRRinnerString.setText("");
                tempLRouterString.setText("");
                tempLRmiddleString.setText("");
                tempLRinnerString.setText("");

                tempNoseAverageString.setText("");
                tempLFaverageString.setText("");
                tempRFaverageString.setText("");
                tempLRaverageString.setText("");
                tempRRaverageString.setText("");
                tempRearAverageString.setText("");
                tempRFLRaverageString.setText("");
                tempLFRRaverageString.setText("");
                tempLSaverageString.setText("");
                tempRSaverageString.setText("");

                Toast andEggs = Toast.makeText(TireTemps.this, "All data has been reset.", Toast.LENGTH_LONG);
                andEggs.show();

            }
        });
    }

    public void onClick(View arg0) {
        // TODO Auto-generated method stub

    }
}

編集:TireTemps.javaを追加しました

4

2 に答える 2

1

findviewbyidは、setContentViewを実行した後にのみ機能します。ただし、クラスのインスタンス化自体ですべてのEditTextをインスタンス化しています。findviewbyidがIDを探す場所を知る方法はありません。

フィールドのインスタンス化で行ったすべてのfindviewbyidをOncreateに移動します。

于 2012-08-14T18:14:06.343 に答える
0

Tiretemps.javaの25行目は、インスタンス化されていない変数にアクセスしているか、アクセス時にnullになっています。

これは、変数を宣言する方法、変数をまったく値に設定しない場合、または他のライフサイクル関数で変数がクリアされる方法に基づくことができますonPauseonResume

于 2012-08-14T16:53:11.740 に答える