0

アプリのデータを更新および削除する方法は2つあります。switchステートメント内でtrycatchを実装しましたが、次のエラーが発生します。

01-14 20:38:58.778: D/AndroidRuntime(273): Shutting down VM
01-14 20:38:58.778: W/dalvikvm(273): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
01-14 20:38:58.798: E/AndroidRuntime(273): FATAL EXCEPTION: main
01-14 20:38:58.798: E/AndroidRuntime(273): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.flybase2/com.example.flybase2.viewEdit}: java.lang.NullPointerException
01-14 20:38:58.798: E/AndroidRuntime(273):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
01-14 20:38:58.798: E/AndroidRuntime(273):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-14 20:38:58.798: E/AndroidRuntime(273):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-14 20:38:58.798: E/AndroidRuntime(273):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-14 20:38:58.798: E/AndroidRuntime(273):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-14 20:38:58.798: E/AndroidRuntime(273):  at android.os.Looper.loop(Looper.java:123)
01-14 20:38:58.798: E/AndroidRuntime(273):  at android.app.ActivityThread.main(ActivityThread.java:4627)
01-14 20:38:58.798: E/AndroidRuntime(273):  at java.lang.reflect.Method.invokeNative(Native Method)
01-14 20:38:58.798: E/AndroidRuntime(273):  at java.lang.reflect.Method.invoke(Method.java:521)
01-14 20:38:58.798: E/AndroidRuntime(273):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-14 20:38:58.798: E/AndroidRuntime(273):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-14 20:38:58.798: E/AndroidRuntime(273):  at dalvik.system.NativeStart.main(Native Method)
01-14 20:38:58.798: E/AndroidRuntime(273): Caused by: java.lang.NullPointerException
01-14 20:38:58.798: E/AndroidRuntime(273):  at com.example.flybase2.viewEdit.<init>(viewEdit.java:63)
01-14 20:38:58.798: E/AndroidRuntime(273):  at java.lang.Class.newInstanceImpl(Native Method)
01-14 20:38:58.798: E/AndroidRuntime(273):  at java.lang.Class.newInstance(Class.java:1429)
01-14 20:38:58.798: E/AndroidRuntime(273):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-14 20:38:58.798: E/AndroidRuntime(273):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
01-14 20:38:58.798: E/AndroidRuntime(273):  ... 11 more

誰かが問題を見ることができますか?トライキャッチなしで完全に動作します。

クラスは次のとおりです。

package com.example.flybase2;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class viewEdit extends Activity implements OnClickListener{

EditText namePassedEdit;
EditText numPassedEdit;
EditText emailPassedEdit;
EditText commentPassedEdit;
Button bUpdate;
Button bDelete;
long passedID = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.editview);

DBHandler displayEdit = new DBHandler(this, null, null);


        Bundle extras = getIntent().getExtras(); 
        if (extras != null) {
            passedID = extras.getLong("passedID"); 
        }
        displayEdit.open();
        String returnedNameToEdit = displayEdit.getName(passedID);
        String returnedNumToEdit  = displayEdit.getNum(passedID);
        String returnedEmailToEdit  = displayEdit.getEmail(passedID);
        String returnedCommentToEdit = displayEdit.getComments(passedID); 

    namePassedEdit = (EditText) findViewById(R.id.inputNameEdit);
    numPassedEdit = (EditText) findViewById(R.id.inputTelNoEdit);
    emailPassedEdit = (EditText) findViewById(R.id.inputEmailEdit);
    commentPassedEdit = (EditText) findViewById(R.id.inputCommentEdit);
    bUpdate = (Button) findViewById (R.id.btnAddConEdit);
    bDelete = (Button) findViewById (R.id.btnDeleteContact);



        namePassedEdit.setText(returnedNameToEdit);
        numPassedEdit.setText(returnedNumToEdit);
        emailPassedEdit.setText(returnedEmailToEdit);
        commentPassedEdit.setText(returnedCommentToEdit);


        bUpdate.setOnClickListener(this);
        bDelete.setOnClickListener(this);
}



String nameEdit = namePassedEdit.getText().toString();
String telEdit = numPassedEdit.getText().toString();
String emailEdit = emailPassedEdit.getText().toString();
String commentEdit = commentPassedEdit.getText().toString();

@Override
public void onClick(View updateOrDeleteClicked) {
    boolean check = true;
switch(updateOrDeleteClicked.getId()){

    case (R.id.btnAddConEdit):


        try
    {

        DBHandler updateData = new DBHandler(this, null, null);
        updateData.open();
        updateData.updateData(passedID, nameEdit, telEdit, emailEdit, commentEdit);
    } 
    catch (Exception e)
    {
        check = false;

        Dialog d = new Dialog(this);
        d.setTitle("Contact failed to be deleted.");
        TextView txt = new TextView(this);
        txt.setText("Fail");
        d.setContentView(txt);
        d.show();
    }
    finally
    {
        if(check = true);
        {

            Dialog e = new Dialog(this);
            e.setTitle("Contact deleted.");
            TextView txt = new TextView(this);
            txt.setText("Success");
            e.setContentView(txt);
            e.show();
        }
    }


        break;


    case (R.id.btnDeleteContact):





    try
{

        DBHandler deleteContact = new DBHandler(this, null, null);
        deleteContact.open();
        deleteContact.deleteData(passedID);
} 
catch (Exception e)
{
    check = false;

    Dialog d = new Dialog(this);
    d.setTitle("Contact failed to be deleted.");
    TextView txt = new TextView(this);
    txt.setText("Fail");
    d.setContentView(txt);
    d.show();
}
finally
{
    if(check = true);
    {

        Dialog e = new Dialog(this);
        e.setTitle("Contact deleted.");
        TextView txt = new TextView(this);
        txt.setText("Success");
        e.setContentView(txt);
        e.show();
    }
}


    break;
}

}
}
4

3 に答える 3

2

私がここで見ている問題の1つは次のとおりです。

if(check = true); //これは、こことここでtrueを割り当てて、それ以上のことをチェックしない場合に終了します。

ここで必要なのは次のとおりです。

if(check){....}
于 2013-01-14T20:50:24.717 に答える
2
String nameEdit = namePassedEdit.getText().toString();
String telEdit = numPassedEdit.getText().toString();
String emailEdit = emailPassedEdit.getText().toString();
String commentEdit = commentPassedEdit.getText().toString();

これらの行はメソッド内にないため、そのように使用することはできません。namePassedEditクラスの作成時にそれらを初期化しようとしていて、まだ何も割り当てられていないため、nullポインタを取得しています。

于 2013-01-14T21:01:34.187 に答える
1

私が見つけることができる主な問題は、59行目のonCreateの括弧を閉じることです。関数の間に次の行を残します。

String nameEdit = namePassedEdit.getText().toString();
String telEdit = numPassedEdit.getText().toString();
String emailEdit = emailPassedEdit.getText().toString();
String commentEdit = commentPassedEdit.getText().toString();

これらをonCreateに移動すると、おそらく問題が修正されます。また、@ Nambariが回答で述べたように、ifステートメントでは、checkがtrueに設定されているかどうかを確認しています。これを次のように変更する必要があります。

if(check)
于 2013-01-14T21:00:30.950 に答える