sry das ich mich jetzt erst melde
hab es hinbekommen vielen dank !
Beiträge von rush2rio
-
-
danke dir!
voll der blöde Fehler ...sryjetzt hab ich aber ein weiteres problem
er meldet mir bei Zeile 9einen 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
Code
Alles anzeigen03-28 08:35:22.146: E/AndroidRuntime(1320): at android.os.AsyncTask.finish(AsyncTask.java:631) 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.os.AsyncTask.access$600(AsyncTask.java:177) 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.os.Handler.dispatchMessage(Handler.java:99) 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.os.Looper.loop(Looper.java:137) 03-28 08:35:22.146: E/AndroidRuntime(1320): at android.app.ActivityThread.main(ActivityThread.java:5103) 03-28 08:35:22.146: E/AndroidRuntime(1320): at java.lang.reflect.Method.invokeNative(Native Method) 03-28 08:35:22.146: E/AndroidRuntime(1320): at java.lang.reflect.Method.invoke(Method.java:525) 03-28 08:35:22.146: E/AndroidRuntime(1320): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 03-28 08:35:22.146: E/AndroidRuntime(1320): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 03-28 08:35:22.146: E/AndroidRuntime(1320): at dalvik.system.NativeStart.main(Native Method)
-
-
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
Alles anzeigenpublic class MainActivity extends Activity { public static final String KEY_VNAME = "vorname"; public static final String KEY_NNAME = "nachname"; public static final String KEY_USER = "user"; ArrayList<HashMap<String, String>> user; UserAdapter uAdapter; Spinner spinner_user; String vorname; String nachname; // SQL-Verbindung // private String pg_host; private String pg_user; private String pg_port; private String pg_pw; private String pg_database; Connection conn; ArrayList<String> MitarbeiterList = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_azeit = (ListView) findViewById(R.id.lv_azeit); spinner_user = (Spinner) findViewById(R.id.spinner1); getPrefs(); new FetchSQL().execute(); } // Datenbankeinstellungen holen // public void getPrefs() { SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(this); pg_host = prefs.getString("host", "10.0.2.2"); pg_user = prefs.getString("user", "standard"); pg_port = prefs.getString("port", "5454"); pg_database = prefs.getString("database", "test"); pg_pw = prefs.getString("password", "test123"); } private class FetchSQL extends AsyncTask<Void, Void, String> { String retval = ""; @Override protected String doInBackground(Void... String) { try { Class.forName("org.postgresql.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); retval = e.toString(); } String url = "jdbc:postgresql://" + pg_host + ":" + pg_port + "/" + pg_database + ""; Connection conn; try { DriverManager.setLoginTimeout(5); conn = DriverManager.getConnection(url, pg_user, pg_pw); ////////// MITARBEITER \\\\\\\\\\ Statement stmMitarbeiter = conn.createStatement(); String sqlMitarbeiter; sqlMitarbeiter = "SELECT " + "nachname, vorname " + "FROM user " + "ORDER BY user_id"; ResultSet rsMitarbeiter = stmMitarbeiter .executeQuery(sqlMitarbeiter); while (rsMitarbeiter.next()) { for (int i = 1; i <= rsMitarbeiter.getRow(); i++) { HashMap<String, String> mapUser = new HashMap<String, String>(); mapUser.put(KEY_USER, rsMitarbeiter.getString("nachname") + "," + rsMitarbeiter.getString("vorname")); System.out.println(rsMitarbeiter.getString("nachname") +""+ rsMitarbeiter.getString("vorname")); user.add(mapUser); } } rsMitarbeiter.close(); stmMitarbeiter.close(); conn.close(); } catch (SQLException esql) { e.printStackTrace(); retval = e.toString(); } return retval; } @Override protected void onPostExecute(String value) { if (value.equals("")) { uAdapter = new UserAdapter(MainActivity.this, user); spinner_user.setAdapter(uAdapter); Toast.makeText(MainActivity.this, value + "\nVerbindung erfolgreich", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText(MainActivity.this, value + "\nBitte Datenbankverbindung überprüfen", Toast.LENGTH_LONG).show(); } } } }
mein Adapter:
Java
Alles anzeigenpublic class UserAdapter extends BaseAdapter{ private Activity activity; private ArrayList<HashMap<String, String>> user; private static LayoutInflater inflater = null; public UserAdapter(Activity a, ArrayList<HashMap<String, String>> u) { activity = a; user = u; inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return user.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if(convertView==null) view = inflater.inflate(R.layout.user_list_row, null); TextView tv_user = (TextView)view.findViewById(R.id.tv_user); HashMap<String, String> aUser = new HashMap<String, String>(); aUser = user.get(position); tv_user.setText(aUser.get(MainActivity.KEY_USER)); return view; } }
und der Auszug aus dem Logcat
Code
Alles anzeigen03-26 13:18:11.967: E/AndroidRuntime(7275): FATAL EXCEPTION: AsyncTask #1 03-26 13:18:11.967: E/AndroidRuntime(7275): java.lang.RuntimeException: An error occured while executing doInBackground() 03-26 13:18:11.967: E/AndroidRuntime(7275): at android.os.AsyncTask$3.done(AsyncTask.java:299) 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 03-26 13:18:11.967: E/AndroidRuntime(7275): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.lang.Thread.run(Thread.java:841) 03-26 13:18:11.967: E/AndroidRuntime(7275): Caused by: java.lang.NullPointerException 03-26 13:18:11.967: E/AndroidRuntime(7275): at de.rush2rio.zeiterfassung.MainActivity$FetchSQL.doInBackground(MainActivity.java:229) 03-26 13:18:11.967: E/AndroidRuntime(7275): at de.rush2rio.zeiterfassung.MainActivity$FetchSQL.doInBackground(MainActivity.java:1) 03-26 13:18:11.967: E/AndroidRuntime(7275): at android.os.AsyncTask$2.call(AsyncTask.java:287) 03-26 13:18:11.967: E/AndroidRuntime(7275): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 03-26 13:18:11.967: E/AndroidRuntime(7275): ... 4 more
-
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
-
jawohl! super danke dir^^
endlich funktionierts
edit: hät evtl noch eine kleine frage^^
weißt du wie ich das "+" bzw "-" in der liste rot bzw grün machen kann? hab schon mehrere sachen probiert mit Ressource/setColor etc aber alles hatte keine auswirkung drauf -
achso ja stimmt^^
hier die aktuelle LvCursorAdapter
-
so also jetzt hab ichs soweit hinbekommen das im toast jetzt die neu eingegebenen sachen stehn, aber in der listview steht noch das alte drin
aber displayListView() ist doch in der updateEitnrag methode drin?
-
also hier meine main.xml
die app öffnet sich gleich in der listviewhttps://www.dropbox.com/s/ucqpm3ven29wwfk/main.png
wen man auf den grünen + Button geht kommt der alertdialog(sry dass das bild so schlecht ist der emulator hat scheinbar probleme mit dem alertdialog beim screenshot)
https://www.dropbox.com/s/rqgk0ryhud4b7oi/add.png
beim longCLick auf ein item öffnet sich dann der selbe alertdialog nur mit der checkbox als visible
-
hab folgende eingabe gemacht:
betrag = 3.99 vorher 23.99
notiz = tester vorher test
datum = 27.5 vorher 28.5
plus auf minus geändertfolgendes kommt beim toast raus
rows Updated: 0 : + : 23.99 : 28.5.2013 : test : id=2
also es wird nix geändert -
leider funktioniert es so auch nicht.
habs jetzt geändert auf
Javapublic void eintragUpdate() { dbHelper.updateEintraege(new_plus_minus, new_datum, new_betrag, new_notiz, idCode); displayListView();}
beim debuggen geht er ohne probleme bis zum eintragUpdate();
des displayListView(); hab ich auch nur zum testen mal auskommentiert nur vergessen wieder rein zumachen^^wo könnte sonst noch der fehler liegen?
danke dir für deine Mühe
edit: wen ich auf hinzufügen geh passiert wieder nix... die zeile schaut aus wie davor obwohl ich mehrere sachen ändere -
die methode displayListView hab ich eigentlich schon gepsotet
aber hier mal meine beiden klassen
https://www.dropbox.com/s/b0mx…e0w7/LvCursorAdapter.java
https://www.dropbox.com/s/yp1m4qe323q7wr9/GeldDbAdapter.java
-
also so ganz hab ichs glaub ich nicht verstanden was du meinst
updateEintraege() ist in der klasse DbAdapter drinnen.
und in der klasse LvCursorAdapter wird dannCodepublic void eintragUpdate() { dbHelper.updateEintraege(new_plus_minus, new_datum, new_betrag, new_notiz, null); displayListView(); }
aufgerufenwürd ja gern den code von den klasse mal posten, aber der code wird jedesmal in eine zeile zusammen gefasst
danke schonmal für deine Hilfe
-
ja klar sry voll verpeilt
einmal das update:
"
public long updateEintraege( String plus_minus, String datum, Double betrag, String notiz, Integer _id) {
int rowsupdated = 0;
ContentValues contValues = new ContentValues();
contValues.put(KEY_P_M, plus_minus);
contValues.put(KEY_DATUM, datum);
contValues.put(KEY_BETRAG, betrag);
contValues.put(KEY_NOTIZ, notiz);rowsupdated = mDb.update(SQLITE_TABLE, contValues, KEY_ID +"="+_id, null);
return rowsupdated; }
"und hier der CursorAdapter:
"
private void displayListView() {Cursor cursor = dbHelper.fetchAllEintraege();
// Spalten
String[] columns = new String[] {
GeldDbAdapter.KEY_P_M,
GeldDbAdapter.KEY_DATUM,
GeldDbAdapter.KEY_BETRAG,
GeldDbAdapter.KEY_NOTIZ
};// XML definiert welche View die Daten verbindet
int[] to = new int[] {
R.id.tv_plus_minus,
R.id.tv_datum,
R.id.tv_betrag_leer,
R.id.tv_notiz_leer
};cursorAdapter = new SimpleCursorAdapter(this, R.layout.eintrag_row, cursor, columns, to, 0);
ListView listView = (ListView)findViewById(R.id.listView1);
listView.setAdapter(cursorAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> listView, View view, int position, long id) {//Positioniert den Cursor zur entsprechenden Zeile im ResultSet
Cursor cursor = (Cursor)listView.getItemAtPosition(position);//Holt sich aus den Zeilen die Daten
idCode = Integer.parseInt(cursor.getString(cursor.getColumnIndexOrThrow("_id")));
plus_minusCode = cursor.getString(cursor.getColumnIndexOrThrow("plus_minus"));
betragCode = Double.parseDouble(cursor.getString(cursor.getColumnIndexOrThrow("betrag")));
notizCode = cursor.getString(cursor.getColumnIndexOrThrow("notiz"));
datumCode = cursor.getString(cursor.getColumnIndexOrThrow("datum"));
}
}); "sry aber des mit dem Code einfügen haut irgendwie nicht immer hin :o
-
Hallo zusammen,
ich hab eine SQLite DB
ich möchte über einen LongClick auf einen Eintrag von der Listview einen Alertdialog öffnen, wo ich dann die Daten bearbeiten kann. Ändern funktioniert im Alertdialog ohne probleme nur sobald ich auf hinzufügen geh passiert gar nix.
es wird der Eintrag so angezeigt wie er davor war.ich find den fehler einfach nicht
vielen dank schonmal
PHP
Alles anzeigenlistView.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { final View EditView = getLayoutInflater().inflate(R.layout.add, null); Cursor cursor = (Cursor) arg0.getItemAtPosition(arg2); idCode = Integer.parseInt(cursor.getString(cursor.getColumnIndexOrThrow("_id"))); plus_minusCode = cursor.getString(cursor.getColumnIndexOrThrow("plus_minus")); betragCode = Double.parseDouble(cursor.getString(cursor.getColumnIndexOrThrow("betrag"))); notizCode = cursor.getString(cursor.getColumnIndexOrThrow("notiz")); datumCode = cursor.getString(cursor.getColumnIndexOrThrow("datum")); final EditText add_betrag = (EditText)EditView.findViewById(R.id.edt_add_betrag); final EditText add_notiz = (EditText)EditView.findViewById(R.id.edt_add_notiz); final CheckBox chk_bx = (CheckBox)EditView.findViewById(R.id.chk_bx); rd_Group = (RadioGroup)EditView.findViewById(R.id.rd_group); add_betrag.setText(String.valueOf(betragCode)); new_betrag = Double.parseDouble(add_betrag.getText().toString()); new_datum = String.valueOf(datumCode); if (String.valueOf(datumCode).equals("")) new_datum = tvChangedDate.getText().toString(); if (String.valueOf(notizCode).equals("")||(String.valueOf(notizCode).equals("null"))){ new_notiz = "keine Notiz vorhanden"; } else { add_notiz.setText(String.valueOf(notizCode)); } new_notiz = add_notiz.getText().toString(); if (plus_minusCode.equals("+")){ rd_Group.check(R.id.rd_btn_plus); } else if ((plus_minusCode.equals("-"))) { rd_Group.check(R.id.rd_btn_minus); } else { Toast.makeText(getApplicationContext(), "Falsche Eingabe", Toast.LENGTH_SHORT).show(); } int selectedId = rd_Group.getCheckedRadioButtonId(); rd_Button = (RadioButton) findViewById(selectedId); switch(selectedId) { case R.id.rd_btn_plus: new_plus_minus = "+"; break; case R.id.rd_btn_minus: new_plus_minus = "-"; break; } chk_bx.setVisibility(View.VISIBLE); new AlertDialog.Builder(LvCursorAdapter.this) .setTitle(R.string.bearbeiten) .setView(EditView) .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (chk_bx.isChecked() == false) { eintragUpdate(); } else { new AlertDialog.Builder(LvCursorAdapter.this) .setTitle(R.string.delete) .setMessage(R.string.delete_one) .setPositiveButton(R.string.ja, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dbHelper.deleteEintraege(idCode); displayListView(); Toast.makeText(getApplicationContext(),R.string.delete_done, Toast.LENGTH_SHORT).show(); } }) .setNegativeButton(R.string.nein, null) .show(); displayListView(); } } }) .setNegativeButton(R.string.abbrechen, null) .show(); displayListView(); return true; }; }); } public void eintragUpdate() { dbHelper.updateEintraege(new_plus_minus, new_datum, new_betrag, new_notiz, null); displayListView(); }
-
hat sich erledigt
aber irgendwie zeigt der mir nicht das icon an mh...
Edit: ich bräuchte vll doch nochmal hilfe
jetzt kommt resolveUri failed on bad bitmap uri: + bzw -
passt doch oder fehlt da noch was?Edit 2: habs jetzt anders gelöst, somit erledigt
-
also des mit toString frag ich mich grad selber was ich da gemacht hab
beim debuggen ist img_p_m vom anfang an null
-
ne der fehler betrifft zeile 139 bzw 142 jenachdem ob ich + oder - bei den radiobuttons auswähle
irgendwas mach ich da falschirgend ne idee wie ich des besser umsetzen kann?
-
ah jetzt hab ichs hinbekommen
hab jetzt nur den teil mit dem alertdialog genommenCode
Alles anzeigenpublic class LvCursorAdapter extends Activity { private GeldDbAdapter dbHelper; private SimpleCursorAdapter cursorAdapter; double new_betrag; String new_notiz; String new_datum; String new_plus_minus; String plus_minus; String betragCode; String notizCode; Integer idCode; String datumCode; //DatePicker private TextView tvChangedDate; private Button btnChangeDate; private int mYear; private int mMonth; private int mDay; static final int DATE_DIALOG_ID = 1; //RadioGroup/Button private RadioGroup rd_Group; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dbHelper = new GeldDbAdapter(this); dbHelper.open(); displayListView(); ImageButton img_add = (ImageButton)findViewById(R.id.img_btn_add); img_add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { final View addView = getLayoutInflater().inflate(R.layout.add, null); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< //// Datum ändern \\\\ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> tvChangedDate = (TextView)addView.findViewById(R.id.tv_changedDate); btnChangeDate = (Button)addView.findViewById(R.id.btnChangeDate); btnChangeDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DatePickerDialog DPD = new DatePickerDialog( LvCursorAdapter.this, mDateSetListener, mYear, mMonth, mDay); DPD.show(); } }); final Calendar c = Calendar.getInstance(); // Date myDate = c.getTime(); // // myFormat = "dd.MM.yyyy"; // SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.GERMANY); // String date_add = sdf.format(myDate); mDay = c.get(Calendar.DAY_OF_MONTH); mMonth = c.get(Calendar.MONTH); mYear = c.get(Calendar.YEAR); updateDisplay(); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> final EditText add_betrag = (EditText)addView.findViewById(R.id.edt_add_betrag); final EditText add_notiz = (EditText)addView.findViewById(R.id.edt_add_notiz); new AlertDialog.Builder(LvCursorAdapter.this) .setTitle(R.string.add_eintrag) .setView(addView) .setPositiveButton(R.string.add, new DialogInterface.OnClickListener() { // Daten hinzufügen public void onClick(DialogInterface dialog, int whichButton) { ImageView img_p_m = (ImageView)addView.findViewById(R.id.img_plus_minus); // <<<<<<<<<<<< RadioGroup >>>>>>>>>>>>> rd_Group = (RadioGroup)addView.findViewById(R.id.rd_group); // holt sich die ID des ausgewählten RadioButton von der RadioGroup int selectedId = rd_Group.getCheckedRadioButtonId(); // findet den RadioButton über die ID rd_Button = (RadioButton) findViewById(selectedId); boolean checked = false; switch(selectedId) { case R.id.rd_btn_plus: checked = true; break; case R.id.rd_btn_minus: checked = false; break; } if(checked) { plus_minus = "+"; // true ist + } else { plus_minus = "-"; // false ist - } // <<<<<<<<<<<<<<<< ------ >>>>>>>>>>>>> new_betrag = Double.parseDouble(add_betrag.getText().toString()); new_notiz = add_notiz.getText().toString(); new_datum = tvChangedDate.getText().toString(); new_plus_minus = plus_minus; if (plus_minus.toString().equals("+")) img_p_m.setImageResource(R.drawable.plus_icon_small); if (plus_minus.toString().equals("-")) img_p_m.setImageResource(R.drawable.minus_icon_small); if (add_notiz.getText().toString().equals("")) new_notiz = "keine Notiz vorhanden"; dbHelper.createEintraege(new_plus_minus, new_datum, new_betrag, new_notiz); displayListView(); }; }) .setNegativeButton(R.string.abbrechen, null) .show(); displayListView(); } }); //Daten löschen ImageButton img_clear = (ImageButton)findViewById(R.id.img_btn_clear); img_clear.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new AlertDialog.Builder(LvCursorAdapter.this) .setTitle(R.string.delete) .setMessage(R.string.delete_all) .setPositiveButton(R.string.ja, new DialogInterface.OnClickListener() { @SuppressLint("ShowToast") @Override public void onClick(DialogInterface dialog, int which) { //Alle Daten löschen dbHelper.deleteAllEintraege(); displayListView(); Toast.makeText(getApplicationContext(), R.string.delete_toast, Toast.LENGTH_SHORT).show(); } }) .setNegativeButton(R.string.nein, null) .show(); displayListView(); } }); }
-
würd ich gern aber der fasst den code in 4 zeilen zusammen wen ich java code einfügen will >.> ich glaub ich brauch urlaub xD