Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android异步任务+;mysql连接_Java_Android_Mysql_Android Asynctask - Fatal编程技术网

Java Android异步任务+;mysql连接

Java Android异步任务+;mysql连接,java,android,mysql,android-asynctask,Java,Android,Mysql,Android Asynctask,我有一个问题,我正在尝试使用AsyncTask连接到MySQL数据库。我在button事件中输入了连接代码,但它给了我错误 代码如下: package com.example.mysqlconnect; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.State

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

代码如下:

    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();

    }
} 

您的错误是:
TextView tv=(TextView)this.findviewbyd(R.id.textView1)onCreate
之外声明的

这就是你要做的,声明
TextView电视以上
onCreate
。然后在
onCreate
中添加
tv=(TextView)findViewById(R.id.TextView 1)

并删除以下内容的副本:

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

得到的错误是什么?完成后,我添加了logcat…为什么有两个super.onCreate(),删除第二个super。看我的答案,你的“电视”是空的。这是因为您在onCreate外部启动它。您只能在外部声明它,并在创建时在内部启动它。好的,现在它可以工作了。。。但是我还有一个问题,为什么当我点击按钮时,异步任务没有启动?你记录了吗?在方法“Connect()”、“doInBackground()”和“onPostExecute”中放一个日志,告诉我它记录了什么;然后在Logcat中查看您的特定标签。在它们中的每一个中都放上不同的文本,这样你就知道你在哪里了。日志告诉你这个按钮点击调用公共void Connect(){Connect task=new Connect();task.execute();log.d(“Connect”,“first”);}但是它会在这里阻塞,并且不会启动后台进程……我认为您也需要在异步任务中实现onPreExecute。
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
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);