我對 Android Studio 和 Java 有點陌生。我正在嘗試通過將文本替換為ArrayList. 但是,使用時setText(userList.get(0)),應用程式崩潰。我的猜測是陣列串列為空或無法訪問。但是我在帶有 的按鈕上使用了相同的代碼setOnClickListener,文本由在 arrayList 中找到的字串更新。
我想讓應用程式自動更新Text加載活動。
這是我的 MainActivity.java - 我評論了導致應用程式崩潰的 setText。
package com.example.sampletest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ArrayList<String> userList = new ArrayList<String>();
TextView text;
Button swapText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new getUsers().execute();
text = (TextView) findViewById(R.id.text);
swapText = (Button) findViewById(R.id.button);
//text.setText(userList.get(0));
swapText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
text.setText(userList.get(0));
}
});
}
class getUsers extends AsyncTask<Void, Void, Void> {
String error = "";
@Override
protected Void doInBackground(Void... voids) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://192.168.100.5:3306/cardetailingdb", "lau", "lau");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
while (resultSet.next()) {
userList.add(resultSet.getString(1));
}
} catch (Exception e) {
error = e.toString();
}
return null;
}
}
}
uj5u.com熱心網友回復:
我的猜測是陣列串列為空或無法訪問。
該串列為空。您可以在 logcat 中查看堆疊跟蹤以了解崩潰詳細資訊。
但是我在帶有 setOnClickListener 的按鈕上使用了相同的代碼,文本由在 arrayList 中找到的字串更新。
那是因為它不是onCreate()在單擊按鈕時同步執行的,而是在稍后執行的。
我想讓應用程式自動更新加載活動的文本。
您可以onPostExecute()在后臺呼叫完成后在主執行緒上運行的異步任務中添加一個。您還應該檢查異步呼叫是否實際成功,而不是盲目相信其中userList包含元素。
uj5u.com熱心網友回復:
在異步任務型別中,您應該首先確保填充所有資料。Soo 確保背景已完成且串列不為空。希望作業正常。對于崩潰問題,您可以添加一個檢查點,例如:
if(userList.size()>0){ text.setText(userList.get(0)); }
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/430836.html
上一篇:ListAPIView與quersetUser.objects.all()在測驗資料庫中只有兩個用戶進行7次查詢?
