android service 返回值,Android平台调用Web Service:线程返回值(示例代码)

2023-11-20

接上文

前文中的遗留问题

对于Java多线程的理解。我曾经只局限于实现Runnable接口或者继承Thread类,然后重写run()方法,最后start()调用就算完事。可是一旦涉及死锁以及对共享资源的訪问和随时监控线程的状态和运行顺序和线程返回值等就不行了。

Callable 和 Future 简单介绍

Callable接口代表一段能够调用并返回结果的代码;Future接口表示是运行异步任务时的状态、返回值等信息。所以说Callable用于产生结果,Future用于获取结果。

1. Callable

Callable 是一个接口,它仅仅包括一个call()方法。Callable是一个返回结果而且可能抛出异常的任务。

为了便于理解,我们能够将Callable比作一个Runnable接口,而Callable的call()方法则类似于Runnable的run()方法。

Callable的源代码例如以下:

publi cinterface Callable {

V call() throws Exception;

}

2. Future

Future 是一个接口。它用于表示异步计算的结果。提供了检查计算是否完毕的方法,以等待计算的完毕,并获取计算的结果。

Future的源代码例如以下:

public interface Future {

// 试图取消对此任务的运行。

boolean cancel(boolean mayInterruptIfRunning)

//假设在任务正常完毕前将其取消,则返回 true。

boolean isCancelled()

//假设任务已完毕,则返回 true。

boolean isDone()

//如有必要,等待计算完毕,然后获取其结果。

V get() throws InterruptedException,ExecutionException;

//如有必要,最多等待为使计算完毕所给定的时间之后,获取其结果(假设结果可用)。

V get(long timeout, TimeUnitunit)

throws InterruptedException,ExecutionException, TimeoutException;

}

演示样例的Callable和Future的基本使用方法

我们先通过一个演示样例看看Callable和Future的基本使用方法

importjava.util.concurrent.Callable;

importjava.util.concurrent.Future;

importjava.util.concurrent.Executors;

importjava.util.concurrent.ExecutorService;

importjava.util.concurrent.ExecutionException;

classMyCallable implements Callable {

@Override

public Integer call() throws Exception {

int sum = 0;

// 运行任务

for (int i=0; i<100; i++)

sum += i;

//return sum;

return Integer.valueOf(sum);

}

}

publicclass CallableTest1 {

public static void main(String[] args)

throws ExecutionException,InterruptedException{

//创建一个线程池

ExecutorService pool =Executors.newSingleThreadExecutor();

//创建有返回值的任务

Callable c1 = new MyCallable();

//运行任务并获取Future对象

Future f1 = pool.submit(c1);

// 输出结果

System.out.println(f1.get());

//关闭线程池

pool.shutdown();

}

}

执行结果:

4950

结果说明:

在主线程main中,通过newSingleThreadExecutor()新建一个线程池。接着创建Callable对象c1。然后再通过pool.submit(c1)将c1提交到线程池中进行处理。而且将返回的结果保存到Future对象f1中。

然后,我们通过f1.get()获取Callable中保存的结果;最后通过pool.shutdown()关闭线程池。

回到主题:调用查询手机号归属地的webservice

事实上通过上面的简单样例,全然能够将通过Runnable接口或者Thread类实现的线程代码,改动成Callable和Future实现的线程。

