Android聊天工具基于socket实现

2019-12-10 19:09:04王冬梅

3. 客户端登录界面     

public class MainActivity extends Activity {
 private EditText mUser;
  
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
   
  mUser = (EditText) findViewById(R.id.username);
 }
  
 public void login(View view) {
  final String userName = mUser.getText().toString().trim();
  Login login = new Login(userName);
  login.setOnLoginListener(new Login.LoginCallback() {
   @Override
   public void onLogin(boolean success) {
    if(success) {
     Intent intent = new Intent(MainActivity.this, Chat.class);
     intent.putExtra("user", userName);
     startActivity(intent);
     finish();
    }else {
     Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
    }
   }
  });
   
  login.login();
 }
}

4. 处理登录     

public class Login {
 private String mUserName;
 private LoginCallback mCallback;
  
 public Login(String userName) {
  mUserName = userName;
 }
  
 public void setOnLoginListener(LoginCallback callback) {
  mCallback = callback;
 }
  
 private Handler mHandler = new Handler() {
  public void handleMessage(Message msg) {
   switch (msg.what) {
   case Constant.SUCCESS:
    mCallback.onLogin(true);
    break;
   case Constant.FAILED:
    mCallback.onLogin(false);
    break;
   }
  };
 };
  
 public void login() {
  new Thread(new Runnable() {
   @Override
   public void run() {
    Socket socket = null;
    try {
     socket = new Socket();
     socket.connect(new InetSocketAddress("192.168.100.100", 8888), 4000);
     PrintWriter writer = new PrintWriter(socket.getOutputStream());
     writer.println("login:" + mUserName);
     writer.flush();
      
     BufferedReader reader = new BufferedReader(
       new InputStreamReader(socket.getInputStream()));
     String line = reader.readLine();
     System.out.println(line);
     if("success".equals(line)) {
      PConnection.socket = socket;
      mHandler.sendEmptyMessage(Constant.SUCCESS);
     }else {
      mHandler.sendEmptyMessage(Constant.FAILED);
     }
    }catch(Exception e) {
     e.printStackTrace();
    }
   }
  }).start();
 }
  
 public interface LoginCallback {
  public void onLogin(boolean success);
 }
}