子线程里调用方法返回值如何给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 "服务器连接失败";
}
}
/**/
}