2016-09-04 11 views
2

私はMySQLでアンドロイドログインアプリを作っています。 AsyncTascを拡張する2つのプライベートクラスを持つDatabaseHandlerクラスを作成しました。Android App | MySQLロギングが動作しない

コード:

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

動作しません何を教えてください。あなたはデバッガといくつかのブレークポイントでプログラムをステップ実行しようとしましたか? –

+1

データベースを読み書きすることはできません。私はデバッガを試していない、私はそれがどのように動作するのかわからないので。 –

+1

デバッガは非常に有用です。インターネットで "デバッガ"を検索することをお勧めします。データベースを読み書きすることができない場合は、データベースに接続してそこから読み書きするために使用しているコードフラグメントを投稿する必要があります。 –

答えて

1

URLが間違っている、それは次のようになります。 "JDBCます。mysql://サーバー:ポート/データベース"

関連する問題