【发布时间】:2015-11-11 15:40:43
【问题描述】:
我创建了一个组件,用于下载图像(在 Android 端),我想将关于我的应用程序的该图像(到 JS 端)的大小详细信息发送回。
现在,我可以有把握地说,我可以从 JS 调用我的组件,它会返回数据,但只要我添加 Async 元素以从 URL 下载图像,阅读它并响应我得到只要我打电话给我的callback.invoke("response text");NullpointerException
我有问题的代码是:
public void loadImage(final String url, final Callback onLoadCallback) {
...
new AsyncTask<String, Void, Void>() {
@Override
protected Void doInBackground(String... url) {
try {
theImage = Glide.with(getReactApplicationContext()).load(url[0]).asBitmap().into(-1, -1).get();
}
catch ...
return null;
}
@Override
protected void onPostExecute(Void dummy) {
if (null != theImage) {
onLoadCallback.invoke("Success"); //<== THIS LINE HERE
}
}
}.execute(url);
...
}
现在,我知道这是因为我试图通过回调将 sep 线程返回到主线程,但我不确定我到底应该如何获得我想要返回的信息JS那边?!这是我第一次尝试 RN 中的组件,所以请善待! :)
额外信息 - 我的 React 模块:
var MY_Image = require('NativeModules').MYImage;
var myimage = {
loadImage(url, onLoad) {
MY_Image.loadImage(url, onLoad)
},
};
module.exports = myimage;
然后在我的 React 应用视图中:
...
componentDidMount: function() {
myImage.loadImage('[URL to Image]',onLoad=> {
console.log('Success: '+onLoad);
});
}
【问题讨论】:
-
您的回调可能一开始就为空。您是否尝试过在调用 AsyncTask 之前测试它是否为空?
-
我做了更多的工作,我可能已经涵盖了@drschultz - 只是检查我的解决方案,我希望能够尽快发布更多信息!
-
在 @johanneslumpe 的
react-native-fs组件中找到了一些东西,帮助我弄清楚了一些事情 -
@drschultz 我认为你是对的。我的回调为空(在异步结束时),因此它引发了异常。我怎么能解决这个问题?!我不怕说我现在有点困惑!
-
您必须发布更多代码,以便我们了解您是如何定义/实例化/实现回调的。既然那是空的,我们将不得不深入研究那个特定的代码。
标签: java android android-asynctask react-native