Spinner aus einer PostgreSQL-Datenbank füllen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Spinner aus einer PostgreSQL-Datenbank füllen

    Hallo zusammen,

    und zwar ich hab ein Problem. Ich mach eine App bei der man sich einloggen muss, für den Benutzernamen will ich ein Spinner verwenden der sich die Benutzernamen aus der PostgreSQL-Datenbank holt. Hier liegt mein Problem ich weiß nicht wie es umsetzen soll, da die meisten Tutorials für SQLite sind oder mit PHP zusätzlich gearbeitet wird.

    Kann mir da wer Tipps geben? Ich komm hier nicht mehr weiter :(

    Oder gibts noch andere Varianten wie ich den Spinner mit den Benutzernamen füllen kann?

    vielen Dank schonmal :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von rush2rio ()

  • Du wirst um einen entsprechenden Cursor Adapter nicht umhin kommen.
    Allerdings sollte Deine Lösung auf jeden Fall einen Zwischenschritt über ein PHP Formular beinhalten.
    Ansonsten lassen sich ruckzuck die Zugangsdaten zur PostgreSQL Datenbank holen und dann Gute Nacht Marie.
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.

    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«
  • so hab mich mal dran gesetzt und rumprobiert.

    ich bekomm aber dauernd einen nullpointer, kann den fehler aber nicht finden.

    könntest du dir den code mal anschaun?
    meine Main:

    Java-Quellcode

    1. public class MainActivity extends Activity {
    2. public static final String KEY_VNAME = "vorname";
    3. public static final String KEY_NNAME = "nachname";
    4. public static final String KEY_USER = "user";
    5. ArrayList<HashMap<String, String>> user;
    6. UserAdapter uAdapter;
    7. Spinner spinner_user;
    8. String vorname;
    9. String nachname;
    10. // SQL-Verbindung //
    11. private String pg_host;
    12. private String pg_user;
    13. private String pg_port;
    14. private String pg_pw;
    15. private String pg_database;
    16. Connection conn;
    17. ArrayList<String> MitarbeiterList = new ArrayList<String>();
    18. @Override
    19. protected void onCreate(Bundle savedInstanceState)
    20. {
    21. super.onCreate(savedInstanceState);
    22. setContentView(R.layout.activity_main);
    23. lv_azeit = (ListView) findViewById(R.id.lv_azeit);
    24. spinner_user = (Spinner) findViewById(R.id.spinner1);
    25. getPrefs();
    26. new FetchSQL().execute();
    27. }
    28. // Datenbankeinstellungen holen //
    29. public void getPrefs()
    30. {
    31. SharedPreferences prefs = PreferenceManager
    32. .getDefaultSharedPreferences(this);
    33. pg_host = prefs.getString("host", "10.0.2.2");
    34. pg_user = prefs.getString("user", "standard");
    35. pg_port = prefs.getString("port", "5454");
    36. pg_database = prefs.getString("database", "test");
    37. pg_pw = prefs.getString("password", "test123");
    38. }
    39. private class FetchSQL extends AsyncTask<Void, Void, String>
    40. {
    41. String retval = "";
    42. @Override
    43. protected String doInBackground(Void... String)
    44. {
    45. try {
    46. Class.forName("org.postgresql.Driver");
    47. } catch (ClassNotFoundException e)
    48. {
    49. e.printStackTrace();
    50. retval = e.toString();
    51. }
    52. String url = "jdbc:postgresql://" + pg_host + ":" + pg_port + "/"
    53. + pg_database + "";
    54. Connection conn;
    55. try {
    56. DriverManager.setLoginTimeout(5);
    57. conn = DriverManager.getConnection(url, pg_user, pg_pw);
    58. ////////// MITARBEITER \\\\\\\\\\
    59. Statement stmMitarbeiter = conn.createStatement();
    60. String sqlMitarbeiter;
    61. sqlMitarbeiter = "SELECT "
    62. + "nachname, vorname "
    63. + "FROM user "
    64. + "ORDER BY user_id";
    65. ResultSet rsMitarbeiter = stmMitarbeiter
    66. .executeQuery(sqlMitarbeiter);
    67. while (rsMitarbeiter.next())
    68. {
    69. for (int i = 1; i <= rsMitarbeiter.getRow(); i++)
    70. {
    71. HashMap<String, String> mapUser = new HashMap<String, String>();
    72. mapUser.put(KEY_USER, rsMitarbeiter.getString("nachname") + "," + rsMitarbeiter.getString("vorname"));
    73. System.out.println(rsMitarbeiter.getString("nachname") +""+ rsMitarbeiter.getString("vorname"));
    74. user.add(mapUser);
    75. }
    76. }
    77. rsMitarbeiter.close();
    78. stmMitarbeiter.close();
    79. conn.close();
    80. } catch (SQLException esql) {
    81. e.printStackTrace();
    82. retval = e.toString();
    83. }
    84. return retval;
    85. }
    86. @Override
    87. protected void onPostExecute(String value)
    88. {
    89. if (value.equals(""))
    90. {
    91. uAdapter = new UserAdapter(MainActivity.this, user);
    92. spinner_user.setAdapter(uAdapter);
    93. Toast.makeText(MainActivity.this,
    94. value + "\nVerbindung erfolgreich", Toast.LENGTH_SHORT)
    95. .show();
    96. } else {
    97. Toast.makeText(MainActivity.this,
    98. value + "\nBitte Datenbankverbindung überprüfen",
    99. Toast.LENGTH_LONG).show();
    100. }
    101. }
    102. }
    103. }
    Alles anzeigen


    mein Adapter:

    Java-Quellcode

    1. public class UserAdapter extends BaseAdapter{
    2. private Activity activity;
    3. private ArrayList<HashMap<String, String>> user;
    4. private static LayoutInflater inflater = null;
    5. public UserAdapter(Activity a, ArrayList<HashMap<String, String>> u)
    6. {
    7. activity = a;
    8. user = u;
    9. inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    10. }
    11. @Override
    12. public int getCount()
    13. {
    14. return user.size();
    15. }
    16. @Override
    17. public Object getItem(int position)
    18. {
    19. return position;
    20. }
    21. @Override
    22. public long getItemId(int position)
    23. {
    24. return position;
    25. }
    26. @Override
    27. public View getView(int position, View convertView, ViewGroup parent)
    28. {
    29. View view = convertView;
    30. if(convertView==null)
    31. view = inflater.inflate(R.layout.user_list_row, null);
    32. TextView tv_user = (TextView)view.findViewById(R.id.tv_user);
    33. HashMap<String, String> aUser = new HashMap<String, String>();
    34. aUser = user.get(position);
    35. tv_user.setText(aUser.get(MainActivity.KEY_USER));
    36. return view;
    37. }
    38. }
    Alles anzeigen


    und der Auszug aus dem Logcat

    Quellcode

    1. 03-26 13:18:11.967: E/AndroidRuntime(7275): FATAL EXCEPTION: AsyncTask #1
    2. 03-26 13:18:11.967: E/AndroidRuntime(7275): java.lang.RuntimeException: An error occured while executing doInBackground()
    3. 03-26 13:18:11.967: E/AndroidRuntime(7275): at android.os.AsyncTask$3.done(AsyncTask.java:299)
    4. 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
    5. 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
    6. 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
    7. 03-26 13:18:11.967: E/AndroidRuntime(7275): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    8. 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    9. 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    10. 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.lang.Thread.run(Thread.java:841)
    11. 03-26 13:18:11.967: E/AndroidRuntime(7275): Caused by: java.lang.NullPointerException
    12. 03-26 13:18:11.967: E/AndroidRuntime(7275): at de.rush2rio.zeiterfassung.MainActivity$FetchSQL.doInBackground(MainActivity.java:229)
    13. 03-26 13:18:11.967: E/AndroidRuntime(7275): at de.rush2rio.zeiterfassung.MainActivity$FetchSQL.doInBackground(MainActivity.java:1)
    14. 03-26 13:18:11.967: E/AndroidRuntime(7275): at android.os.AsyncTask$2.call(AsyncTask.java:287)
    15. 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
    16. 03-26 13:18:11.967: E/AndroidRuntime(7275): ... 4 more
    Alles anzeigen
  • Du hast user nirgends instanziert.
    Nur einmal oben deklariert aber nie einem Wert zugewiesen. Also ist user == NULL und NULL.add(mapUser); stürzt ab.
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.

    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«
  • danke dir!
    voll der blöde Fehler ...sry

    jetzt hab ich aber ein weiteres problem
    er meldet mir bei Zeile 9

    Java-Quellcode

    1. spinner_user.setAdapter(uAdapter);


    einen nullpointer, mach ich da irgendwas falsch oder hab ich wieder nur was übersehen? :-/
    hab nebenbei noch eine listview gefüllt die funktioniert ohne probleme.
    des mit dem spinner sollte doch gleich wie bei der listview dann funktionieren oder irr ich mich da?

    falls du noch den logcat brauchst

    Quellcode

    1. 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.os.AsyncTask.finish(AsyncTask.java:631)
    2. 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.os.AsyncTask.access$600(AsyncTask.java:177)
    3. 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
    4. 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.os.Handler.dispatchMessage(Handler.java:99)
    5. 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.os.Looper.loop(Looper.java:137)
    6. 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.app.ActivityThread.main(ActivityThread.java:5103)
    7. 03-28 08:35:22.146: E/AndroidRuntime(1320): at java.lang.reflect.Method.invokeNative(Native Method)
    8. 03-28 08:35:22.146: E/AndroidRuntime(1320): at java.lang.reflect.Method.invoke(Method.java:525)
    9. 03-28 08:35:22.146: E/AndroidRuntime(1320): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    10. 03-28 08:35:22.146: E/AndroidRuntime(1320): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    11. 03-28 08:35:22.146: E/AndroidRuntime(1320): at dalvik.system.NativeStart.main(Native Method)
    Alles anzeigen
  • Es wird Zeit, dass Du Dich mit dem Debugger beschäftigst. ;)

    NULL Pointer Exception heißt, dass irgendwas NULL ist.
    Entweder spinner_user oder uAdapter.
    Da das LogCat auf irgendwas Androidinternes verweist würde ich auf uAdapter tippen.
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.

    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«