0

我的問題是,我想連接到Android的Postgresql數據庫,我看到我需要做一個線程,我使這個線程在主類下的私人類,但不工作,「吐司」總是顯示「Vacío」。我做得不好? :/線程連接Postgresql數據庫不工作

public class MainActivity extends AppCompatActivity { 
    Button btnEntrar; 
    EditText etUsuario; 
    EditText etPass; 

    public static String login = "Vacío"; 

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

     btnEntrar = (Button) findViewById(R.id.btnEntrar); 
     etUsuario = (EditText) findViewById(R.id.etUsuario); 
     etPass = (EditText) findViewById(R.id.etPass); 

     btnEntrar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String usuario = etUsuario.getText().toString(); 
       String pass = etPass.getText().toString(); 
       new ConnUsers(usuario, pass).execute(); 


       Toast.makeText(MainActivity.this, login, Toast.LENGTH_SHORT).show(); 

       /*if(login){ 
        Intent intent = new Intent(MainActivity.this, IncidenciasActivity.class); 
        startActivity(intent); 
        Toast.makeText(MainActivity.this, "Acceso es TRUE", Toast.LENGTH_SHORT).show(); 
       } 
       else{ 
        Toast.makeText(MainActivity.this, "Acceso es FALSE", Toast.LENGTH_SHORT).show(); 
       } */ 
      } 
     }); 
    } 

    private class ConnUsers extends AsyncTask <String, String, String>{ 

     private static final String DB_DRIVER = "org.postgresql.Driver"; 
     private static final String url = "jdbc:postgresql://xxx/xxx"; 
     private static final String user = "xxx"; 
     private static final String password = "xxx"; 

     private String usuario; 
     private String pass; 

     public ConnUsers(String usuario, String pass){ 
      this.usuario = usuario; 
      this.pass = pass; 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      String acceso = "doInBackground"; 

      try{ 
       Class.forName(DB_DRIVER); 

       Connection connection = DriverManager.getConnection(url, user, password); 
       Statement st = connection.createStatement(); 
       ResultSet rs = st.executeQuery("SELECT * FROM usuarios WHERE usuario = '" + usuario +"'"); 

       if(rs.next()!=false){ 
        if(Funciones.md5(pass).equalsIgnoreCase(rs.getString("password"))){ 

         int id = rs.getInt("id"); 

         acceso = "Todo correcto"; 
        } 
        else{ 
         //Toast.makeText(context, "Password incorrecto", Toast.LENGTH_LONG).show(); 
         acceso = "Falla la pass"; 
        } 
       } 
       else{ 
        //Toast.makeText(context, "Usuario incorrecto", Toast.LENGTH_LONG).show(); 
        acceso = "Falla el usuario"; 
       } 

       rs.close(); 
       st.close(); 
       connection.close(); 

      }catch(SQLException e){ 
       cancel(true); 
       e.printStackTrace(); 
      } catch (NoSuchAlgorithmException e) { 
       e.printStackTrace(); 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } 

      return acceso; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      MainActivity.login = s; 
     } 

     @Override 
     protected void onCancelled() { 

     } 
    } 


} 
+0

那是你真正的代碼或只是一個演示?我是說因爲你的數據庫連接用戶和密碼='xxx'和你的connectionString = jdbc:postgresql:// xxx/xxxx –

+0

我改變真正的ip,用戶和通過爲「xxx」,在真正的代碼是所有對吧 – Alqvi

+0

Okey!如果你在onPostExecute()中放置了Toast,會發生什麼?當doInBackground()完成時,當你想要操作用戶界面時,該方法很有用。也嘗試打印「acceso」,使變量變爲類變量。 –

回答

0

也許你無法連接訪問PostgreSQL服務器安全。 İt的意思是你的數據庫工作只是本地主機。因爲有些服務器一般會直接阻塞連接。你應該使用WebService。就像那個

enter image description here

+0

我想我已經連接了一段時間嘗試,但現在當我想發送「acceso」到主,不工作:/ – Alqvi