子线程里调用方法返回值如何给UI线程?

m_syb 2013-08-13 11:33:32
XML界面上有一个按钮,点击按钮要出现等待界面,调用一个Thread,在这个线程里调用一个方法setOnOrOff。
setOnOrOff有返回值,这个值怎么给UI线程里的一个变量?

我要实现的功能是:点按钮的时候出现等待界面,按钮事件里要调用方法,如果返回值是1,提示成功。

代码如下:
public class MainLnActivity extends Activity {

private TextView txtView11;

private ProgressDialog proDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_ln);

txtView11=(TextView)findViewById(R.id.textview11);

txtView11.setOnClickListener(new MyOFFListener ());//开关--关


}

/*开关off*/
class MyOFFListener implements OnClickListener
{
String rtnValue="";

private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {

//关闭ProgressDialog
proDialog.dismiss();


}};

public void onClick(View v)
{
proDialog=ProgressDialog.show(MainLnActivity.this, "正在关闭...", "正在关闭...",true,true); //显示等待界面
new Thread(new Runnable() {
public void run() {
rtnValue=setOnOrOff("0"); //调用方法,这部分出错
handler.sendMessage(0);

}
}).start();

String[] aa=rtnValue.split("@");//从线程中返回值,弹出提示框
if(aa[0].equals("1"))
{
new AlertDialog.Builder(this)
.setTitle("开关设置")
.setMessage("开关设置成功")
.setPositiveButton("确定", null)
.show();
}
}
}

public String setOnOrOff(String onoff)//调用webservice返回结果
{
DefaultHttpClient client=new DefaultHttpClient();
HttpPost requestget=new HttpPost("http://123.233.11.22/MobileTerminal.asmx/mI_SetDeviceOpen");
requestget.setHeader("Accept", "application/json");
requestget.addHeader("Content-Type", "application/json; charset=utf-8");
JSONObject jsonParams=new JSONObject();
try {
jsonParams.put("DeviceID",SysDeviceID);
jsonParams.put("State",onoff);

HttpEntity bodyEntity=new StringEntity(jsonParams.toString(),"utf8");
requestget.setEntity(bodyEntity);
HttpResponse responsepost = client.execute(requestget);
if(responsepost.getStatusLine().getStatusCode()==200){
String result=EntityUtils.toString(responsepost.getEntity());
JSONObject resultobj=new JSONObject(result.toString());
String json_str = resultobj.getString("d");

return json_str;

}else
{
Toast.makeText(MainLnActivity.this, "服务器连接失败!", Toast.LENGTH_SHORT)
.show();
return "服务器连接失败";
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "服务器连接失败";
}

}

/**/

}
...全文
330 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
a472544436 2016-04-15
  • 打赏
  • 举报
回复
咱不能 用个变量吗
oldmtn 2014-09-04
  • 打赏
  • 举报
回复
	public static class MyHandler extends Handler {
		public final static int SCAN_OK = 0;
		
		WeakReference<Java03_Frame_Picture>		mFrmPicture;
		MyHandler(Java03_Frame_Picture frmPicture) {
			mFrmPicture = new WeakReference<Java03_Frame_Picture>(frmPicture);
		}

		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
				case SCAN_OK: {
					Java03_Frame_Picture frmPicture = mFrmPicture.get();
					frmPicture.handleMessage(SCAN_OK);
				}
				break;
			}
		}
	}
m_syb 2013-08-13
  • 打赏
  • 举报
回复
能给段代码不,网上查的我实在晕乎
顾小林 2013-08-13
  • 打赏
  • 举报
回复
handle 发出来
youdiving 2013-08-13
  • 打赏
  • 举报
回复
在主线程里定义一个handler;
 handler=new Handler(){

				@Override
				public void handleMessage(Message msg) {
					// TODO Auto-generated method stub
					super.handleMessage(msg);
					if(msg.what==0)
					{
						result=msg.getData().getInt("result");
						
					}
				}
		    	
		    };
将handler通过参数传递到子线程在子线程的run方法里添加代码
Message msg=new Message();
					msg.getData().putInt("result", result);
					msg.what=0;
					handler.sendMessage(msg);
//或者
//handler.post(){
    //对主线程里control的相关操作,
//}

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