Android NetworkOnMainThreadException在IntentService中使用Firebase存储
我试图使用Firebase存储下载一个文件,但即使我在onHandleIntent中调用它,也会出现此错误Android NetworkOnMainThreadException在IntentService中使用Firebase存储,android,firebase,firebase-storage,Android,Firebase,Firebase Storage,我试图使用Firebase存储下载一个文件,但即使我在onHandleIntent中调用它,也会出现此错误 @Override protected void onHandleIntent(Intent intent) { if (intent != null) { final String action = intent.getAction(); switch (action) { case ACTION_DOWNLOAD:
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
final String action = intent.getAction();
switch (action) {
case ACTION_DOWNLOAD:
ArrayList<Talk> talks = intent.getParcelableArrayListExtra(EXTRA_TALKS);
if (talks == null) return;
handleDownload(talks);
break;
}
}
}
更新:
你们是对的,侦听器是从主线程调用的。我刚用@AlexShutov找到这个
public zzbtz(@Nullable Executor var1) {
this.zzbFQ = var1;
if(this.zzbFQ == null) {
this.mHandler = new Handler(Looper.getMainLooper());
} else {
this.mHandler = null;
}
}
它看起来像Firebase在主线程上调用.onSuccess()回调方法,以便与UI一起使用。您尝试将流复制到文件中,这涉及到网络操作。也可以尝试在后台进行复制。它看起来像Firebase在主线程上调用.onSuccess()回调方法,以便与UI一起使用。您尝试将流复制到文件中,这涉及到网络操作。也试着在后台复制。可能的副本你读过这篇文章了吗?我是从onHandleIntent()调用的,witch是在后台线程上调用的@所以你可以在不同的线程上做你自己的工作。Firebase已经异步工作了,它在主线程上交付结果。我花了一些时间在文档中找到了一个明显的东西(在ui线程上调用它),这应该由您而不是我来完成。可能的副本你看过这篇文章了吗?我是从onHandleIntent()调用的,witch是在后台线程上调用的@所以你可以在不同的线程上做你自己的工作。Firebase已经异步工作了,它在主线程上交付结果。我花了一些时间在文档中找到了一个明显的东西(在ui线程上调用它),这应该由您而不是我来完成。我会试试看,但没有意义。我正在回调中使用一个IntentService.set断点,并查看在调试模式下首先在哪个线程上调用它。你们在后台从循环中进行调用,回调可以在主线程上执行,以便于更新UII找到它!谢谢我会试试看,但没有意义。我正在回调中使用一个IntentService.set断点,并查看在调试模式下首先在哪个线程上调用它。你们在后台从循环中进行调用,回调可以在主线程上执行,以便于更新UII找到它!谢谢
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
at com.android.org.conscrypt.Platform.blockGuardOnNetwork(Platform.java:300)
at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:741)
at com.android.okhttp.okio.Okio$2.read(Okio.java:136)
at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:211)
at com.android.okhttp.okio.RealBufferedSource.read(RealBufferedSource.java:50)
at com.android.okhttp.internal.http.HttpConnection$FixedLengthSource.read(HttpConnection.java:418)
at com.android.okhttp.okio.RealBufferedSource$1.read(RealBufferedSource.java:371)
at com.google.firebase.storage.StreamDownloadTask$zza.read(Unknown Source)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769)
at eu.long1.jwnotes.services.ReceiveService$4.onSuccess(ReceiveService.java:206)
at eu.long1.jwnotes.services.ReceiveService$4.onSuccess(ReceiveService.java:200)
at com.google.firebase.storage.StorageTask$1.zza(Unknown Source)
at com.google.firebase.storage.StorageTask$1.zzk(Unknown Source)
at com.google.firebase.storage.zze$2.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
public zzbtz(@Nullable Executor var1) {
this.zzbFQ = var1;
if(this.zzbFQ == null) {
this.mHandler = new Handler(Looper.getMainLooper());
} else {
this.mHandler = null;
}
}