Android 安卓可以';运行套接字时,无法关闭对话框
我有一些问题。不起作用。 我想输入ip,用户名,密码登录。当我点击提交按钮时,对话框无法关闭。需要注意的是,我的线程套接字能够从服务器检索消息并将消息发送回服务器。只有当线程套接字出错时,才能关闭该对话框Android 安卓可以';运行套接字时,无法关闭对话框,android,sockets,rdp,Android,Sockets,Rdp,我有一些问题。不起作用。 我想输入ip,用户名,密码登录。当我点击提交按钮时,对话框无法关闭。需要注意的是,我的线程套接字能够从服务器检索消息并将消息发送回服务器。只有当线程套接字出错时,才能关闭该对话框 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.jiemian); netInit
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.jiemian);
netInit();
JieMianActivity.jiemian = this;
LayoutInflater factory = LayoutInflater.from(JieMianActivity.this);
View view = factory.inflate(R.layout.login, null);
dialog02 = new AlertDialog.Builder(JieMianActivity.this)
.setIcon(android.R.drawable.btn_star)
.setTitle("login")
.setView(view)
.setPositiveButton("submit", onclickButton)
.setNegativeButton("cancel", onclickButton).create();
dialog02.show();
}
private OnClickListener onclickButton = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.v("which", which+"");
switch(which){
case Dialog.BUTTON_POSITIVE:
dialog.dismiss();//doesn't work , cann't close dialog.
EditText ip = (EditText) findViewById(R.id.ip);
EditText username = (EditText) findViewById(R.id.username);
EditText password = (EditText) findViewById(R.id.password);
new Connect(JieMianActivity.jiemian).run();//do some socket thing
break;
case Dialog.BUTTON_NEGATIVE:
dialog.dismiss();
JieMianActivity.jiemian.finish();
break;
}
}
};
这是我的帖子:
class Connect extends Thread{
private JieMianActivity jiemain;
public Connect(JieMianActivity jiemian){
this.jiemain = jiemian;
}
public void run(){
//Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST);
try {
Display display = getWindowManager().getDefaultDisplay();
InputStream is = getResources().getAssets().open(
connect2RDP.mapFile);
sfv = (SurfaceView) findViewById(R.id.surfaceView);
sfh = sfv.getHolder();
sfh.addCallback(JieMianActivity.jiemian);
if (conn.connect("192.168.10.134", "Adminstrator", "123",
display.getWidth(), display.getHeight(), 3389, is)) {
Log.v("login", "success");
//dialog02.dismiss();
Log.v("login", "ok");
canvas = new MyCanvas();
canvas.setRop(new RasterOp());
canvas.setHeight(Options.height);
canvas.setWidth(Options.width);
canvas.setRight(Options.width - 1);
canvas.setBottom(Options.height - 1);
canvas.setBackstore(new WrappedImage(Options.width,
Options.height, JieMianActivity.jiemian));
canvas.setJiemian(JieMianActivity.jiemian);
canvas.setSurView(sfv);
canvas.setSurHolder(sfh);
conn.doconnect(JieMianActivity.jiemian);// 启动RDP
// init();
}
} catch (OrderException e) {
} catch (Exception e) {
}
}
};
您需要更改代码以启动线程,您需要调用方法
start()
——该方法将执行在该线程中编写的run()
方法。
所以,
在
onClick
处理程序中调用Connect.start()
而不是Connect.run()
。您需要更改代码以启动线程,您需要调用将执行该线程中编写的run()
方法的方法start()
。
所以,
在
onClick
处理程序中调用Connect.start()
而不是Connect.run()
。我认为您应该关闭UI线程中的警报对话框,否则它将无法工作。你可以通过两种方式做到这一点:1。使用消息处理程序2。使用RunOnUiThread。样本供您参考:
一,
二,
我认为你应该在UI线程中关闭你的警报对话框,否则它将无法工作。你可以通过两种方式做到这一点:1。使用消息处理程序2。使用RunOnUiThread。样本供您参考: 一, 二,
messageHandler.sendEmptyMessageDelayed(unique_id, 500);
private Handler messageHandler = new Handler()
{
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case unique_id:
// do here
break;
}
}
};
Runnable hide_ui = new Runnable() {
@Override
public void run() {
// do here
}
};
runOnUiThread(hide_ui);