public class Main Activity extends Activity {

public static final String TAG ="webService_pj";

private EditText phoneSecEditText;

private TextView resultView;

private Button queryButton;

@Override

public void onCreate(BundlesavedInstanceState) {

// StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder()

// .detectDiskReads().detectDiskWrites().detectNetwork()

// .penaltyLog().build());

//

// StrictMode.setVmPolicy(newStrictMode.VmPolicy.Builder()

// .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()

// .build());

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

phoneSecEditText = (EditText)findViewById(R.id.phone_sec);

resultView = (TextView)findViewById(R.id.result_text);

queryButton = (Button)findViewById(R.id.query_btn);

queryButton.setOnClickListener(newOnClickListener() {

@Override

public void onClick(View v) {

Log.i(TAG,"MainActivity线程ID:"+Thread.currentThread().getId());

// 手机号码(段)

String phoneSec =phoneSecEditText.getText().toString().trim();

// 简单推断用户输入的手机号码(段)是否合法

if("".equals(phoneSec) || phoneSec.length() < 7) {

// 给出错误提示

phoneSecEditText.setError("您输入的手机号码(段)有误。");

phoneSecEditText.requestFocus();

// 将显示查询结果的TextView清空

resultView.setText("");

return;

}

// 命名空间

String nameSpace = "http://WebXml.com.cn/";

// 调用的方法名称

String methodName ="getMobileCodeInfo";

// EndPoint

String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";

// SOAP Action

String soapAction = "http://WebXml.com.cn/getMobileCodeInfo";

// method params and values

ArrayList params= new ArrayList();

ArrayList vals =new ArrayList();

params.add("mobileCode");

params.add("userId");

vals.add(phoneSec);

vals.add("");

//通过Callable和Future创建线程。调用WebService

//创建有返回值的任务

CallableThread callable = newCallableThread(nameSpace,methodName,endPoint,soapAction,params,vals);

// 创建一个线程池

ExecutorServiceexecutor=Executors.newCachedThreadPool();

//运行任务并获取Future对象

Futurefuture = executor.submit(callable);

try {

//输出结果

resultView.setText(future.get());

//关闭线程池

executor.shutdown();

}catch (InterruptedException e) {

e.printStackTrace();

}catch (ExecutionException e) {

e.printStackTrace();

}

}

});

}

private class CallableThread implementsCallable {

private String nameSpace;

private String methodName;

private String endPoint;

private String soapAction;

private ArrayList params;

private ArrayList vals;

public CallableThread(StringnameSpace, String methodName,

StringendPoint, String soapAction, ArrayList params,ArrayList vals){

this.nameSpace = nameSpace;

this.methodName = methodName;

this.endPoint = endPoint;

this.soapAction = soapAction;

this.params = params;

this.vals = vals;

}

//须要实现Callable的Call方法

public String call() throws Exception{

// 这种方法的实现见上篇文章或者源代码

return getRemoteInfo(nameSpace,methodName, endPoint,

soapAction,params,vals);

}

}

至此,Android调用Webservice就完美的完毕了。

源代码下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android service 返回值,Android平台调用Web Service:线程返回值(示例代码) 的相关文章

  • Go语言学习路线

    gogogo git 地址 Go 学习 学习路线 2 基础知识 3 开发工具安装地址 下载 Go基础知识 链接为gitee地址 放心查看 基础结构 learn1 go 基础语法 learn2 go 数据类型 learn3 go 变量 lea
  • mkfs.xfs: cannot open /dev/sdb1: Device or resource busy 设备或资源忙

    今天在centos下用xfs格式化磁盘出现如下错误 mkfs xfs cannot open dev sdb1 Device or resource busy 设备或资源忙 时出现 重启服务器后再格式化也一样 也就是重启服务器没什么用 用l
  • QT之一个UI里边多界面切换

    QT之多界面交换 环境 VS2019 QT tools 从网上查看了许多大神的帖子 先将多界面切换的方法总结如下 1 可以通过QT Designer中添加Containers控件里的Stacked Widget实现同一个UI里的页面切换 可
  • multisim仿真 74LS147D芯片

    multisim仿真 74LS147D芯片
  • el-input-number默认值为空怎么设置

    el input number 没有值的情况下 默认值为0 一般没有值的情况下默认值为空 需要将默认值 undefined
  • 【PDF】PDF无法注释的一种解决方案

    PDF无法注释 需要检查 1 权限问题 2 文档规范问题 PDF A 拓展阅读 浏览器打开PDF调整亮度和颜色的小技巧 处理pdf 文档的相关功能包总结 1 pdf文档不能注释 下载的一篇pdf文档在阅读时不能注释 高亮和打字机等选项都是灰
  • java通过MultipartFile进行文件、图片上传和下载,以及文件流

    java通过MultipartFile进行文件 图片上传和下载 以及文件流 package com fh controller import com fh util UuidUtil import org apache commons io
  • 机组logisim P0课下

    首先是记录猪脚强调的注意事项 输入信号一般是通过MUX 多路选择器来实现对输出结果的控制 刚连接好电路时或者连接电路中 可能有一些电路莫名其妙是蓝色 这时关闭logisim后再次打开就好了 Comparator器件默认是有符号的 要调成un
  • git commit提交之后,push 失败

    情况 在git commit m 备注 之后 git push 出现错误 出现的错误是 我提交的代码格式不满足要求 原因是 因为在一些公司里面 有提交代码的一个格式 就比如 m后面的备注信息 是要求有一定格式的 但是我第一遍的格式是写错了
  • 灰度图像的彩色复原方法 ——以人脸着色为例

    灰度图像的彩色复原方法 以人脸着色为例 代码文件下载地址 摘要 灰度图像彩色复原在图像修复领域有广泛的应用 由于其涉及从低纬度空间向高纬度空间的映射 故而修复效果存在差异 本文以人脸为例研究灰度图像的彩色复原方法 在主流灰度图像彩色修复算法
  • 数据库如何热备份

