有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android将活动加载到类中<?>对象

所以在我开始之前,我想描述一下我的设置。以下是我所拥有的:

  1. 名为MainActivity的文件。java,它是一个简单的活动类,具有onCreate()方法和执行Toast消息的btnClick()方法。就这样,没什么复杂的。此MainActivity的包名称。java是com。testapp

  2. 一个名为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) 个答案