以活动名称作为变量启动活动

时间:2017-01-29 20:13:00

标签: java android android-intent android-activity nullpointerexception

我正在尝试从快餐栏开始一项活动,并将String作为活动名称。

小吃店代码是:

private void showSnackbar(View view, String massgae, String action, final String intent) {
    Snackbar.make(view, massgae, Snackbar.LENGTH_LONG)
            .setAction(action, new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent myIntent = null;
                    try {
                        myIntent = new Intent(context, Class.forName(intent));
                    } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                    }
                    startActivity(myIntent);
                }
            })
            .setActionTextColor(Color.WHITE)
            .setDuration(5000)
            .show();
}

我正在用它来称呼它:

showSnackbar(llMain, getResources().getString(R.string.sbUserNotFound), getResources().getString(R.string.sbRegister), "Register.class");

当它加载时我得到:

  

java.lang.NullPointerException:尝试调用虚方法' java.lang.String android.content.Intent.toString()'在null对象引用上。

任何帮助?

1 个答案:

答案 0 :(得分:0)

首先,这是一个坏主意。很抱歉地说。不应该像这样使用Class.forName()。

如果要自定义哪个活动开始,请发送一个变量,如Class,并使其成为通用。

但是如果你真的坚持这个实现,那么它失败的原因是因为你必须将完整的包名传递给Class.forName(),而不是添加" .class"在它的最后。

类似于:

Class.forName("com.testapp.ui.Register");

当然,您需要更改软件包名称以适合您自己的应用程序。