-2
public class MainActivity extends Activity
{
private EditText txtLoginName;
private EditText txtLoginPassword;
private Button btnLogin;
private Button btnReset;
private static final int FLAG_LOGIN_SUCCESS=1;
private static final String MSG_LOGIN_ERROR="登录出错";
private static final String MSG_LOGIN_SUCCESS="登录成功";
private static ProgressDialog dialog;
public static final String MSG_LOGIN_FAILED="登录名或密码出错";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
init();
//点击登录,响应事件
this.btnLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
final String loginName=txtLoginName.getText().toString();
final String loginPassword=txtLoginPassword.getText().toString();
Toast.makeText(v.getContext(), loginName, Toast.LENGTH_SHORT).show();
Toast.makeText(v.getContext(), loginPassword, Toast.LENGTH_SHORT).show();
if(dialog==null)
{
dialog=new ProgressDialog(MainActivity.this);
}
dialog.setTitle("请等待");
dialog.setMessage("登录中...");
dialog.setCancelable(false);
dialog.show();
MyRunnable mRunnable=new MyRunnable(loginName,loginPassword);
Thread thread=new Thread(mRunnable);
thread.start();
}
});
//点击重置,响应事件
this.btnReset.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
txtLoginName.setText("");
txtLoginPassword.setText("");
}
});
}
private static class IHandler extends Handler
{
private final WeakReference<Activity> mActivity;
public IHandler(MainActivity activity)
{
mActivity=new WeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg)
{
if(dialog!=null)
{
dialog.dismiss();
}
int flag=msg.what;
switch (flag) {
case 0:
String errorMsg=(String)msg.getData().getString("ErrorMsg");
((MainActivity)mActivity.get()).showTip(errorMsg);
break;
case FLAG_LOGIN_SUCCESS:
((MainActivity)mActivity.get()).showTip(MSG_LOGIN_SUCCESS);
default:
break;
}
}
}
private void showTip(String str)
{
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
private IHandler handler=new IHandler(this);
private void init()
{
this.txtLoginName=(EditText) findViewById(R.id.editText1);
this.txtLoginPassword=(EditText) findViewById(R.id.editText2);
this.btnLogin=(Button) findViewById(R.id.button1);
this.btnReset=(Button) findViewById(R.id.button2);
}
class MyRunnable implements Runnable
{
private ObjectInputStream readObject;
private ObjectOutputStream writeObject;
private Socket socket;
private ReturnMessage returnMessage;
private String loginName;
private String loginPassword;
LoginMessage msg;
public MyRunnable(String loginName,String loginPassword)
{
this.loginName=loginName;
this.loginPassword=loginPassword;
}
@Override
public void run()
{
try
{
//userService.userLogin(loginName, loginPassword);
socket = new Socket("192.168.1.114", 8000);
writeObject = getOutObjectStream(socket);
readObject = getInObjectStream(socket);
msg=new LoginMessage(loginName, loginPassword);
writeObject.writeObject(msg);
writeObject.flush();
returnMessage =(ReturnMessage)readObject.readObject();
Log.d("hehehehe", returnMessage.getStr());
socket.close();
handler.sendEmptyMessage(FLAG_LOGIN_SUCCESS);
}
catch(SecurityException e)
{
/*e.printStackTrace();*/
Message msg=new Message();
Bundle data=new Bundle();
data.putSerializable("ErrorMsg", "1");
msg.setData(data);
handler.sendMessage(msg);
}
catch(Exception e)
{
/*e.printStackTrace();*/
Message msg=new Message();
Bundle data=new Bundle();
data.putSerializable("ErrorMsg","2");
msg.setData(data);
handler.sendMessage(msg);
}
}
private ObjectOutputStream getOutObjectStream(Socket socket) throws IOException
{
return new ObjectOutputStream(socket.getOutputStream());
}
private ObjectInputStream getInObjectStream(Socket socket) throws IOException
{
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
return new ObjectInputStream(bis);
}
}
}
这是一个简单的登录服务器程序,运行它可以发送消息到服务器,但它不能接收来自服务器的消息,有时会崩溃,谁能帮助我?为什么我无法接收来自服务器的消息?
它在哪里崩溃'有时'? – Abhi
这是一段代码。请仅发布相关部分,并确保其正确缩进。 – e4c5
当我第一次运行程序时,它崩溃了,但只是这样几次,我不知道发生了什么事,而且我也无法接收来自服务器的消息 –