我正在尝试将 ms sql server 中的表中的数据获取到 android 中的 TextView 中
我已经尝试了所有方法,包括异步任务和doinbackground,但没有成功
这是我的代码:
private TextView fam;
private TextView inf;
private boolean success = false; // boolean
private ConnectionClass connectionClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inside__families);
getSupportActionBar().hide();
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
fam = (TextView) findViewById(R.id.ttl2);
fam.setText(getIntent().getStringExtra("Family"));
inf = (TextView) findViewById(R.id.info);
connectionClass = new ConnectionClass();
SyncData orderData = new SyncData();
orderData.execute("");
}
private class SyncData extends AsyncTask<String, String, String> {
String msg = "No Data Found";
ProgressDialog progress;
@Override
protected void onPreExecute()
{
progress = ProgressDialog.show(Inside_Families.this, "Synchronising",
"Please Wait...", true);
}
@Override
protected String doInBackground(String... strings)
{
try {
Connection conn = connectionClass.CONN();
if (conn == null) {
msg = "Please Check Your Connection";
success = false;
} else if (fam.getText().equals("القحطاني")) {
String query = "SELECT Info FROM faminfo";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
if (rs != null)
{
while (rs.next()) {
try {
inf.setText((rs.getString("Info")));
} catch (Exception ex) {
ex.printStackTrace();
}
}
msg = "Found";
success = true;
} else {
msg = "No Data found!";
success = false;
}
}
} catch (Exception e) {
e.printStackTrace();
Writer writer = new StringWriter();
e.printStackTrace(new PrintWriter(writer));
msg = writer.toString();
success = false;
}
return msg;
}
@Override
protected void onPostExecute(String
msg)
{
progress.dismiss();
Toast.makeText(Inside_Families.this, msg + "", Toast.LENGTH_LONG).show();
if (success == false) {
} else {
try {
} catch (Exception ex) {
}
}
}
}
它没有将数据检索到 TextView 中的问题,这就是 logcat 显示的内容:
2019-08-04 19:16:26.465 32026-32495/com.gohool.firstlook.algbail W/System.err: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
2019-08-04 19:16:26.465 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:8530)
2019-08-04 19:16:26.465 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1432)
2019-08-04 19:16:26.465 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.view.View.requestLayout(View.java:23224)
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail I/chatty: uid=10275(u0_a275) AsyncTask #2 identical 4 lines
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.view.View.requestLayout(View.java:23224)
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:360)
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.view.View.requestLayout(View.java:23224)
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.widget.TextView.checkForRelayout(TextView.java:9789)
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.widget.TextView.setText(TextView.java:6023)
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.widget.TextView.setText(TextView.java:5849)
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.widget.TextView.setText(TextView.java:5806)
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail W/System.err: at com.gohool.firstlook.algbail.Inside_Families$SyncData.doInBackground(Inside_Families.java:79)
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail W/System.err: at com.gohool.firstlook.algbail.Inside_Families$SyncData.doInBackground(Inside_Families.java:48)
2019-08-04 19:16:26.466 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:333)
2019-08-04 19:16:26.467 32026-32495/com.gohool.firstlook.algbail W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2019-08-04 19:16:26.467 32026-32495/com.gohool.firstlook.algbail W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
2019-08-04 19:16:26.467 32026-32495/com.gohool.firstlook.algbail W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
2019-08-04 19:16:26.467 32026-32495/com.gohool.firstlook.algbail W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
2019-08-04 19:16:26.467 32026-32495/com.gohool.firstlook.algbail W/System.err: at java.lang.Thread.run(Thread.java:764)
有人可以帮我完成这项任务吗?!
任何帮助将不胜感激!
最佳答案
您的错误提示:只有创建 View 层次结构的原始线程才能触摸其 View 。
就是因为这一行
inf.setText((rs.getString("Info")));
使用AsyncTask时,请记住不要从后台线程更新 View 。由于您尝试从后台线程设置文本,因此会出现错误。
要解决您的错误,请将所有更新 UI 的任务(如 setText)移至 onPostExecute() 方法,这通常是最佳实践。
或者,如果您想从 doInBackground 线程进行一些 UI 更改,您可以尝试这样的操作,
doInBackground() {
runOnUiThread(new Runnable() {
public void run() {
// some code #3 (Write your code here to run in UI thread)
inf.setText((rs.getString("Info")));
}
});
}
关于java - 如何从ms sql检索数据到android studio中的 TextView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57348367/