java Android将活动加载到类中<?>对象
所以在我开始之前,我想描述一下我的设置。以下是我所拥有的:
名为MainActivity的文件。java,它是一个简单的活动类,具有onCreate()方法和执行Toast消息的btnClick()方法。就这样,没什么复杂的。此MainActivity的包名称。java是com。testapp
一个名为LoadInst的文件。java,它是一个尝试加载MainActivity的插装类。将java转换为类对象。此文件包的名称为com。仪表
因此,我尝试在LoadInst.java类中,将MainActivity.java类加载到一个类对象中,然后创建一个方法对象来表示onCreate()方法,以便调用onCreate()方法。问题是,在MainActivity.java onCreate()上引发异常null方法尝试执行超级命令行。onCreate(savedInstanceState) 我不知道这是否是因为它缺少执行super所需的一些信息。一旦正确创建(savedInstanceState)。 这是我的LoadInst中的代码。java,它扩展到一个插装类
package com.inst;
import java.lang.reflect.Method;
import 安卓.app.Activity;
import 安卓.app.Instrumentation;
import 安卓.os.Bundle;
import 安卓.os.Looper;
import 安卓.util.Log;
import 安卓.view.View;
public class LoadInst extends Instrumentation {
@Override
public void onCreate(Bundle arguments) {
super.onCreate(arguments);
start();
}
@Override
public void onStart() {
super.onStart();
String mainAct= "com.testapps.MainActivity";
Looper.prepare();
try {
Class<?> clazz = Class.forName(mainAct);
Object obj = clazz.newInstance();
Class onCreateParam[] = new Class[1];
onCreateParam[0] = Bundle.class;
Method onCreateMethod = Class.getDeclaredMethod("onCreate", onCreateParam);
Bundle bundle = new Bundle();
Log.d("TAG", "test: invoking onCreate()");
onCreateMethod.setAccessible(true);
onCreateMethod.invoke(obj, bundle);
}
catch (ClassNotFoundException e) {
Log.d("TAG", "ClassNotFoundException: " + e.getMessage());
}
catch (Exception e) {
Log.d("TAG", "Exception: " + e.getMessage());
}
}
}
基本上,我的目标是创建一个通用的工具类来对任何目标类执行测试。那么,假设我有app1。App1是一个简单的安卓应用程序,只有一个按钮,当你点击按钮时,它会执行一条toast消息。我的目标是使用一个instrumentation类,使用类加载app1的主活动,然后调用onCreate()方法以确保所有对象/变量都已初始化,然后调用btnClick()方法以执行该方法中的代码(在本例中为toast消息)
换句话说,当我启动instrumentation类时,我将使用Bundle提供数据,因此instrumentation类将通过Bundle进行解析,并提取(比如)目标包、目标类和我希望为该目标类执行的方法。 现在,我可以使用class加载该类,然后可以执行btnClick()方法,但问题是,如果存在在onCreate()期间初始化的对象/变量,那么如果工具类调用使用在onCreate()期间初始化的对象/变量之一的方法,则该工具类将失败
共 (0) 个答案