java - try catch - 无法实例化 Activity ComponentInfo

标签 java android

我有两种方法来更新和删除应用程序中的数据,我已在 switch 语句中实现了 try catch,但现在收到以下错误:

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

有人能看到这个问题吗?它在没有 try catch 的情况下完美运行。

这是该类:

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;
}

}
}

最佳答案

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

这些行不在方法内部,您不能那样使用它们。您在 namePassedEdit 上得到一个空指针,因为它在创建类时尝试初始化它们,但尚未为它们分配任何内容。

关于java - try catch - 无法实例化 Activity ComponentInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14326366/

相关文章:

android - 屏幕锁定后如何停止声音

java - 在Retrofit中使用Gson解析JSON

java - 使用 hessian 从 android 发送 double 到 php 时出现解析错误

java - 插入带有公式的字段( hibernate )

java - Wildfly 中 2 个不同模块的 REST 路径相同

java - 我是否必须导入位于同一包但不同文件夹中的类?

android - 无法将膨胀 View 添加到自定义 View 组

android - 如何在 Android 上解释/proc/meminfo 的值?

android - 显示周数/日历周

java - JSF 1.2,是否有任何实用程序可以学习它是如何工作的?