遇到AlertDialog问题

时间:2012-01-03 11:10:56

标签: android dialog

我有这个简单的代码:

public class AndroidAlertTutorial extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    PopIt("Exit Application", "Are you sure you want to exit?");

}

public void PopIt( String title, String message ){
    new AlertDialog.Builder(this)
    .setTitle( title )
    .setMessage( message )
    .setPositiveButton("YES", new OnClickListener() {
        public void onClick(DialogInterface arg0, int arg1) {
            //do stuff onclick of YES
            finish();
        }
    })
    .setNegativeButton("NO", new OnClickListener() {
        public void onClick(DialogInterface arg0, int arg1) {
            //do stuff onclick of CANCEL
            Toast.makeText(getBaseContext(), "You touched CANCEL", Toast.LENGTH_SHORT).show();
        }
    }).show();
}
}

不幸的是,由于一个未知的原因,没有任何显示,应用程序强制关闭!我想知道我的main.xml文件或androidmanifest是否有问题,因为我无法弄清楚这段代码有什么问题。

怎么了?

由于

这是Logcat:

01-03 11:58:17.430: D/AndroidRuntime(12907): Shutting down VM
01-03 11:58:17.430: W/dalvikvm(12907): threadid=1: thread exiting with uncaught exception (group=0x4001e578)
01-03 11:58:17.530: E/AndroidRuntime(12907): FATAL EXCEPTION: main
01-03 11:58:17.530: E/AndroidRuntime(12907): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.android.androidalert/com.android.androidalert.AndroidAlertTutorialActivity}: java.lang.ClassNotFoundException: com.android.androidalert.AndroidAlertTutorialActivity in loader dalvik.system.PathClassLoader[/data/app/com.android.androidalert-1.apk]
01-03 11:58:17.530: E/AndroidRuntime(12907):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1573)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at android.os.Looper.loop(Looper.java:123)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at android.app.ActivityThread.main(ActivityThread.java:3691)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at java.lang.reflect.Method.invokeNative(Native Method)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at java.lang.reflect.Method.invoke(Method.java:507)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at dalvik.system.NativeStart.main(Native Method)
01-03 11:58:17.530: E/AndroidRuntime(12907): Caused by: java.lang.ClassNotFoundException: com.android.androidalert.AndroidAlertTutorialActivity in loader dalvik.system.PathClassLoader[/data/app/com.android.androidalert-1.apk]
01-03 11:58:17.530: E/AndroidRuntime(12907):    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-03 11:58:17.530: E/AndroidRuntime(12907):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1565)
01-03 11:58:17.530: E/AndroidRuntime(12907):    ... 11 more
01-03 11:58:47.135: I/Process(12907): Sending signal. PID: 12907 SIG: 9

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.androidalert"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:label="@string/app_name"
        android:name=".AndroidAlertTutorialActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

3 个答案:

答案 0 :(得分:2)

在您的清单中,您已声明了您的主要活动名称AndroidAlertTutorialActivity,当您启动应用时,它会搜索该名称并且找不到该名称的任何类,因为您已将您的班级AndroidAlertTutorial命名为因此抛出java.lang.ClassNotFoundException。将清单中的名称更改为与您的类名称相同,或将您的活动类名称更改为与清单中声明的​​相同。

答案 1 :(得分:0)

它对我有用,我已经在2.3.3中构建了它。我认为这不是代码的问题。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    PopIt("Exit Application", "Are you sure you want to exit?");
}

private void PopIt(String string, String string2) {
    // TODO Auto-generated method stub
    new AlertDialog.Builder(this).setTitle(string).setMessage(string2)
            .setPositiveButton("YES", new OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    // do stuff onclick of YES
                    finish();
                }
            }).setNegativeButton("NO", new OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    // do stuff onclick of CANCEL
                    Toast.makeText(getBaseContext(), "You touched CANCEL",
                            Toast.LENGTH_SHORT).show();
                }
            }).show();
}

答案 2 :(得分:0)

试试这个

public class AndroidAlertTutorial extends Activity {

    private static final int SHOW_EXIT = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    showDialog(SHOW_EXIT);


}

@Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case SHOW_EXIT:
            return PopIt("Exit Application", "Are you sure you want to exit?");

        default:
            break;
        }
        return super.onCreateDialog(id);
    }

public Dialog PopIt( String title, String message ){
    return new AlertDialog.Builder(this)
    .setTitle( title )
    .setMessage( message )
    .setPositiveButton("YES", new OnClickListener() {
        public void onClick(DialogInterface arg0, int arg1) {
            //do stuff onclick of YES
            finish();
        }
    })
    .setNegativeButton("NO", new OnClickListener() {
        public void onClick(DialogInterface arg0, int arg1) {
            //do stuff onclick of CANCEL
            Toast.makeText(getBaseContext(), "You touched CANCEL", Toast.LENGTH_SHORT).show();
        }
        }).create();
    }

}