我收到了Android 8用户的报告,我的应用(使用后端Feed)没有显示内容.经过调查,我发现在Android 8上发生以下异常:
08-29 12:03:11.246 11285-11285/ E/: [12:03:11.245, main]: Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.doConnection(AbstractHttpAsyncTask.java:207)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.extendedDoInBackground(AbstractHttpAsyncTask.java:102)
at com.deiw.android.generic.tasks.AbstractAsyncTask.doInBackground(AbstractAsyncTask.java:88)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)
(我删除了包名,URL和其他可能的标识符)
在Android 7及更低版本上一切正常,我没有设置android:usesCleartextTrafficManifest(并设置它true没有帮助,无论如何这是默认值),我也没有使用网络安全信息.如果我打电话NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(),它会返回falseAndroid 8,true对于旧版本,使用相同的apk文件.我试图在关于Android O的Google信息上找到一些提及,但没有成功.
我正在尝试通过XMLHttpRequest从Firebase存储下载文件,但资源上没有设置Access-Control-Allow-Origin,因此无法实现.有没有办法在存储服务器上设置此标头?
(let [xhr (js/XMLHttpRequest.)]
(.open xhr "GET" url)
(aset xhr "responseType" "arraybuffer")
(aset xhr "onload" #(js/console.log "bin" (.-response xhr)))
(.send xhr)))
Run Code Online (Sandbox Code Playgroud)
Chrome错误消息:
XMLHttpRequest无法加载 https://firebasestorage.googleapis.com/[EDITED] 请求的资源上没有"Access-Control-Allow-Origin"标头.原产地" 的http://本地主机:3449 "因此不允许访问.
我在我的反应应用程序中有一个axios请求,我正在遵循axios npm docs.
这是我的axios请求
axios.post(helper.getLoginApi(), data)
.then((response) => {
console.log(response);
this.props.history.push(from.pathname)
})
.catch((error)=> {
console.log(error);
})
Run Code Online (Sandbox Code Playgroud)
我能够成功记录成功请求的数据.但是,当我故意产生错误并尝试console.log时,我没有得到结果记录,我只是看到了
POST HTTP://本地主机:3000 /登录 401(未授权):3000 /登录:1
错误:请求失败,状态码401 login.js:66at createError(createError.js:16)
在定居(settle.js:18)
在XMLHttpRequest.handleLoad(xhr.js:77)
但是,当我在Chrome控制台中转到"网络标签"时,我会看到以下回复.
提前感谢您的帮助.
我试图从服务器捕获验证错误。
代码:
axios.post('https://myBackendIp.com/api/teacher/time/create',Data)
.then(res=>{
console.log(res)
}).catch(error=>{
console.log(error)
})
Run Code Online (Sandbox Code Playgroud)
控制台日志输出
Error: Network Error
at createError (createError.js:16)
at handleError (xhr.js:87)
Run Code Online (Sandbox Code Playgroud)
网络选项卡输出
{"error":{"message":"Check your date field","status_code":500}}
Run Code Online (Sandbox Code Playgroud)
有没有办法改变它或者我做错了什么?
谢谢!