Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串变量加载活动_Java_Android_Android Intent - Fatal编程技术网

Java 从字符串变量加载活动

Java 从字符串变量加载活动,java,android,android-intent,Java,Android,Android Intent,我正在做一个应用程序,其中显示了问题,并将下一个问题编号存储在数据库中,以便用户可以随时恢复 这里的问题是,我从数据库中获取下一个问题编号,并将编号附加到字符串变量中,因此goNextQuestion等于question(#是数据库中的编号) 然后我想将该变量(例如,它等于Question2)传递给新的Intent函数,以加载与该问题关联的活动 以下是Home.class中的代码: button.setOnClickListener(new View.OnClickListener() {

我正在做一个应用程序,其中显示了问题,并将下一个问题编号存储在数据库中,以便用户可以随时恢复

这里的问题是,我从数据库中获取下一个问题编号,并将编号附加到字符串变量中,因此
goNextQuestion
等于
question
(#是数据库中的编号)

然后我想将该变量(例如,它等于
Question2
)传递给新的Intent函数,以加载与该问题关联的活动

以下是Home.class中的代码:

button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
                try {
                        final String goQuestion = "Question" + lastQuestion";
                        startActivity(new Intent(Home.this, Class.forName(goQuestion)));
                } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                }
        }
});
可在此处查看完整的Home.class:

我的预期结果是,它将以与我将
Question2.class
传递到Intent中相同的方式加载。但是,有一个错误,执行
catch
语句时总是出现以下错误:

W/System.err: java.lang.ClassNotFoundException: Question2.class
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:400)
        at java.lang.Class.forName(Class.java:326)
        at uk.co.jrtevents.k_quiz.Home$1.onClick(Home.java:45)
W/System.err:     at android.view.View.performClick(View.java:5610)
        at android.view.View$PerformClick.run(View.java:22265)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "Question2.class" on path: DexPathList[[zip file "/data/app/uk.co.jrtevents.k_quiz-1/base.apk"],nativeLibraryDirectories=[/data/app/uk.co.jrtevents.k_quiz-1/lib/x86, /system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        ... 13 more
解决这个问题的最佳方法是什么


链接到问题2.class:

您没有放置
。class

  final String goQuestion = "Question" + lastQuestion;
试试这个

button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                try {
                    final String goQuestion = "Question" + lastQuestion;
                    startActivity(new Intent(Home.this, Class.forName(goQuestion)));
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
        });

你可以试试下面的方法

如果使用Simple类名,如Step8CompletedActivity,则会出现错误

var clazz =
Class.forName(Step8CompletedActivity::class.java.simpleName!!).kotlin as KClass<Activity>
var-clazz=
Class.forName(Step8CompletedActivity::Class.java.simpleName!!).kotlin作为KClass
下面将出现错误

java.lang.ExceptionInInitializerError
    at com.google.samples.motionlayoutcodelab.MainActivityKt.access$getData$p(MainActivity.kt:1)
    at com.google.samples.motionlayoutcodelab.MainActivity.onCreate(MainActivity.kt:114)
    at android.app.Activity.performCreate(Activity.java:6662)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
 Caused by: java.lang.ClassNotFoundException: Step8CompletedActivity
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:400)
    at java.lang.Class.forName(Class.java:326)
    at com.google.samples.motionlayoutcodelab.MainActivityKt.<clinit>(MainActivity.kt:39)
    at com.google.samples.motionlayoutcodelab.MainActivityKt.access$getData$p(MainActivity.kt:1) 
java.lang.ExceptionInInitializeError
在com.google.samples.motionlayoutcodelab.MainActivityKt.access$getData$p(MainActivity.kt:1)
在com.google.samples.motionlayoutcodelab.MainActivity.onCreate上(MainActivity.kt:114)
位于android.app.Activity.performCreate(Activity.java:6662)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
位于android.app.ActivityThread.-wrap12(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6077)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
原因:java.lang.ClassNotFoundException:Step8CompletedActivity
位于java.lang.Class.classForName(本机方法)
位于java.lang.Class.forName(Class.java:400)
位于java.lang.Class.forName(Class.java:326)
在com.google.samples.motionlayoutcodelab.MainActivityKt(MainActivity.kt:39)上
在com.google.samples.motionlayoutcodelab.MainActivityKt.access$getData$p(MainActivity.kt:1)
而不是使用简单名称,只使用规范的名称或带路径的全名

var clazz =
Class.forName(Step8CompletedActivity::class.java.canonicalName!!).kotlin as KClass<Activity>
var-clazz=
Class.forName(Step8CompletedActivity::Class.java.canonicalName!!).kotlin作为KClass
或者使用下面的方法将产生相同的结果

 var clazz =
Class.forName("com.google.samples.motionlayoutcodelab.Step8CompletedActivity").kotlin as KClass<Activity>
var-clazz=
Class.forName(“com.google.samples.motionlayoutcodelab.Step8CompletedActivity”).kotlin作为KClass

现在收到此错误:
java.lang.ClassNotFoundException:Question2
您是否有Question2活动@Julian@Julian检查新答案相同错误,使用更多代码更新我的问题,并根据当前答案进行修改。同学们:这很有效!非常感谢。我将
goQuestion
变量更改为
final String goQuestion=“uk.co.jrtevents.k_quick.Question”+lastQuestion