java - 如何从ms sql检索数据到android studio中的 TextView

标签 java android sql sql-server

我正在尝试将 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/

相关文章:

java - 打印数字三角形 - 两个正方形

java - 允许在电子邮件验证中使用破折号

php - SELECT 查询未检索最新数据

php - 数据库错误代码 1146 - 本地与在线

c# - sql中如何比较三列

java - 如何在Java数据结构中实现多类别?

java - 如何将输入流复制到需要输出流的 Apache TeeOutputStream?

带有对话框和 toasts 的 Android Screenshot API,他们的 parent 是谁?

java - 在 HashMap 和 HashTable 中计算 hashCode 的工作方式是否不同?

java - 如何在 Fragment 中动态添加 TableRow?