安卓webview子线程网络请求,怎么获得结果?
向webview注入网络上的js,就需要请求js的url。但不允许在主线程直接发http请求,需要开子线程,开了子线程后,子线程就自己运行,主线程也自己运行,但是我的主线程需要子线程的结果才能继续往下操作,不然没有意义。我这个不适合网络请求回调,如下是一种简单的解决方式。
就是把请求结果绑定到成员变量。然后检查成员变量。这样就不会造成子线程还没运行完,就迅速获取js的内容,导致是空的,向注入webview注入js失败,。
package com.xx.view; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * Created by wj49476 on 2018/3/23. */ public class ScriptDownloader { private static final String urlPrefix = "http://10.0.4.147:8301/jss/crawl/"; private String scriptName; private byte[] jsScriptContent; private int times = 0; public ScriptDownloader(String scriptNmae){ this.scriptName = scriptNmae; } private void get() { final String url = urlPrefix + scriptName; new Thread(new Runnable() { @Override public void run() { final Request.Builder builder = new Request.Builder(); final OkHttpClient client = new OkHttpClient.Builder() .readTimeout(30, TimeUnit.SECONDS) .connectTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build(); //设置各种超时时间 builder.url(url); System.out.println("请求的js脚本url是:" + url); final Request request = builder.build(); try (Response response = client.newCall(request).execute()) { jsScriptContent = (response.body().bytes()); System.out.println(new String(jsScriptContent)); }catch (Exception e){ System.out.println("请求脚本出错"); e.printStackTrace(); } } }).start(); } public byte[] getJsScriptContent(){ if (times % 5 == 0){ get(); } times += 1; try{ Thread.sleep(1000); }catch (Exception e){ e.printStackTrace(); } if (jsScriptContent != null){ return jsScriptContent; }else{ if (times < 20){ return getJsScriptContent(); } else{ return null; } } } public static void main(String[] args) { byte[] jsConet = new ScriptDownloader("credit/crccReport.js").getJsScriptContent(); System.out.println("注入的脚本内容是: " + new String(jsConet)); } }
安卓不让做阻塞的io网络请求,但没说不让sleep。
反对极端面向过程编程思维方式,喜欢面向对象和设计模式的解读,喜欢对比极端面向过程编程和oop编程消耗代码代码行数的区别和原因。致力于使用oop和36种设计模式写出最高可复用的框架级代码和使用最少的代码行数完成任务,致力于使用oop和设计模式来使部分代码减少90%行,使绝大部分py文件最低减少50%-80%行的写法。
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」