【问题标题】:How to add a OnClicklistener to this kind of code [duplicate]如何在这种代码中添加 OnClicklistener [重复]
【发布时间】:2018-03-25 18:36:33
【问题描述】:

我们的应用应该连接到 SQL 数据库。它在我们的网络中。应用程序应编辑数据库中的数据。我们已经建立了连接,想为一个按钮设置一个 onclicklistener,女巫会导致连接代码连接。

这是我们得到的代码:

public class Werte_aendern extends AppCompatActivity {

TextView tvIP;

String Textauslesen = tvIP.getText().toString();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    tvIP = (TextView) findViewById(R.id.tvIP);
    setContentView(R.layout.activity_werte_aendern);
}




     Connection con = null;
    //private static String dbHost = "192.168.40.148"; // Hostname
     String dbPort = "3306";      // Port -- Standard: 3306
     String dbName = "wasserwerte";   // Datenbankname
     String dbUser = "App";     // Datenbankuser
     String dbPass = "fruitcake";      // Datenbankpasswort

    private Werte_aendern(){
        try {
            Class.forName("com.mysql.jdbc.Driver"); // Datenbanktreiber für JDBC Schnittstellen laden.

            // Verbindung zur JDBC-Datenbank herstellen.
            con = DriverManager.getConnection("jdbc:mysql://"+Textauslesen+":"+ dbPort+"/"+dbName+"?"+"user="+dbUser+"&"+"password="+dbPass);
          //  Statement createStatement();
          //  SQLiteDatabase wasserwerte =

        } catch (ClassNotFoundException e) {
            Toast.makeText(getApplicationContext(), "Treiber nicht gefunden", Toast.LENGTH_SHORT).show();
        } catch (SQLException e) {
            Toast.makeText(getApplicationContext(), "Verbindung nicht möglich", Toast.LENGTH_SHORT).show();
            Toast.makeText(getApplicationContext(), "SQLException: " + e.getMessage(), Toast.LENGTH_SHORT).show();
            Toast.makeText(getApplicationContext(), "SQLState: " + e.getSQLState(), Toast.LENGTH_SHORT).show();
            Toast.makeText(getApplicationContext(), "VendorError: " + e.getErrorCode(), Toast.LENGTH_SHORT).show();
        }
    }

}

我们是菜鸟,但我们必须为学校项目这样做。
你能帮帮我们吗?

【问题讨论】:

  • 您的代码中没有按钮,因此您将无法在其中添加侦听器...您知道如何创建吗?请告诉我们您声明按钮的位置(java 代码或 xml)
  • @deHaar 没必要。在布局中,您可以引用单击事件处理程序。但这也不存在于显示的代码中。
  • 好吧,你说得对,但问题是明确关于 OnClickListener,所以我认为代码中应该有一个 ;-) 我知道你可以只编写一个方法并将其放在 xml onClick 中。
  • @deHaar 我们不知道 Button 和 Onclicklistener 应该放在哪里,抱歉,你能把它放到代码的正确位置吗?

标签: java android mysql onclicklistener


【解决方案1】:

我已更新您的代码。 Activity 应始终命名为 [Whatever]Activity。如果“WerteAendern”是一个正确的名称,请不要这样做,因为我不会说德语(我假设它是德语)。

  public class WerteAendernActivity extends AppCompatActivity {

    TextView tvIP;

    // You should get the text from the View AFTER inflating the layout and find it with
    // findViewById. Otherwise it's gonna crash.
    String textauslesen;
    private Button connectBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // First you inflate the layout
        setContentView(R.layout.activity_werte_aendern);
        // Then you get the views
        tvIP = (TextView) findViewById(R.id.tvIP);
        // Probably should be somewhere else as there is no interesting text to retrieve from the 
        // view at the moment
        textauslesen = tvIP.getText().toString();  

        connectBtn = (Button) findViewById(R.id.connection_button); // ! You need to add a Button in your layout
        connectBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Add some test, ... if you're already connected
                connectToDataBase();
            }
        });
    }

    Connection con = null;
    //private static String dbHost = "192.168.40.148"; // Hostname
    String dbPort = "3306";      // Port -- Standard: 3306
    String dbName = "wasserwerte";   // Datenbankname
    String dbUser = "App";     // Datenbankuser
    String dbPass = "fruitcake";      // Datenbankpasswort


    // Method to connect to the database.
    // !!! You're not supposed to override the constructor of an Activity!
    private void connectToDataBase() {
        try {
            Class.forName("com.mysql.jdbc.Driver"); // Datenbanktreiber für JDBC Schnittstellen laden.

            // Verbindung zur JDBC-Datenbank herstellen.
            con = DriverManager.getConnection("jdbc:mysql://" + textauslesen + ":" + dbPort + "/" + dbName + "?" + "user=" + dbUser + "&" + "password=" + dbPass);
            //  Statement createStatement();
            //  SQLiteDatabase wasserwerte =

        } catch (ClassNotFoundException e) {
            Toast.makeText(getApplicationContext(), "Treiber nicht gefunden", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        } catch (SQLException e) {
            Toast.makeText(getApplicationContext(), "Error! See Exception logs", Toast.LENGTH_SHORT).show();
            // The logs will be displayed in the Logcat window in Android Studio 
            e.printStackTrace();
        }
    }
}

【讨论】:

  • 您似乎确实是 Android 的初学者。我建议在开始使用数据库之前先按照一些教程来做非常基本的应用程序。第一步应该是启动一个 Activity、扩展一个布局、获取视图并与它们交互。在学会走路之前你不能跑步!
  • 非常感谢。你帮了我们很多。但是,当我们单击主活动中的按钮时,我们的应用程序会不断崩溃,该按钮会降级为您看到的 (WerteAendernActivity) 代码的活动。这个问题可能是什么问题?
  • 你是什么意思“降级到上面的活动的主要活动”?如果您的按钮位于上述活动的布局中,并且您尝试从具有不同布局的另一个按钮访问它,是的,它会崩溃。但至少把错误日志放上来让我们知道问题是什么。
猜你喜欢
  • 2020-11-23
  • 1970-01-01
  • 2020-01-09
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 2019-04-01
  • 2016-06-19
相关资源
最近更新 更多