android - 获取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 按钮或其他东西中运行它,我会得到我想要的结果。
有什么方法可以在我想要的任何地方返回回调消息?
解决方案
听起来您的函数 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);
}
});
推荐阅读
- javascript - 使用 axios POST 时出现错误
- ssl - 从 conda 提示符安装任何软件包时出现 SSL 错误
- c# - 设置相对于最后一行文本的光标位置 | C# 控制台应用程序
- java - Android MVP - 我应该从哪里阅读 Textview?
- ios - UIScrollView + LargeTitle (iOS 11) - 滚动到顶部并显示大标题
- java - 数组变量基本类型
- html - 限制每个会话的 CSS 动画
- .htaccess - 从http重定向到https时.htaccess循环
- html - 将值绑定到 html 选择
- angular - 找不到与 @angular/cli@5.2.9 匹配的版本