Android MSSQL paraméterezett kapcsolat
2017-02-26T16:37:55+01:00
2017-03-05T20:03:47+01:00
2022-08-10T13:41:50+02:00
plokmi
Sziasztok!
Egy android app-ot készítek, ami egy MSSQl szerverhez kapcsolódik.
A kapcsolódáshoz ezen a linken találtam egy jól használható példát:

Connect Android to MS SQL Database.

ConnectionClass.java -ban viszont statikusan vannak tárolva szerver adatok.

public class ConnectionClass {
String ip = "192.168.0.100";
String classs = "net.sourceforge.jtds.jdbc.Driver";
String db = "Andro";
String un = "hitesh";
String password = "789";
}

Az én programomban ez így nem jó.
A saját, (egyedi) konfig adatok szerkesztése és tárolása már működik De azt nem tudom megvalósítani, hogy ConnectionClass.java-ban ezeket az adatokat használja.

A kérdésem tehát az lenne, hogyan tudnék egy másik Activity-n lévő TextView-kból ezeknek a változóknak (ip, db, un, password ) értéket adni.

Előre is köszi a segítséget.
Mutasd a teljes hozzászólást!
Ha okosan akarod csinalni ahogy a nagyok, akkor letrehozol egy INSTANCE class-t (kisegito osztaly), mondjuk egy enumot, amit barhonnan elersz...

public enum Preferences { INSTANCE; private static final String PREFS_NAME = "main-preferences"; private SharedPreferences mPrefs; private SharedPreferences.Editor mEditor; public void init(final Context context) { mPrefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); mEditor = mPrefs.edit(); } public String get(String sName, String def) { return mPrefs.getString(sName, def); } public void set(String sName, String def) { mEditor.putString(sName, def).apply(); }
}

aztan meg:

App onCreate-ben:

Preferences.INSTANCE.init(this);
Utana pedig barhonnan:

Preferences.INSTANCE.set("valami", "valami"); String valami = Preferences.INSTANCE.get("valami", "valami");
Ebbol csinalhatsz barmit, intet, booleant, akarmit. "valami" lesz a default ertek!

