folder Tahribat.com Forumları
linefolder Android - IOS Programlama
linefolder Android Studio Database Bağlantı Sorunu



Android Studio Database Bağlantı Sorunu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    WindayS
    WindayS's avatar
    Kayıt Tarihi: 26/Temmuz/2016
    Erkek

    Pgadmin ile oluşturduğum bir veritabanı var ve ben bu veri tabanını android studioya bağlamak istiyorum. Fakat ne denersem deneyeyim hep bir bağlantı sorunu çıkıyor. Bu sorun yazdığım kodlarla mı ilgili, postgresql ile mi?


    DatabaseHelper sınıfı:

    package com.murat.servis;
    
    import android.os.StrictMode;
    import android.util.Log;
    import android.widget.Toast;
    import java.sql.Connection;
    import java.sql.DriverManager;
    
    public class DatabaseHelper {
        Connection conn;
        String host;
        String user;
        String password;
        String port;
        String name;
    
        public Connection connection() {
            host = "127.0.0.1";
            user = "postgres";
            password = "123456";
            name = "Servis";
            port = "5432";
    
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
    
            try {
                Class.forName("org.postgresql.Driver");
                String connectionURL = "jdbc:postgresql://" + host + ":" + port + "/" + name;
                conn = DriverManager.getConnection(connectionURL, user, password);
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
            }
            return conn;
        }
    }
    

    Acticity:

    package com.murat.servis;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import java.sql.Connection;
    
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class DriverRegister extends AppCompatActivity {
        Connection connect;
        EditText driver_name;
        EditText driver_surname;
        EditText driver_mail;
        EditText driver_password;
        EditText driver_phone;
        EditText birthday;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.driver_register);
            driver_name = findViewById(R.id.driver_name);
            driver_surname = findViewById(R.id.driver_surname);
            driver_mail = findViewById(R.id.register_email2);
            driver_phone = findViewById(R.id.driver_number);
            birthday = findViewById(R.id.driver_birthday);
            driver_password = findViewById(R.id.register_password2);
    
        }
        public void registered2(View view)  {
            String d_name = driver_name.getText().toString().trim();
            String d_surname = driver_surname.getText().toString().trim();
            String d_mail = driver_mail.getText().toString().trim();
            String d_phone = driver_phone.getText().toString().trim();
            String d_birthday = birthday.getText().toString().trim();
            String d_password = driver_password.getText().toString().trim();
            try {
                DatabaseHelper connectionHelper = new DatabaseHelper();
                connect = connectionHelper.connection();
                String query = "INSERT INTO driver(driver_name,driver_surname,driver_mail,driver_phone,driver_birthday,driver_password) " +
                        "VALUES('" + d_name + "','" + d_surname + "','" + d_mail + "','" + d_phone + "','" + d_birthday + "','" + d_password + "')";
                Statement st = connect.createStatement();
                st.executeUpdate(query);
                connect.close(); 
            } catch(Exception e) {
                Log.e("Error", e.getMessage());
    
            }
            Intent intent = new Intent(DriverRegister.this, DriverLogin.class);
            startActivity(intent);
        }
    }


    build.gradle:

    plugins {
    id("com.android.application")

    }


    android {
    namespace = "com.murat.servis"
    compileSdk = 34

    defaultConfig {
    applicationId = "com.murat.servis"
    minSdk = 26
    targetSdk = 34
    versionCode = 1
    versionName = "1.0"

    testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
    release {
    isMinifyEnabled = false
    proguardFiles(
    getDefaultProguardFile("proguard-android-optimize.txt"),
    "proguard-rules.pro"
    )
    }
    }
    compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    }
    }


    dependencies {

    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.11.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")
    implementation(files("C:\\Users\\Administrator\\AndroidStudioProjects\\Servis2\\app\\libs\\postgresql-42.7.2.jar"))

    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")


    }

     

    WindayS tarafından 27/Şub/24 00:15 tarihinde düzenlenmiştir

    Yoğ yaw
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    cok fazla detay vermissin nasil bir hata mesela?

    StrictMode neden kullanmissin hocam? Bunun yerine sinifini AsyncTask'tan türettirip background'da bu db connection islemi yaptirabilirsin. 

     

    Hatayi söylemedigin icin; veritabani baglantinin dogrulugunu kontrol etmen lazim. Dbeaver programini kurup, db'ne baglanmaya calis, sorunsuz baglanti kurabiliyor musun? Bu kisim önemli, cünkü herhangi bir client'dan kodda verdigin bu bilgilerle baglanamiyorsan, orada bir sorun var demektir.

    Ip yerine localhost yazmayi deneyebilirsin, bazen bunla ilgili sorunlar da olabiliyor. Tamamen local'da oldugun icin gerek yok ama yine de androidmanifest'e internet izinini ekle

    <uses-permission android:name="android.permission.INTERNET" />

     

     

     

     

     

     

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    Şöyle anladım, doğru mu?

    PostgreSQL veritabanın var. Bir de Android Studio ile bir uygulama yazdın PostgreSQL veritabanına bağlanmak için. Db'ye dışarıdan erişim var mı? Ayrıca Android kısmında host olarak 127.0.0.1 olarak hedef belirtmişsin, bu ip erişimi networkde geçersiz olur. Lokal bir ip. Yani Android cihazın içindeki bir ip adresi gibi düşünebilirsin. Oysa db Android cihazın dışında bir yerde.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    ontedi bunu yazdı

    Şöyle anladım, doğru mu?

    PostgreSQL veritabanın var. Bir de Android Studio ile bir uygulama yazdın PostgreSQL veritabanına bağlanmak için. Db'ye dışarıdan erişim var mı? Ayrıca Android kısmında host olarak 127.0.0.1 olarak hedef belirtmişsin, bu ip erişimi networkde geçersiz olur. Lokal bir ip. Yani Android cihazın içindeki bir ip adresi gibi düşünebilirsin. Oysa db Android cihazın dışında bir yerde.

    disardan erisim mümkün olabiliyor hocam dogru ayarlamissan. önemli olan ayni agda olman.

    Aslinda söyle düzelteyim, bu sekilde direk denemedim ama local bir API ile mobile app baglanti kurabiliyor. Teorik olarak DB'nin de baglanti kurmasi problem olmaz

     

    unbalanced tarafından 27/Şub/24 11:35 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Biraz daha baktim da postgresql.conf dosyasinda cesitli ayarlamalar yapmak gerekiyormus.

    ordaki 

    - localhost ya da 127.0.0.1 gibi ip adresini 0.0.0.0 'a cekmek lazim

    - firewall'da 5432 portuna izin ver (local'de oldugu icin sorun olmamasi lazim aslinda ama yine de denemek lazim)

    - connection string'ini bilgisayarin local IP'sine göre düzenle: mesela local ip 192.168.1.15 olsun

    jdbc:postgresql://192.168.1.15:5432/Servis

    seklinde yap

     

    suraya da bak https://stackoverflow.com/questions/3278379/how-to-configure-postgresql-to-accept-all-incoming-connections 

    bir de pgadmin'in bir client degil webserver olmasi gerek.

    Bana kalirsa bu sekilde DB'ye erismek mantiksiz ve cok fazla sorun cikarma ihtimali olan bir yol. JS biliyorsan, basitce nodejs ile bir tane api yazip, db'ye onla erisim sagla. android uygulaman da bu api'ye erisim saglasin. En basit ve temiz cözümü bu olur


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    WindayS
    WindayS's avatar
    Kayıt Tarihi: 26/Temmuz/2016
    Erkek
    unbalanced bunu yazdı

    cok fazla detay vermissin nasil bir hata mesela?

    StrictMode neden kullanmissin hocam? Bunun yerine sinifini AsyncTask'tan türettirip background'da bu db connection islemi yaptirabilirsin. 

     

    Hatayi söylemedigin icin; veritabani baglantinin dogrulugunu kontrol etmen lazim. Dbeaver programini kurup, db'ne baglanmaya calis, sorunsuz baglanti kurabiliyor musun? Bu kisim önemli, cünkü herhangi bir client'dan kodda verdigin bu bilgilerle baglanamiyorsan, orada bir sorun var demektir.

    Ip yerine localhost yazmayi deneyebilirsin, bazen bunla ilgili sorunlar da olabiliyor. Tamamen local'da oldugun icin gerek yok ama yine de androidmanifest'e internet izinini ekle

     

     

     

     

     

     

     

     

    hocam şu hataları alıyorum:
    Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
    Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference

    Internet iznini de ekledim
    Siz yazdıkdatan sonra dbeaver de bağlanmayı denedim, bağlandı bir sorun çıkmadı. 




    Yoğ yaw
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    WindayS
    WindayS's avatar
    Kayıt Tarihi: 26/Temmuz/2016
    Erkek
    unbalanced bunu yazdı

    Biraz daha baktim da postgresql.conf dosyasinda cesitli ayarlamalar yapmak gerekiyormus.

    ordaki 

    - localhost ya da 127.0.0.1 gibi ip adresini 0.0.0.0 'a cekmek lazim

    - firewall'da 5432 portuna izin ver (local'de oldugu icin sorun olmamasi lazim aslinda ama yine de denemek lazim)

    - connection string'ini bilgisayarin local IP'sine göre düzenle: mesela local ip 192.168.1.15 olsun

    jdbc:postgresql://192.168.1.15:5432/Servis

    seklinde yap

     

    suraya da bak https://stackoverflow.com/questions/3278379/how-to-configure-postgresql-to-accept-all-incoming-connections 

    bir de pgadmin'in bir client degil webserver olmasi gerek.

    Bana kalirsa bu sekilde DB'ye erismek mantiksiz ve cok fazla sorun cikarma ihtimali olan bir yol. JS biliyorsan, basitce nodejs ile bir tane api yazip, db'ye onla erisim sagla. android uygulaman da bu api'ye erisim saglasin. En basit ve temiz cözümü bu olur

    Hocam önerdiklerinizi denedim ama sanırsam farklı bir sıkıntı var. 


    Yoğ yaw
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    WindayS
    WindayS's avatar
    Kayıt Tarihi: 26/Temmuz/2016
    Erkek
    ontedi bunu yazdı

    Şöyle anladım, doğru mu?

    PostgreSQL veritabanın var. Bir de Android Studio ile bir uygulama yazdın PostgreSQL veritabanına bağlanmak için. Db'ye dışarıdan erişim var mı? Ayrıca Android kısmında host olarak 127.0.0.1 olarak hedef belirtmişsin, bu ip erişimi networkde geçersiz olur. Lokal bir ip. Yani Android cihazın içindeki bir ip adresi gibi düşünebilirsin. Oysa db Android cihazın dışında bir yerde.

    localhost'uda denedim, sorunun host isminden kaynaklandığını düşünmüyorum


    Yoğ yaw
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    Android tarafında ip adresini şu şekilde yap http://10.0.2.2:5058/  bold yaptığım yeri postgrenin portunu yaz. Aynı makinede (pcde) hem postgre hem de android çalıştırdığını varsayıyorum.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    emulator üzerinden kullaniyorsan 10.0.2.2 ipsini deneyebilirsin.

    Bir de direk telefon yerine, ayni agda bagli olan bir makineden bu veritabanina erismeyi dener misin? Orada erisebilirsen, diger yerlerden de erisebilirsin.

    ikinci hatan (konuyla cok alakali degil)

    burdaki connect nesnesi null ise (connection metod null gönderiyor baglanti yapamadigi icin)

      Statement st = connect.createStatement();
     
    o yüzden söyle bir sey yap
    if(connect != null
    {
    
      Statement st = connect.createStatement();
      st.executeUpdate(query);
      connect.close();
    }
     
    senin sikintin, bir sekilde host'u bulamamasi ya da baglantiya izin verilmemesi. Bunu da cözmek icin ayarlarini dogru yapman gerek. Dedigim gibi ayni agda farkli bir yerden bu veritabanina ulasabilirsen, sorunun cözülecektir. 
     
    Yine dedigim gibi, bu yol güzel bir yol degildir 
     

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    WindayS
    WindayS's avatar
    Kayıt Tarihi: 26/Temmuz/2016
    Erkek
    unbalanced bunu yazdı

    emulator üzerinden kullaniyorsan 10.0.2.2 ipsini deneyebilirsin.

    Bir de direk telefon yerine, ayni agda bagli olan bir makineden bu veritabanina erismeyi dener misin? Orada erisebilirsen, diger yerlerden de erisebilirsin.

    ikinci hatan (konuyla cok alakali degil)

    burdaki connect nesnesi null ise (connection metod null gönderiyor baglanti yapamadigi icin)

      Statement st = connect.createStatement();
     
    o yüzden söyle bir sey yap
    if(connect != null
    {
    
      Statement st = connect.createStatement();
      st.executeUpdate(query);
      connect.close();
    }
     
    senin sikintin, bir sekilde host'u bulamamasi ya da baglantiya izin verilmemesi. Bunu da cözmek icin ayarlarini dogru yapman gerek. Dedigim gibi ayni agda farkli bir yerden bu veritabanina ulasabilirsen, sorunun cözülecektir. 
     
    Yine dedigim gibi, bu yol güzel bir yol degildir 
     

    Hocam doğru söylüyorsunuz. Sizin dediğiniz gibi node.js'te bir apı oluşturdum bu şekilde devam edeceğim. Her şey için çok teşekkür ederim.


    Yoğ yaw
Toplam Hit: 353 Toplam Mesaj: 11
android