    1 1数据库冷备份 概念 在固定的周期内 人为的将数据库中的数据进行备份 一般一式三份 缺点 1 可能会造成数据丢失 2 如果数据量很多 则可能会导致备份时间很长 并且备份不能正常完成 说明 虽然冷备份有诸多的缺点 但是最好进行冷备份 因为
  • 什么是决策表?什么是决策树?

    决策树 是在已知各种情况发生概率的基础上 通过构成决策树来求取净现值的期望值大于等于零的概率 评价项目风险 判断其可行性的决策分析方法 是直观运用概率分析的一种图解法 这种决策分支画成图形很像一棵树的树干 故称决策树 它是一种树形结构 每个
  • PyCharm,idea通过插件database连接带Kerberos的hive

    1 目的 PyCharm通过插件database连接带Kerberos的hive 2 异常 我windows已经配置好kerberos 可以kinit通 其其他工具以及可以正常访问 但是通过PyCharm 或者idea等工具报如下错误 Ca
  • Spring中的监听器与SpringMVC简述

    目录 Spring中的监听器 SpringMVC概述 web层的框架完成的相应的操作图示 SpringMVC开发使用步骤 SpringMVC流程图示 前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转
  • javaScript实现-在两个文本框中输入值计算加减乘除法结果显示在另一个文本框中

    在两个文本框中输入值计算加减乘除法结果显示在另一个文本框中 方法一 用if else
  • Eclipse安转主题插件Theme出现问题解决办法

    1 2 3 直接在线安装输入Eclipse Color Theme Update Site 4 疯狂下一步 5 收功
  • 告别3D-DNA试试chromap和yahs做Hi-C辅助组装吧

    之前使用的是3D DNA流程做Hi C的辅助组装 它的最大优势就是输出结果可以对接下游的JBAT juicerbox with Assembly Tools 进行手动矫正 然而它点缺陷也很明显 处理速度不够快 且对植物的优化不行 同时目前许
  • 常微分方程(Ordinary Differential Equation III)

    常微分方程 一阶线性微分方程组 基本概念 解的存在和唯一性定理 齐次线性微分方程组 非齐次线性微分方程组 常系数线性微分方程组 常微分方程 Ordinary Differential Equation I 常微分方程 Ordinary Di
  • C结构体内char[] 数组的初始化

    一种C结构体内char 数组的初始化 include

随机推荐

  • 用户控件自定义 DependencyProperty

    用户控件自定义 DependencyProperty 属性使用教程 DependencyProperty 概念 依赖属性创建 自定义控件的依赖属性 DependencyProperty 概念 依赖属性就是一种可以自己没有值 并能通过使用Bi
  • 断电的方法关闭计算机,win7设置usb关机断电

    win7设置usb关机断电 win7设置usb关机拔出断电的解决方法 小伙伴们可能会经常性的遇到一个问题 就是win7电脑已经关闭了 但是插在计算机usb接口上的硬盘依然会被计算机供电 发出闪亮的光 这就让很多小伙伴们厌烦 为了帮小伙伴们解
  • 第十三篇、基于Arduino uno,获取薄膜压力传感器的值——结果导向

    0 结果 说明 先来看看串口调试助手显示的结果 第一个值是上电后检测到的平均压力值 第二个值是实时的压力值 第三个值是平均压力值和实时压力值的差值 如果是你想要的 可以接着往下看 1 外观 说明 虽然薄膜压力传感器形态各异 但是原理和代码都
  • Spring MVC下篇

    书接上回Spring MVC上篇 前面介绍了Spring MVC的服务器如何获得用户的请求 那么今天就来介绍一下服务器如何将响应返回给客户端 目录 3 服务器将结果返回给用户 前端 3 1 返回一个静态页面 3 2 返回 text html
  • 对wangeditor进行扩展---- 源代码

    看到有人对我做的WangEditor比较感兴趣 问了一些问题 但由于我并不常来 所以就没能及时答复 抱歉了 未避免以后类似问题发生 我将我修改的wangeditor js直接发在这里 有兴趣的可以下载后自己分析 希望能帮到需要的人 扩展后的
  • 【Docker安装部署Kafka+Zookeeper详细教程】

    Docker安装部署Kafka Zookeeper Docker拉取镜像 Docker拉取zookeeper的镜像 docker pull zookeeper Docker拉取kafka的镜像 docker pull wurstmeiste
  • 2022广东省安全员A证第三批(主要负责人)考试试题模拟考试平台操作

