首页 > 解决方案 > 获取android中回调“外部”变量的值

问题描述

接口方法中有一个字符串message作为参数:

public class Home extends AppCompatActivity {

    private String globalStringResult = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_activity);

        getMediaInfo();
        Log.d("Result: ", globalStringResult); // Here result is Null

    }//TODO OnCreate End


    private void getMediaInfo() {
        FFmpeg.getInstance(this).execute(new String[]{"-version"}, 
                new ExecuteBinaryResponseHandler() {
            @Override
            public void onSuccess(String message) {
                globalStringResult  = message;
            }
        });
    }

}

这是我遇到过很多次但总是逃避的这个问题。现在,如果您帮助我,我想处理它。

我正在getMediaInfo()onCreate 中执行方法。当我在执行后在 onCreate 中getMediaInfo()记录结果时,结果将为null。但是,如果我在 onClick 按钮或其他东西中运行它,我会得到我想要的结果。

有什么方法可以在我想要的任何地方返回回调消息?

标签: androidinterfacecallback

解决方案


听起来您的函数 getMediaInfo 是异步的,这意味着在调用 onSuccess 块并设置您的值之前可能需要一些时间。我建议不要依赖变量,而是使用回调函数。这样你的消息将被传递给回调函数,你可以在任何地方使用它。

public interface MyCallback{
    void success(String message);
}

然后,您需要按如下方式修改您的功能。然后,无论在哪里实现回调,您都会收到消息,并且可以对值采取行动。

public void getMediaInfo(MyCallback callback){
 FFmpeg.getInstance(this).execute(cmdArray, new ExecuteBinaryResponseHandler() {
    @Override
    public void onSuccess(String message) {
        callback.success(message);
    }
});

推荐阅读