向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() {@Overridepublic 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。

安卓webview子线程网络请求,怎么获得结果?相关推荐

  1. 安卓在子线程中实现更新UI界面的三种方法 Handler+Message、runOnUiThread、控件.post()

    1.说明 安卓中UI线程为主线程,更新UI界面必须在主线程中进行,在子线程中实现更新UI界面的三种方法:Handler.RunOnUiThread.控件.post() 2.1 Handler (1)定 ...

  2. 安卓开启子线程常用的方法

    方法一 构造函数传入Runnable,重写run方法 new Thread(new Runnable() {@Overridepublic void run() {}}).start(); 方法二 T ...

  3. Android 避免主线程执行网络请求之Activity/Fragment 结束后处理异步回调

    大家都知道Android涉及到与UI相关的操作只能在主线程执行 android4.0以后就禁止在主线程进行网络请求了,在主线程里面执行Http请求都会报NetworkOnMainThreadExcep ...

  4. 详解 Android okhttp 网络请求get,post传输数据的基本用法

    官网网址:http://square.github.io/okhttp/ github地址:https://github.com/square/okhttp OKHttp优点 1.支持HTTP2/SP ...

  5. Android中WebView中拦截所有请求并替换URL(支持AJAX的post请求类型)

    需求背景 接到这样一个需求,需要在 WebView 的所有网络请求中,在请求的url中,加上一个sign=xxxx 的标志位,同时添加手机本地的数据比如 sessionToken=sd54f5sd4f ...

  6. android自定义网络请求框架,安卓快速开发框架(十九)XBaseAndroid Http网络请求

    网络请求 XBaseAndroid网络请求内置模块是采用hongyangAndroid的工具类二次开发. 目前对应okhttp版本3.3.1. 用法 目前对以下需求进行了封装 一般的get请求 一般的 ...

  7. 【小王的安卓之路】Android原生网络请求

    Android原生网络请求 一. 网络请求的必要性 二. 网络请求分类 三. 网络请求实现方法 四. 注意事项 一.网络请求的必要性: 如今单机APP早已经接近消失就连最简单的时钟日期等软件都需要去请 ...

  8. (原创)使用AsyncTask(带修改线程池方式)+自定义ImageLoader+LRU算法对图片三级缓存及其显示优化(只有在ListView滑动停止的时候才去网络请求获取图片数据)

    前言: 以前看了些关于图片优化处理缓存比较全的视频(感谢慕风网),现在回顾觉得还是挺好的也就总结出来下,感觉针对图片做处理这块还真的用的比较多,本文章只要使用异步线程AsyncTask.自定义的Ima ...

  9. android 网络时区 错误,React native 安卓机器上调试代码报错:网络请求出错TypeError: Network request failed...

    React native 安卓机器上调试代码报错:网络请求出错TypeError: Network request failed 安卓机器 usb连接调试 报错信息 TypeError: Networ ...

最新文章

  1. 斐波那契数列性质【记住】
  2. linux 日志文件utmp、wtmp、lastlog、messages介绍
  3. mysql 笔试题_MySQL笔试题详解(一)(中等难度)
  4. 小程序canvan画布,现两张图片合成一张,并保存到本地
  5. 【转】Linux内核结构详解
  6. 图像运动模糊原理及python实现
  7. 蓝桥杯 算法提高 P0603 统计不同单词个数
  8. 电梯远程监控维护系统方案
  9. 修订的GRE分类词汇(截屏版)
  10. 如何给共享文件夹设置密码?共享文件夹加密的方法
  11. 计算机谈歌曲简单,计算机应用基础公开课制作一首简单的MP3歌曲.ppt
  12. single-precision operand implicitly
  13. 计算机1946考试试题,统考计算机考试试题及答案
  14. Travis CI(持续集成)
  15. 服务器数据恢复过程(服务器数据恢复通用方法)
  16. MAC电脑关机卡住黑屏菊花转圈的解决方法
  17. JavaScript:事件:冒泡和捕获机制
  18. 手机屏幕投屏到电脑上是通过什么技术实现的?
  19. win7 APPCRASH(解决方法)(转)
  20. Webug 4.0下载地址

热门文章

  1. 队列链式结构C/C++实现(数据结构严蔚敏版)
  2. solr 英文模拟mysql like查询xml_Solr之精确、匹配、排序、模糊查询-yellowcong
  3. Java矩形区域食物链_AcWing 240. 食物链(JAVA)
  4. iphone发送邮件html,iPhone使用smtp服务器发送电子邮件?
  5. 怎么开启队友无伤_王者荣耀:玩刘禅的6个误区,这样连招可以无伤推塔!
  6. numpy的random
  7. 【技术综述】人脸妆造迁移核心技术总结
  8. 中国生物燃料市场产能预测与十四五战略前景展望报告2022年
  9. 全球及中国语音拾音耳机行主要产品及营销模式分析报告业2022-2028年版
  10. SharpDevelop源码分析笔记(一)