本实验要求实现安卓客户端与服务端的通信。模仿QQ登录,用户成功登录之后会看到好友列表,代码实现
时间: 2024-02-18 21:01:57 浏览: 57
好的,这是您的第二个问题。下面是一个简单的代码实现示例:
1. 服务端代码实现
在服务端,您需要使用Socket或HTTP协议来进行通信。这里以Socket为例,示例代码如下:
```java
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务端已启动,等待客户端连接...");
Socket socket = serverSocket.accept();
System.out.println("客户端已连接,IP地址为:" + socket.getInetAddress().getHostAddress());
// 获取输入输出流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// 验证用户名和密码
String username = in.readLine();
String password = in.readLine();
if (username.equals("admin") && password.equals("123456")) {
// 登录成功,返回好友列表数据
out.println("好友1");
out.println("好友2");
out.println("好友3");
} else {
// 登录失败,返回错误信息
out.println("用户名或密码错误");
}
// 关闭输入输出流和Socket连接
in.close();
out.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
2. 客户端代码实现
在客户端,您需要使用Socket或HTTP协议来进行通信,并使用ListView或RecyclerView等控件来展示好友列表数据。示例代码如下:
```java
public class MainActivity extends AppCompatActivity {
private EditText etUsername;
private EditText etPassword;
private Button btnLogin;
private ListView lvFriendList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etUsername = findViewById(R.id.et_username);
etPassword = findViewById(R.id.et_password);
btnLogin = findViewById(R.id.btn_login);
lvFriendList = findViewById(R.id.lv_friend_list);
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 开启一个线程进行登录验证和好友列表获取
new Thread(new Runnable() {
@Override
public void run() {
try {
// 建立Socket连接
Socket socket = new Socket("服务端IP地址", 8888);
// 获取输入输出流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// 发送用户名和密码
out.println(etUsername.getText().toString());
out.println(etPassword.getText().toString());
// 接收好友列表数据
final List<String> friendList = new ArrayList<>();
String friend;
while ((friend = in.readLine()) != null) {
friendList.add(friend);
}
// 更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, friendList);
lvFriendList.setAdapter(adapter);
}
});
// 关闭输入输出流和Socket连接
in.close();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
});
}
}
```
在上面的示例代码中,您需要将"服务端IP地址"替换为实际的服务端IP地址。同时,需要注意在线程中更新UI需要使用runOnUiThread方法。
阅读全文