业务代码中(java class)中如何实现多线程,并且将子线程中的值随方法返回返回值
转载自http://bbs.csdn.net/topics/390731832
问题:
public static String getAddress(final InputStream inputStream, final String mobile) {
new Thread() {
public void run() {
try {
Log.i(TAG, "inputStream: " + inputStream.available());
String soap = readSoapFile(inputStream, mobile);
byte[] data = soap.getBytes();
URL url = new URL(
"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setDoOutput(true); // 设置允许输出
conn.setConnectTimeout(5 * 1000); // 设置超时时间为5秒
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type",
"application/soap+xml; charset=utf-8");
conn.setRequestProperty("Content-Length",
String.valueOf(data.length)); // 设置长度
OutputStream outputStream = conn.getOutputStream();
outputStream.write(data);
outputStream.flush();
outputStream.close();
if (conn.getResponseCode() == 200) {
address =parseResponseXML(conn
.getInputStream()); // 解析服务器端返回的数据 }
System.out.println("address=="+address);//这里是有值
}
} catch (Exception e) {
Log.e(TAG, e.toString());
System.out.println("获取手机号码归属地失败");
}
};
}.start();
System.out.println("addres"+address);//这里返回的是空
return address;
}
addess返回空值
因为不在一个线程中,所以值无法跨线程传递,解决方法:
public static String getAddress (final InputStream inputStream, final String mobile) {
Thread thread = new Thread() {
public void run() {
try {
Log. i(TAG, "inputStream: " + inputStream.available());
String soap = readSoapFile(inputStream, mobile);
byte[] data = soap.getBytes();
URL url = new URL(
"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx" );
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setDoOutput( true);
conn.setConnectTimeout(5 * 1000);
conn.setRequestMethod( "POST");
conn.setRequestProperty( "Content-Type",
"application/soap+xml; charset=utf-8");
conn.setRequestProperty( "Content-Length",
String. valueOf(data.length));
OutputStream outputStream = conn.getOutputStream();
outputStream.write(data);
outputStream.flush();
outputStream.close();
if (conn.getResponseCode() == 200) {
address =parseResponseXML(conn
.getInputStream());
}
} catch (Exception e) {
}
};
};
thread.start();
try { thread.join(); } catch (Exception e) {}
if(address !=null){
return address ;
}
return null ;
}
业务代码中(java class)中如何实现多线程,并且将子线程中的值随方法返回返回值的更多相关文章
- Cocos2d-X多线程(4) 在子线程中进行网络请求
新版本的android系统已经不允许在UI线程中进行网络请求了,必须新建一个线程. 代码实操: 头文件: #ifndef __TestThreadHttp_SCENE_H__ #define __Te ...
- iOS开发之线程间的MachPort通信与子线程中的Notification转发
如题,今天的博客我们就来记录一下iOS开发中使用MachPort来实现线程间的通信,然后使用该知识点来转发子线程中所发出的Notification.简单的说,MachPort的工作方式其实是将NSMa ...
- 如何查看子线程中的GC Alloc
1)如何查看子线程中的GC Alloc2)Build时,提示安卓NDK异常3)如何获得ParticleSystem产生的三角形数量4)关于图片通道的问题5)GPUSkinning导致模型动画不平滑 M ...
- 老问题:Android子线程中更新UI的3种方法
在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 方法一:用Handler 1.主线程中定义Handler: Handle ...
- Java子线程中的异常处理(通用)
在普通的单线程程序中,捕获异常只需要通过try ... catch ... finally ...代码块就可以了.那么,在并发情况下,比如在父线程中启动了子线程,如何正确捕获子线程中的异常,从而进行相 ...
- java主线程捕获子线程中的异常
本文主要参考:<think in java> 好,下面上货. 正常情况下,如果不做特殊的处理,在主线程中是不能够捕获到子线程中的异常的. 例如下面的情况. package com.xuey ...
- 转:Java子线程中的异常处理(通用)
引自:https://www.cnblogs.com/yangfanexp/p/7594557.html 在普通的单线程程序中,捕获异常只需要通过try ... catch ... finally . ...
- Java子线程中操作主线程Private级别数据
两个类分别如下: <pre name="code" class="java">package Demo2; import java.util.*; ...
- android 不能在子线程中更新ui的讨论和分析
问题描写叙述 做过android开发基本都遇见过 ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是仅仅能在主线程中更改 ui.子线程要 ...
- Android多线程之(一)View.post()源码分析——在子线程中更新UI
提起View.post(),相信不少童鞋一点都不陌生,它用得最多的有两个功能,使用简便而且实用: 1)在子线程中更新UI.从子线程中切换到主线程更新UI,不需要额外new一个Handler实例来实现. ...
随机推荐
- ubuntu 清除缓存
2013-03-31 10:20 sudo apt-get autoremove //自动卸载不使用的内容 sudo apt-get autoclean //自动清理,但不会删除用于安装而下载的临时文 ...
- postman+newman(2)
用newman执行带环境变量的postman测试用例 1.在postman中将用例项目文件导出外还需将环境变量文件导出,如下: 2.newman执行如下: newman -c 测试用例文件 -e 环境 ...
- 给日志添加“复制”效果
给日志添加如上效果的实现方法: 在日志编辑页面,源代码中,添加如下代码,包裹住 目标内容style1: <div class="cnblogs_code"><di ...
- 简洁既是美—用while语句复制数组
简洁既是美,程序员应尽量尝试编写简洁的表达式,争取用简单的代码来实现更多的功能,当然,这也要看情况了(有时候也得考虑程序运行的时间嘛). 在阅读C++Prime Plus到while语句时有一个讲一个 ...
- 单链表在不知头结点的情况下对第i个元素的删除
一.首先,看看单链表中第i个元素的删除: Status ListDelete_L (LinkList &L,int i,ElemType &e){ //在带头结点的单链表L中,删除第i ...
- SQL SELECT语句
基本SQL SELECT语句 1. 下面的语句是否可以执行成功 select ename , job , sal as salary from emp; 2. 下面的语句 ...
- JS 之作用域链和闭包
1.JS无块级作用域 <script> function Main(){ if (1==1){ var name = "alex"; } console.log(nam ...
- Android DDMS检测内存泄露
Android DDMS检测内存泄露 DDMS是Android开发包中自带工具,可以测试app性能,用于发现内存问题. 1.环境搭建 参考之前发的Android测试环境搭建相关文章,这里不再复述: 2 ...
- LinQ 基础
LinQ全名:Linq to Sql,是一种数据库访问技术 常见的数据库访问技术: 1.ADO.NET 2.Entity Framework 框架 3.LinQ LinQ是高集成化的数据访问类,它会 ...
- 循序渐进Python3(六) -- 初识内置变量、反射、递归
#python用下划线作为变量前缀和后缀指定特殊变量.稍后我们会发现, #对于程序来说,其中的有些变量是非常有用的,而其他的则是未知或者无用的. #我们总结一下Python中下划线的特殊用法 ...