当前位置: 首页 > 面试题库 >

Java Android AsyncTask + mysql连接

汪安宁
2023-03-14
问题内容

我有一个问题,我正在尝试使用连接到MySQL数据库AsyncTask。我在按钮事件中放入了连接代码,但这给了我错误,

这是代码:

    package com.example.mysqlconnect;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;





import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

  private static final String url = "jdbc:mysql://cool/app";
  private static final String user = "user";
  private static final String pass = "password";

/** Called when the activity is first created. */

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
                Connect();
            }
        });
    }

  TextView tv = (TextView)this.findViewById(R.id.textView1);
  private class Connect extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
      String response = "";

      try {
          Class.forName("com.mysql.jdbc.Driver");
          Connection con = DriverManager.getConnection(url, user, pass);
          // System.out.println("Database connection success");

          String result = "Database connection success\n";
          Statement st = con.createStatement();
          ResultSet rs = st.executeQuery("select * from users");
          ResultSetMetaData rsmd = rs.getMetaData();

          while(rs.next()) {
            result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
            result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";
            result += rsmd.getColumnName(3) + ": " + rs.getString(3) + "\n";
          }
          tv.setText(result);
      }
      catch(Exception e) {
          e.printStackTrace();
          tv.setText(e.toString());
      }
    return response;


    }

    @Override
    protected void onPostExecute(String result) {
        tv.setText(result);
    }
  }

  public void Connect() {
    Connect task = new Connect();
      task.execute();

    }
}

我是AsyncTask的新手,有人可以帮助我发现错误吗?

这是logcat:

    10-23 19:08:41.168: W/dalvikvm(1514): threadid=1: thread exiting with uncaught exception (group=0xb40ca180)
10-23 19:08:41.178: E/AndroidRuntime(1514): FATAL EXCEPTION: main
10-23 19:08:41.178: E/AndroidRuntime(1514): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.mysqlconnect/com.example.mysqlconnect.MainActivity}: java.lang.NullPointerException
10-23 19:08:41.178: E/AndroidRuntime(1514):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at android.os.Looper.loop(Looper.java:137)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at android.app.ActivityThread.main(ActivityThread.java:4424)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at java.lang.reflect.Method.invokeNative(Native Method)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at java.lang.reflect.Method.invoke(Method.java:511)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at dalvik.system.NativeStart.main(Native Method)
10-23 19:08:41.178: E/AndroidRuntime(1514): Caused by: java.lang.NullPointerException
10-23 19:08:41.178: E/AndroidRuntime(1514):     at android.app.Activity.findViewById(Activity.java:1794)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at com.example.mysqlconnect.MainActivity.<init>(MainActivity.java:51)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at java.lang.Class.newInstanceImpl(Native Method)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at java.lang.Class.newInstance(Class.java:1319)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
10-23 19:08:41.178: E/AndroidRuntime(1514):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)

我在创建时删除了第二个,现在在logcat中收到此错误:

10-23 19:10:29.129: E/AndroidRuntime(1565): FATAL EXCEPTION: main
10-23 19:10:29.129: E/AndroidRuntime(1565): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.mysqlconnect/com.example.mysqlconnect.MainActivity}: java.lang.NullPointerException

问题答案:

您的错误是:TextView tv = (TextView)this.findViewById(R.id.textView1);因为它是在之外声明的onCreate

因此,这是您必须做的,TextView tv;在上面声明onCreate。然后在里面onCreate添加tv = (TextView) findViewById(R.id.textView1);

并删除以下项的重复项:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


 类似资料:
  • 主要内容:我是该用 MySQLi ,还是 PDO?,MySQLi 和 PDO 连接 MySQL 实例,MySQLi 安装,PDO 安装,连接 MySQL,实例 (MySQLi - 面向对象),实例 (MySQLi - 面向过程),实例 (PDO),关闭连接,实例 (MySQLi - 面向对象),实例 (MySQLi - 面向过程),实例 (PDO)PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP D

  • 主要内容:左连接,右连接在《 MySQL内连接》一节我们了解了 MySQL 的内连接。内连接的查询结果都是符合连接条件的记录,而外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录。 外连接可以分为左外连接和右外连接,下面根据实例分别介绍左外连接和右外连接。 左连接 左外连接又称为左连接,使用 LEFT OUTER JOIN 关键字连接两个表,并使用 ON 子句来设置连接条件。 左连接的语法格式

  • 在《 MySQL交叉连接》一节中我们了解了 MySQL 的交叉连接,本节主要介绍多表查询的另一种方式——内连接。 内连接(INNER JOIN)主要通过设置连接条件的方式,来移除查询结果中某些数据行的交叉连接。简单来说,就是利用条件表达式来消除交叉连接的某些数据行。 内连接使用 INNER JOIN 关键字连接两张表,并使用 ON 子句来设置连接条件。 如果没有连接条件,INNER JOIN 和

  • 本章节我们将为大家介绍如何使用 Node.js 来连接 MySQL,并对数据库进行操作。 如果你还没有 MySQL 的基本知识,可以参考我们的教程:MySQL 教程。 本教程使用到的 Websites 表 SQL 文件:websites.sql。 安装驱动 本教程使用了淘宝定制的 cnpm 命令进行安装: $ cnpm install mysql 连接数据库 在以下实例中根据你的实际配置修改数

  • 我使用了以下命令进行端口映射 其中3306端口属于本地主机MySQL,33060是进入docker容器的端口,因此docker中的3306:33060之间正在进行通信。我的问题如下: docker:守护进程的错误响应:驱动程序未能在endpointApp1上编程外部连接(30EC933973ACF63A48EF9A20B0027AF18BD23E1F36CF852E3758EAA1F843):启动

  • 问题内容: 我一直在localhost上建立一个网络,当我尝试在主机上移动它时,它显示了很多错误。似乎无法连接到我的本地数据库。这是代码: 这是输出: 感谢帮助 问题答案: 这是mysql用户权限问题。例如,使用phpmyadmin创建一个新用户,如果从localhost连接,则将其主机设置为localhost;如果从外部连接,则将其主机设置为%。

  • 问题内容: 我试图弄清楚如何构造我的应用程序以最有效地使用MySQL。我正在使用node- mysql模块。这里的其他线程建议使用连接池,因此我设置了一个小模块mysql.js 现在,每当我要查询mysql时,我都需要此模块,然后查询数据库 这是好方法吗?除了非常简单的示例(其中所有操作均在主app.js脚本中完成)之外,我真的找不到太多的使用mysql连接的示例,因此我真的不知道约定/最佳实践是

  • 主要内容:笛卡尔积前面所讲的查询语句都是针对一个表的,但是在关系型数据库中,表与表之间是有联系的,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。 在 MySQL 中,多表查询主要有交叉连接、内连接和外连接。由于篇幅有限,本节主要讲解交叉连接查询。内连接和外连接将在《 MySQL内连接》和《 MySQL外连接》中讲解。 交叉连接(CROSS JOIN)一般用来返回连接表的笛卡尔积。 本节