You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何从函数类获取值并在主类中显示结果?

在Android中从函数类获取值并在主类显示的解决方案

我来帮你搞定这个问题~首先得先指出你现有代码里的两个小问题:

  • cekberhasil() 是 void 类型方法,没有返回值,主类没法直接拿到里面的 berhasil 变量
  • 循环逻辑有问题:每次循环都会重置 berhasil 的值,哪怕前面已经找到符合条件的情况,最后也会被覆盖,应该找到符合条件就停止判断

下面给你几种可行的解决方案:

方案一:让函数类方法直接返回结果

这是最直接的方式,修改函数类的方法,让它返回判断后的字符串结果:

函数类修改后的代码

public class YourFunctionClass {
    // 假设GRID_AREA和mIndexes是这个类的成员变量
    private static final int GRID_AREA = 3;
    private int[] mIndexes;

    // 修改方法为返回String类型
    public String cekberhasil() {
        // 先默认设为空
        String hasil = "";
        // 原循环里的i其实没用到,直接判断即可
        if(mIndexes[0] == 0 && mIndexes[1] == 1 && mIndexes[2] == 2){
            hasil = "success";
        }
        return hasil;
        
        // 如果确实需要遍历逻辑,找到符合条件后直接返回避免覆盖:
        // for (int i = 0; i < GRID_AREA; i++) {
        //     if(mIndexes[0] == 0 && mIndexes[1]==1 && mIndexes[2]==2){
        //         return "success";
        //     }
        // }
        // return "";
    }
}

主类中调用并显示

在主类的onCreate(或者你需要的地方)调用这个方法,拿到结果后显示,比如用Toast或者TextView:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 补全你的原有代码
    setContentView(R.layout.your_layout);

    // 实例化函数类
    YourFunctionClass functionClass = new YourFunctionClass();
    // 假设你已经给mIndexes赋值
    functionClass.mIndexes = new int[]{0,1,2};
    // 调用方法获取结果
    String result = functionClass.cekberhasil();
    // 用Toast显示结果
    Toast.makeText(this, result.isEmpty() ? "未成功" : result, Toast.LENGTH_SHORT).show();
    // 或者显示到TextView
    TextView tvResult = findViewById(R.id.tv_result);
    tvResult.setText(result);
}

方案二:使用回调接口(适合异步场景)

如果你的cekberhasil涉及异步操作(比如耗时计算、网络请求),用回调会更合适:

第一步:定义回调接口

public interface OnCheckResultListener {
    void onResult(String result);
}

第二步:修改函数类,持有回调接口

public class YourFunctionClass {
    private int[] mIndexes;
    private OnCheckResultListener mListener;

    // 设置回调的方法
    public void setOnCheckResultListener(OnCheckResultListener listener) {
        this.mListener = listener;
    }

    public void cekberhasil() {
        String hasil = "";
        if(mIndexes[0] == 0 && mIndexes[1] == 1 && mIndexes[2] == 2){
            hasil = "success";
        }
        // 把结果回调给主类
        if(mListener != null){
            mListener.onResult(hasil);
        }
    }
}

第三步:主类中设置回调并处理结果

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 你的其他原有代码...
    setContentView(R.layout.your_layout);

    YourFunctionClass functionClass = new YourFunctionClass();
    functionClass.mIndexes = new int[]{0,1,2};
    // 设置回调
    functionClass.setOnCheckResultListener(new OnCheckResultListener() {
        @Override
        public void onResult(String result) {
            // 在这里处理结果,比如显示
            Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
        }
    });
    // 执行判断方法
    functionClass.cekberhasil();
}

方案三:给成员变量添加Getter方法

如果你想保留原有的void方法,也可以给berhasil变量添加Getter方法:

函数类修改

public class YourFunctionClass {
    private int[] mIndexes;
    // 把berhasil设为类的成员变量
    private String berhasil = "";

    public void cekberhasil() {
        berhasil = "";
        if(mIndexes[0] == 0 && mIndexes[1] == 1 && mIndexes[2] == 2){
            berhasil = "success";
        }
        // 优化掉不必要的循环
    }

    // 添加Getter方法供主类获取值
    public String getBerhasil() {
        return berhasil;
    }
}

主类调用

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 你的其他原有代码...
    setContentView(R.layout.your_layout);

    YourFunctionClass functionClass = new YourFunctionClass();
    functionClass.mIndexes = new int[]{0,1,2};
    // 先执行判断方法
    functionClass.cekberhasil();
    // 通过Getter获取结果
    String result = functionClass.getBerhasil();
    // 显示结果
    Toast.makeText(this, result, Toast.LENGTH_SHORT).show();
}

另外提醒一下:原代码里的循环for (int i = 0; i < GRID_AREA; i++)其实没用到变量i,判断条件和i无关,所以可以直接去掉循环,直接判断mIndexes的条件就行,避免不必要的性能消耗哦~

内容的提问来源于stack exchange,提问作者Kerikil Tajam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:29:04