Android NetworkOnMainThreadException在IntentService中使用Firebase存储

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:

我试图使用Firebase存储下载一个文件,但即使我在onHandleIntent中调用它,也会出现此错误

@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;
        }
    }