UPDATE: kicsit xar a kod editor, stackoverflowhoz kepest!:(
Mutasd a teljes hozzászólást!

  • Szia!
    Többféle megoldás lehet az egyik az ha eltárolod programon belül és azt eléred bárhol:

    SharedPreferences
    A másik ha Szerializálod az  osztályod és 
    getSerializableExtra
    segítségével "beszélgetsz" osztályok között.

    Az első megoldásnál ha kilépsz akkor is megmaradnak az adatok, de Te tudod mit szeretnél csinálni pontosan
    Mutasd a teljes hozzászólást!
  • Elindítod az adatbeíró activity-t, majd az visszatér a beírt paramétereiddel, erre alkalmas a How to manage `startActivityForResult` on Android?.
    Mutasd a teljes hozzászólást!
  • Biztos, hogy ezt akarod? Publikus hálózatra kirakni egy adatbáziskapcsolatot nem túl biztonságos, és az összes kapcsolódó logikát az alkalmazásodban kell implementálni. Ha bármi módisul, frissítheted az alkalmazásokat.Kellene valami REST/JSONRPC/stb service réteg eléje, ami megoldja ezeket.

    Persze ha házi feladat, vagy ujjgyakorlat, akkor OK. De éles alkalmazást ne így tervezz.
    Mutasd a teljes hozzászólást!
  • Belső hálózaton fog működni, dedikált táblagépen. A program nem nyilvános használatra készül.

    Igazából maga a program, az android programozási nyelvvel való megismerkedés miatt készül.
    3-4 hónapja kezdtem el vele foglalkozni, szabadidőmben. Szerencsére nagyon jó a támogatás hozzá a neten. Ahol most tartok azt android programozási elmélet leírásokból, példa programokból, videókból tanultam. De ennél a problémánál megakadtam.

    Az első két hozzászólásnak már utána olvastam, de megoldás még nem született.
    Mutasd a teljes hozzászólást!
  • Hol akadtál el, mi a probléma, mi a hibaüzenet?
    Mutasd a teljes hozzászólást!
  • Ha beálításokról beszélsz akkor én betenném a Settings -be
    Settings nagyjából mindenre találsz példát a létrehozástól a felhasználásig
    Mutasd a teljes hozzászólást!
  • Ezt így működik most.  A fő activityn lehet a kapcsolat adatok szerkeszteni. Stringként mentem le és abból töltöm vissza. Csak azért szeretném ezekből a TextView-kból kiolvasni, mert minden SQL műveletnél lefut a ConnectClass, és a minden alkalommal fájlól beolvasást feleslegesnek tartanám.
    Mutasd a teljes hozzászólást!
  • Ahogy már írtam, teljesen 0-ról kezdtem az android programozásával való ismerkedést.
    Delphiben kb. 15 éve, assemblyben 25-30 éve programozom. Eleinte hobbiból, most már a munkám része. Számomra nagyon különbözik az android nyelv ezektől, emiatt is nehezebb a működésének megértése.
    Bár sok példát megnéztem, de a hiányos ismereteim miatt nem tudom adaptálni, vagy nem jól értelmezem a forráskódot.

    meklod400válasza tűnik felhasználhatónak, de ezeket az módszereket még nem ismerem. Meg kell nézzek néhány példát, hogy megértsem a működését és be tudjam építeni a programomba.
    Mutasd a teljes hozzászólást!
  • Én is feleslegesnek tartanám, de hála istennek a googli csinál belőle static objectet amit bárhonnan meghívhatsz az alkalmazásodon belül. Ezen kívül nem kell a fájlműveletekkel bajlódnod, a kedves felhasználó is ott találja meg és olyan formában a dolgait ahol más alkalmazásoknál megszokta. 

    Tisztában vagyok azzal hogy a kérdésedre nem ez volt a pontos válasz, de az extra körök miatt (külön activity, form, form-események, hibakezelés, default value, fájlműveletek...) kidobnám azt az activity-t ami csak a beállításokkal foglalkozik.
    Mutasd a teljes hozzászólást!
  • Ha elmondod mire szeretnéd használni, akkor az optimális megoldásra mutatok egy példát! De ha rá guglizol a címszavakra amit írtam tömegével találsz működő mintát!
    Mutasd a teljes hozzászólást!
  • Ahogy már írtam egy olyan programot írok, ami MSSQl szerverhez kapcsolódik. A szerver elérés adatainak (IP cím, user name, password) szerkesztése már működik.
    Azt szeretném megvalósítani, hogy a kapcsolódáshoz használt  ConnectionClass elérje ezeket a paramétereket.
    Amit írtál, abból nekem a SharedPreferences tűnik használhatónak.
    Most azon dolgozom, hogy a paramétereket átadjam a SharderPreferences-en keresztül.
    Itt találtam néhány példát,

    Android Shared preferences example

    Ezen próbálok eligazodni.
    Mutasd a teljes hozzászólást!
  • Ez jó példa! Kicsit elmagyarázom, hogy könnyebben megértsd:

    Tehát így létrehozod a Sharedpref..:

    SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); Editor editor = pref.edit();
    így mented el az adott stingedet:

    editor.putString("key_name5", "string value"); // Saving string // Save the changes in SharedPreferences editor.commit(); // commit changes
    Ha visszaakarod olvasni akkor a key_name5 re hivatkozva éred el az elmentett változód így:
    String email=pref.getString("key_name5", null); // getting String

    email változó tartalmazza majd az értéket

    Minden osztályba létre kell hoznod az editort, ha elakarod érni az adatot!

    így érthetőbb vagy van ami még nem világos!?
    Mutasd a teljes hozzászólást!
  • Kipróbáltam több verziót is, a mentés az működik.
    Legalábbis nincs hibaüzenet, ha lut a program. A visszatöltés viszont nem.

    Ezt alkalmaztam:

    How to Use Android SharedPreferences

    Bármit írok a ConnectionClass.java class-ba, hibásnak jelöli.
    Szerintem ezzel lesz valami baj. Így néz ki az eleje:

    package com.example.user.munka; import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.os.StrictMode; import android.util.Log; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnectionClass {

    Mintha a ConnectioClass-ból nem érném el a MenuActivity.java-t.
    (Ebben van a konfig adatok mentése stb. )

    Mi lehet a baj.
    Mutasd a teljes hozzászólást!
  • Ha okosan akarod csinalni ahogy a nagyok, akkor letrehozol egy INSTANCE class-t (kisegito osztaly), mondjuk egy enumot, amit barhonnan elersz...

    public enum Preferences { INSTANCE; private static final String PREFS_NAME = "main-preferences"; private SharedPreferences mPrefs; private SharedPreferences.Editor mEditor; public void init(final Context context) { mPrefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); mEditor = mPrefs.edit(); } public String get(String sName, String def) { return mPrefs.getString(sName, def); } public void set(String sName, String def) { mEditor.putString(sName, def).apply(); }
    }

    aztan meg:

    App onCreate-ben:

    Preferences.INSTANCE.init(this);
    Utana pedig barhonnan:

    Preferences.INSTANCE.set("valami", "valami"); String valami = Preferences.INSTANCE.get("valami", "valami");
    Ebbol csinalhatsz barmit, intet, booleant, akarmit. "valami" lesz a default ertek!

    UPDATE: kicsit xar a kod editor, stackoverflowhoz kepest!:(
    Mutasd a teljes hozzászólást!
  • Azzal tobb baj is lehet. At kell adni parameterben az osztalynak a context jet hogy elerd onnan. Ez a szebb megoldas.

    A masik hogy public static be rakod a metodust es barhonnan elered. Ilyenkor persze az ottani valtozok is staticok lesznek. Ez nem szep, mivel public staticet altalaban activitybe nem rakunk csak Util classba. Es persze memory leakek is lehetnek.

    Ha context vagy activity valtozot adsz at parameterben, akkor nem kell static, siman meghivod a contexen levo publikus metodusokat.
    Mutasd a teljes hozzászólást!
  • Amugy ez tenyleg jo? Marmint ha vki megszerzi az apk t tudni fogja a jelszot is stb...
    Mutasd a teljes hozzászólást!
  • Köszi a segítséget, kipróbálom amit írtál.

    Nem lesz hozzáférhető csak azoknak, akinek én telepítem, egy dedikált táblagépre.
    A használata pedig nagyon szabályozott körülmények között fog történni.
    Mutasd a teljes hozzászólást!
  • Szóval a nagyok is ugyan azt használják, amit fent írtam csak egy kisegítő osztályba? :D Ergo a megoldásomat okosítjuk!



    De mindenképp szebb megoldás nem vitatom, de jelen helyzetben nem a szépségre törekedtem!

    Jó munkát!
    Mutasd a teljes hozzászólást!
  • Köszönöm a segítséget.
    Így hogy lényegében a kész megoldást írtad meg, sikerült megoldani a problémámat. Úgy működik, ahogy elképzeltem.
    Jobb örültem volna, ha egy kis saját hozzáadott értékkel jön össze a megoldás. De a terv az volt, hogy ezen a hétvégén jussak túl ezen a problémán.

     Adom a megérdemelt pontokat.
    Mutasd a teljes hozzászólást!
  • Köszönöm a segítségedet!
    Ahogy előzőleg írtam, jobb lett volna ha én hozom össze a végleges forráskódot. Pl. az általad megnevezett módszerek egyikével.
    Sajnos a pontokat nem lehet megosztani.
    A működő megoldást, amit végülis felhasználtam Lacasrac írta meg, ezért a pontot ő kapta.
    De a Te segítségedet is köszönöm.
    Mutasd a teljes hozzászólást!
  • Rendben! Legközelebb majd írd kérlek, hogy komplett megoldást adjunk... és ne rávezetni próbáljanak, csak úgy hittem tanulni szeretnél! De mind lényeg h lett megoldás! 
    Mutasd a teljes hozzászólást!
  • Sokat tanultam abból is amit Te írtál. Mindenképpen hasznos volt a hozzászólásod. De mivel Lacasrac tényleg egy teljesen működő megoldást adott, nem tehettem meg, hogy ne neki adjam a pontokat.
    Mert tényleg megérteni, megtanulni szeretném  az android programozást. És ahhoz a saját tapasztalás a legrövidebb út.
    Mutasd a teljes hozzászólást!
abcd