id=LoginMainActivity.post_userid; userid.setText(id); if(id.equals("")||id==null){ Toast.makeText(getApplicationContext(), "请先登录!", Toast.LENGTH_SHORT).show(); intent = new Intent(setMymsgActivity.this,MyselfActivity.class); startActivity(intent); } //账号userId,密码passWord,姓名name,专业subject,电话phone,QQ号qq,地址address DatabaseHelper dbhelper = new DatabaseHelper(this); SQLiteDatabase db=dbhelper.getReadableDatabase(); usersave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {//账号userId,密码passWord,姓名name,专业subject,电话phone,QQ号qq,地址address post_name=username.getText().toString(); post_subject=usersubject.getText().toString(); post_phone=userphone.getText().toString(); post_qq=userqq.getText().toString(); post_address=useraddress.getText().toString(); ContentValues values=new ContentValues(); if(!post_name.equals("")) { values.put("name", post_name); } if(!post_subject.equals("")) { values.put("subject", post_subject); } if(!post_phone.equals("")) { values.put("phone", post_phone); } if(!post_qq.equals("")) { values.put("qq", post_qq); } if(!post_address.equals("")) { values.put("address", post_address); } saveValues(values); Toast.makeText(getApplicationContext(), "修改成功", Toast.LENGTH_SHORT).show(); intent = new Intent(setMymsgActivity.this,userMsgActivity.class); startActivity(intent); } }); back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { intent = new Intent(setMymsgActivity.this,userMsgActivity.class); startActivity(intent); } }); } private void saveValues(ContentValues values){ DatabaseHelper dbhelper = new DatabaseHelper(this); SQLiteDatabase db=dbhelper.getReadableDatabase(); db.update("users",values,"userId=?",new String[] {id}); db.close(); } }
时间: 2023-06-18 15:08:45 浏览: 39
这是一段 Android 开发中的 Java 代码,主要是对用户信息进行修改和保存。代码中使用了 SQLite 数据库进行数据存储,通过点击 usersave 按钮保存修改后的用户信息。如果用户未登录,则会提示用户先进行登录操作。同时,如果用户修改了某些信息,则只会保存修改后的信息。最后,根据用户的操作,跳转到不同的页面。
相关问题
def btn_uart_cb(self): if not self.serial.isOpen(): self.btn_Open.setText("关闭串口") portName = self.comboBox_uart.currentText() baud = self.comboBox_baud.currentText() self.serial = serial.Serial(portName, baud) else: self.serial.close() self.btn_Open.setText("打开串口")点击按钮后闪退
这段代码中的问题可能是在点击按钮后出现了异常导致程序崩溃。建议在代码中添加异常处理语句,以便捕获异常并进行处理。例如:
```
def btn_uart_cb(self):
try:
if not self.serial.isOpen():
self.btn_Open.setText("关闭串口")
portName = self.comboBox_uart.currentText()
baud = self.comboBox_baud.currentText()
self.serial = serial.Serial(portName, baud)
else:
self.serial.close()
self.btn_Open.setText("打开串口")
except Exception as e:
print(e)
```
这样可以在出现异常时打印异常信息,方便调试。另外,还可以尝试使用调试工具来查找导致程序崩溃的具体原因。
def query_employee(self, id): conn = pymysql.connect(host='39.99.214.172', user='root', password='Solotion.123', database='jj_tset') cursor = conn.cursor() cursor.execute("SELECT * FROM employee_table WHERE user_id='%s'" % id) result = cursor.fetchone() conn.close() return result # 读取数据 def read_data(self): data = self.ser.readline() if data: # 解析数据 id = data.decode().strip() # 查询员工信息 result = self.query_employee(id) if result: # 更新UI界面 self.id_label.setText("员工ID:" + result[0]) self.name_label.setText("姓名:" + str(result[1])) self.six_label.setText("性别:" + result[2]) self.sfz_label.setText("身份证:" + str(result[3])) self.tel_label.setText("电话:" + result[4]) else: # 显示空白信息 self.id_label.setText("员工ID:") self.name_label.setText("姓名:") self.six_label.setText("性别:") self.sfz_label.setText("身份证:") self.tel_label.setText("电话:") # 定时读取数据 QTimer.singleShot(100, self.read_data) def closeEvent(self, event): # 关闭串口 self.ser.close()怎么改为多线程来优化程序性能,将耗时的操作放在子线程中执行,避免阻塞主线程
可以使用Python中的`QThread`来实现多线程功能,将`read_data`函数中的查询数据库操作放在子线程中执行,避免阻塞主线程。示例代码如下:
```python
from PyQt5.QtCore import QThread, QTimer, pyqtSignal
class QueryThread(QThread):
query_result = pyqtSignal(object)
def __init__(self, id):
super().__init__()
self.id = id
def run(self):
conn = pymysql.connect(host='39.99.214.172', user='root', password='Solotion.123', database='jj_tset')
cursor = conn.cursor()
cursor.execute("SELECT * FROM employee_table WHERE user_id='%s'" % self.id)
result = cursor.fetchone()
conn.close()
self.query_result.emit(result) # 发送查询结果信号
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.query_thread = None # 查询线程
def read_data(self):
data = self.ser.readline()
if data:
id = data.decode().strip()
if not self.query_thread: # 如果查询线程不存在,则创建并启动
self.query_thread = QueryThread(id)
self.query_thread.query_result.connect(self.update_ui)
self.query_thread.start()
else:
self.query_thread.id = id # 如果查询线程已存在,则更新查询ID
QTimer.singleShot(100, self.read_data)
def update_ui(self, result):
if result:
self.id_label.setText("员工ID:" + result[0])
self.name_label.setText("姓名:" + str(result[1]))
self.six_label.setText("性别:" + result[2])
self.sfz_label.setText("身份证:" + str(result[3]))
self.tel_label.setText("电话:" + result[4])
else:
self.id_label.setText("员工ID:")
self.name_label.setText("姓名:")
self.six_label.setText("性别:")
self.sfz_label.setText("身份证:")
self.tel_label.setText("电话:")
def closeEvent(self, event):
self.ser.close()
if self.query_thread:
self.query_thread.quit()
self.query_thread.wait()
```