Android应用程序 | MySQL日志记录不起作用

3
我正在制作一个使用MySQL的Android登录应用程序。我创建了一个DatabaseHandler类,其中包含两个私有类,这些类扩展了AsyncTask。
代码:
package me.martinwiesner.cpad;

import android.os.AsyncTask;
import android.support.annotation.Nullable;
import android.util.Log;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;

public class UserDatabaseHandler {
    private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    private static final String DB_URL = "sql7.freemysqlhosting.net";

    private static final String USER = "**********";
    private static final String PASS = "**********";

    private static Get get;
    private static Set set;

    public static void onCreate() {
        get = new Get();
        set = new Set();
    }

    static List<User> getAllUsers() {
        return get.doInBackground(new String[]{""});
    }

    @Nullable
    static User getUser(String email) {
        for (User user : getAllUsers()) {
            if (user.getEmail().equals(email))
                return user;
        }
        return null;
    }

    @Nullable
    static User getUser(int id) {
        for (User user : getAllUsers()) {
            if (user.getId() == id)
                return user;
        }
        return null;
    }

    static void setAllUsers(List<User> users) {
        set.doInBackground(users);
    }

    static void addUser(User user) {
        List<User> users = getAllUsers();
        users.add(user);
        setAllUsers(users);
    }

    static User addUser(String name, String email, String password, boolean isAdmin) {
        Log.e("UDH", "Adding User");
        int id = 0;
        for (User user : getAllUsers()) {
            if (user.getId() != id) {
                break;
            } else {
                id++;
            }
        }
        User user = new User(id, name, email, password, isAdmin);
        addUser(user);
        return user;
    }

    private static class Get extends AsyncTask<String, Void, List<User>> {

        @Override
        protected List<User> doInBackground(String... strings) {
            Log.e("UDH", "Getting in Background");
            Connection connection = null;
            Statement statement = null;
            List<User> allUsers = new ArrayList<>();
            try {
                Log.e("UDH", "Getting in Background - Trying");
                Class.forName(JDBC_DRIVER);

                connection = DriverManager.getConnection(DB_URL, USER, PASS);

                statement = connection.createStatement();
                String sql = "SELECT * FROM users";
                ResultSet rs = statement.executeQuery(sql);

                while (rs.next()) {
                    int id = rs.getInt("ID");
                    String name = rs.getString("NAME");
                    String email = rs.getString("EMAIL");
                    String password = rs.getString("PASSWORD");
                    boolean isAdmin = rs.getBoolean("ISADMIN");

                    Log.e("Getting", id + "");
                    Log.e("Getting", name);
                    Log.e("Getting", email);
                    Log.e("Getting", password);
                    Log.e("Getting", isAdmin + "");

                    User user = new User(id, name, email, password, isAdmin);
                    allUsers.add(user);
                }
                rs.close();
                statement.close();
                connection.close();
            } catch (SQLException se) {
                se.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (statement != null)
                        statement.close();
                } catch (SQLException se2) {
                }
                try {
                    if (connection != null)
                        connection.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
            }
            return allUsers;
        }
    }

    private static class Set extends AsyncTask<List<User>, Void, String> {

        @Override
        protected String doInBackground(List<User>... users) {
            Log.e("UDH", "Setting in Background");
            Connection connection = null;
            Statement statement = null;

            for (User user : users[0]) {
                try {
                    connection = DriverManager.getConnection(DB_URL, USER, PASS);
                    statement = connection.createStatement();

                    String query = "INSERT INTO `users`(`ID`, `NAME`, `EMAIL`, `PASSWORD`, `ISADMIN`) VALUES ("
                            + user.getId() + "," + user.getName() + "," + user.getEmail() + "," + user.getPassword()
                            + "," + user.isAdmin() + ")";

                    ResultSet rs = statement.executeQuery(query);

                    rs.close();
                    connection.close();
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (statement != null)
                            statement.close();
                    } catch (SQLException se2) {
                    }
                    try {
                        if (connection != null)
                            connection.close();
                    } catch (SQLException se) {
                        se.printStackTrace();
                    }
                }
            }
            return "";
        }
    }
}

为了查明为什么它不起作用,我添加了以Log.e开头的代码行。每次我写Log.e时都会记录日志,但它不起作用。
问题:我该怎么修复这个问题?

1
请告诉我们哪里出了问题。您是否尝试使用调试器和断点逐步执行程序? - Joost Verbraeken
1
它无法读取/写入数据库。我还没有尝试过调试器,因为我不知道它的工作原理。 - Martin W
1
调试器对于调试应用程序非常非常有帮助。我建议您在互联网上搜索“<IDE>调试器”。如果您无法读/写数据库,您应该发布连接到数据库并从中读取/写入的代码片段。 - Joost Verbraeken
好的,我将尝试使用调试器,代码在pastebin链接中。谢谢! - Martin W
调试器工作到“connection = DriverManager.getConnection(DB_URL, USER, PASS);”这一步。它显示“正在收集数据”。难道登录应用程序没有其他保存信息在服务器上的方法吗? - Martin W
1个回答

1
URL错误,应该是:"jdbc:mysql://server:port/database"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接