    题库来源 安全生产模拟考试一点通公众号小程序 2022广东省安全员A证第三批 主要负责人 培训试题为广东省安全员A证第三批 主要负责人 考试100题全真模拟题 2022广东省安全员A证第三批 主要负责人 考试试题模拟考试平台操作依据广东省安
  • C++ Builder建立COM服务程序的方法

    转 http blog csdn net jaminwm article details 463953 说明 最近学习关于用C Builder建立Activex插件的使用 在网上找到了一些教程 这也是找到这篇文章 但是里边一些细节的东西说明
  • 用rsync同步文件夹

    用rsync命令在不同机器间同步文件夹 及hexo deployer rsync一个BUG的规避方法 命令格式 例如 要把本机public目录与服务器上的 home blog目录同步 用以下命令 rsync delete avz e ssh
  • 对接新浪股票交易接口api需要注意哪些细节 ?

    API接口是一个很抽象的概念 有许多接口 在实际应用中 会产生各种不同的影响 所以 在接入新浪股票交易接口api的过程中 需要注意哪些细节 首先是系统的联结 随着软件的不断发展 很多的软件都被分解成了不同的模块 但在具体的设计中 每个API
  • 无法打开源文件<sys/time.h>,但是用time.h编译就会出错,缺少gettimeofday()

    因为sys time h是uinx系统下的库文件 而现在使用的平台是在windows 由于未指明程序运行的系统 导致找不到对应的头文件 需要重新实现gettimeofday 函数 define WIN32 include
  • Insertion插入排序

    原谅我接着偷懒 是真的没有什么写的内容了啊 好怀疑他们那些大佬是怎么那么多的文章和技术分享的 自闭中ing 最好情况的时间复杂度是 O n 最坏情况的时间复杂度是 O n2 然而时间复杂度这个指标看的是最坏的情况 而不是最好的情况 所以插入
  • 6-4 求自定类型元素的平均 (10分)

    6 4 求自定类型元素的平均 10分 本题要求实现一个函数 求N个集合元素S 的平均值 其中集合元素的类型为自定义的ElementType 函数接口定义 ElementTypeAverage ElementType S intN 其中给定集
  • (一)轻松工作必学:windows bat脚本语法

    记得在初中的时候 电脑刚刚进入了我们的生活 有一天同学发过来一个 xxx bat 的文件 我双击打开之后 电脑就很快就关机了 当时的我还是一头雾水 后来知道这只是一个只需一行代码的批处理文件 批处理文件是一种简化的脚本 可以帮助我们运行一些
  • Node服务器-express框架

    1 Express认识初体验 2 Express中间件使用 3 Express请求和响应 4 Express路由的使用 5 Express的错误处理 6 Express的源码解析 一 手动创建express的过程 1 在项目文件的根目录创建
  • 爬虫从入门到放弃——组件的使用和定制

    以前我们提到了WebMagic的组件 WebMagic的一大特色就是可以灵活的定制组件功能 实现你自己想要的功能 在Spider类里 PageProcessor Downloader Scheduler和Pipeline四个组件都是Spid
  • STM32 HAL——GPIO

    HAL的代码规范建议 以下内容是我自己参照HAL做的总结 如果公司有固定的编码规范 就跟公司保持一致 如果没有 那就推荐和所用库保持一致 注意 因人而异 并不具有普遍适用性 HAL库有如下代码规范 1 目录名除了专有词汇外 统一是单词首字母
  • IDEA去除掉虚线,波浪线,和下划线实线的方法

    推荐一下个人的公众号 终码一生 专注于Java技术学习 开源项目分享和常见问题解决等 喜欢的小伙伴可以关注下 感谢大家的支持 初次安装使用IDEA 总是能看到导入代码后 出现很多的波浪线 下划线和虚线 这是IDEA给我们的一些提示和警告 但
  • 【机器学习】核函数

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 核方法 核技巧 非线性分类问题是指通过利用非线性模型才能很好地进行分类的问题 如图 1 1 1 所示 表示正样本 表示负样本 显然无法用直线 线性模型 将正负样本正确分开 但是可以用
  • android service 返回值,Android平台调用Web Service:线程返回值(示例代码)

    接上文 前文中的遗留问题 对于Java多线程的理解 我曾经只局限于实现Runnable接口或者继承Thread类 然后重写run 方法 最后start 调用就算完事 可是一旦涉及死锁以及对共享资源的訪问和随时监控线程的状态和运行顺序和线程返