Content Provider & sqlite

  • Antworten:23
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 23

07.02.2014, 16:38:30 via Website

Hallo zusammen,

ich haben mich nach längerer Zeit entschlossen meine APP auf den LOADER in Verbindung mit dem Content Provider umzustellen, leider habe ich nun bei der Übergabe von einer Activity zur anderen Activity Probleme. Ich bekomme einfach keine ID zum ContentProvider übergeben , um die Datenbankabfrage zu machen. Vielleicht habt ihr einen Tipp für mich.

Meine erste Activity , dort wird in einer ListView Kategorien angezeigt, das geht, von da aus , sollen passende Fragen anhand der übergebenden ID in der zweiten Activity in einer Liestview angezeigt werden, die ID wird nicht an die Abfrage im Content übergeben ( Das ist mein Problem

1mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
2
3
4 @Override
5 public void onItemClick(AdapterView<?> arg0, View view, int arg2,
6 long arg3) {
7 // Auswahl eines Lernfeldes
8
9 // Übergabe der album_id an die Fragen Activity
10 //String album_id = ((TextView) view.findViewById(R.id.album_id)).getText().toString();
11
12 Intent i = new Intent(getApplicationContext(), AntwortActivity.class);
13 //i.putExtra("album_id", album_id);
14
15 Uri selectedUri = Uri.parse(Customer.CONTENT_FRAGE_TYPE + "/" + arg3);
16 i.putExtra(Customer.CONTENT_FRAGE_TYPE_ID, selectedUri);
17
18
19 Log.d("Questions", "Start! "+i);
20 startActivity(i);
21
22
23 }
24 public void onNothingSelected(AdapterView<?>arg0){
25 }});
26
27 }

Mein Content Provider

1public class Customer extends ContentProvider{
2
3 public static final String PROVIDER_NAME = "com.mobimaler.mobi.helper.customer";
4
5 //Tabelle Lernfelder
6 public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/customers" );
7 //Tabelle Fragen
8 public static final Uri CONTENT_URI2 = Uri.parse("content://" + PROVIDER_NAME + "/fragen" );
9 //Tabelle Antworten
10 //public static final Uri CONTENT_URI3 = Uri.parse("content://" + PROVIDER_NAME + "/customers3" );
11
12 /** Constants to identify the requested operation */
13
14 public static final String CONTENT_ITEM_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE +"/customers";
15 public static final String CONTENT_ITEM_TYPE_ID = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/customer";
16
17 public static final String CONTENT_FRAGE_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/fragen";
18 public static final String CONTENT_FRAGE_TYPE_ID = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/frage";
19
20
21 private static final int CUSTOMERS = 1;
22 private static final int CUSTOMERS_ID = 2;
23
24 private static final int FRAGEN = 3;
25 private static final int FRAGEN_ID = 4;
26
27 //private static final int CUSTOMERS3 = 1;
28
29 private static final UriMatcher uriMatcher ;
30 static {
31 //Tabelle Lernfelder
32 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
33 //Lernfelder
34 uriMatcher.addURI(PROVIDER_NAME, "customers", CUSTOMERS);
35 uriMatcher.addURI(PROVIDER_NAME, "customers/#", CUSTOMERS_ID);
36
37 uriMatcher.addURI(PROVIDER_NAME, "fragen", FRAGEN);
38 uriMatcher.addURI(PROVIDER_NAME, "fragen/#", FRAGEN_ID);
39
40 }
41
42 /** This content provider does the database operations by this object */
43 LernfelderDbAdapter mLernfelderDB;
44 FragenDbAdapter mFragenDB;
45
46 /** A callback method which is invoked when the content provider is starting up */
47 @Override
48 public boolean onCreate() {
49 mLernfelderDB = new LernfelderDbAdapter(getContext());
50 mFragenDB = new FragenDbAdapter(getContext());
51 return true;
52 }
53
54
55 @Override
56 public String getType(Uri uri) {
57 return null;
58 }
59
60
61 /** A callback method which is by the default content uri */
62 @Override
63 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
64
65 // Objekt-ID:
66 String id;
67
68
69 int uriType = uriMatcher.match(uri);
70 switch (uriType) {
71 case CUSTOMERS:
72 mLernfelderDB.open();
73 //id = uri.getLastPathSegment();
74 return mLernfelderDB.getAllFelder();
75
76
77 //break;
78 case FRAGEN:
79 mFragenDB.open();
80 id = uri.getLastPathSegment();
81 // id wird hier leider nicht übergeben, das ist mein Problem
82 return mFragenDB.getTitle(id);
83
84 //break;
85 }
86 getContext().getContentResolver().notifyChange(uri, null);
87 return null;
88
89 }
90
91
92
93 private String addId(String selection, int id) {
94 // TODO Automatisch generierter Methodenstub
95 return null;
96 }
97
98
99 private Cursor getIntent() {
100 // TODO Automatisch generierter Methodenstub
101 return null;
102 }
103
104
105 @Override
106 public int delete(Uri uri, String selection, String[] selectionArgs) {
107 // TODO Auto-generated method stub
108 return 0;
109 }
110
111
112 @Override
113 public Uri insert(Uri uri, ContentValues values) {
114 // TODO Auto-generated method stub
115 return null;
116 }
117
118
119 @Override
120 public int update(Uri uri, ContentValues values, String selection,
121 String[] selectionArgs) {
122 // TODO Auto-generated method stub
123 return 0;
124 }
125
126
127}

Die zweite Activity

1SimpleCursorAdapter lAdapter;
2 ListView lListView;
3
4 private Uri selectedUri;
5
6 @Override
7 protected void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.activity_fragen);
10
11
12
13 Bundle extras = getIntent().getExtras();
14 selectedUri = (savedInstanceState == null) ? null : (Uri) savedInstanceState
15 .getParcelable(Customer.CONTENT_FRAGE_TYPE_ID);
16
17 if (extras != null) {
18 selectedUri = extras
19 .getParcelable(Customer.CONTENT_FRAGE_TYPE_ID);
20
21 }
22
23 String i = selectedUri.getLastPathSegment();
24
25
26 //int i = Integer.parseInt(getIntent().getExtras().getString("album_id"));
27
28 Log.d("Antwort", "LastPathSegment! "+i);
29 lListView = (ListView) findViewById(R.id.list);
30
31
32
33 lAdapter = new SimpleCursorAdapter(getBaseContext(),
34 R.layout.activity_fragen_list,
35 null,
36 new String[] { FragenDbAdapter.TAG_ID_FELD, FragenDbAdapter.TAG_ID_FRAGE, FragenDbAdapter.TAG_COUNT, FragenDbAdapter.TAG_NAME, FragenDbAdapter.TAG_ALBUM },
37 new int[] { R.id.album_id, R.id.song_id, R.id.track_no, R.id.album_name, R.id.song_duration }, 0);
38
39 lListView.setAdapter(lAdapter);
40
41 getSupportLoaderManager().initLoader(0, null, this);
42
43
44
45
46 }
47
48
49 @Override
50 public boolean onCreateOptionsMenu(Menu menu) {
51 // Inflate the menu; this adds items to the action bar if it is present.
52 getMenuInflater().inflate(R.menu.activity_fragen, menu);
53 return true;
54 }
55
56 @Override
57 public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
58 Uri uri = Customer.CONTENT_URI2;
59 return new CursorLoader(this, uri, null, null, null, null);
60 }
61
62 @Override
63 public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
64 lAdapter.swapCursor(arg1);
65 }
66
67 @Override
68 public void onLoaderReset(Loader<Cursor> arg0) {
69 lAdapter.swapCursor(null);
70 }
71
72}


Ich hoffe ihr könnt mir das weiterhelfen.

Grüße Ralf

P.S. Habe ein wenig weiter probiert, leider aber nicht weitergekommen

In meiner zweiten Aktivity wirf er mir im Log den Richtigen Pfad aus

LastPathSegment! content://com.mobimaler.mobi.helper.customer/fragen/vnd.android.cursor.dir/fragen/5

Diesen Code verwende ich da

1Bundle extras = getIntent().getExtras();
2 selectedUri = (savedInstanceState == null) ? null : (Uri) savedInstanceState
3 .getParcelable(Customer.CONTENT_ITEM_TYPE);
4
5 if (extras != null) {
6 selectedUri = extras
7 .getParcelable(Customer.CONTENT_ITEM_TYPE);
8
9 }
10
11 //String i = selectedUri.getLastPathSegment();
12 Uri uri = Uri.parse(Customer.CONTENT_URI2 + "/" + selectedUri);
13 String i = null;
14 getContentResolver().query(uri, null, null, null, i);
15
16 Log.d("Antwort", "LastPathSegment! "+uri);

Nur leider bei meinem Provider kommt nichts mehr von der ID da an, verstehe nicht wieso

Dort habe ich folgenden Code

1@Override
2 public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
3
4 // Objekt-ID:
5 long id;
6 int uriType = uriMatcher.match(uri);
7 switch (uriType) {
8 case CUSTOMERS:
9 mLernfelderDB.open();
10 //id = uri.getLastPathSegment();
11 return mLernfelderDB.getAllFelder();
12 //mLernfelderDB.getAllFelder();
13
14 //break;
15 case FRAGEN:
16 mFragenDB.open();
17 id = Long.parseLong(uri.getLastPathSegment()); /// Hier kommt einfach nichts an ,letzter Wert ist das Wort fragen, es sollte allerdings die die id 5 sein
18
19 return mFragenDB.getTitle(id);
20
21 }
22 getContext().getContentResolver().notifyChange(uri, null);
23 return null;
24
25 }

Die Sufu hat leider noch kein Licht ins dunkle gebracht

— geändert am 07.02.2014, 21:27:11

Antworten
  • Forum-Beiträge: 359

08.02.2014, 07:24:58 via App

sorry aber das liest sich keiner durch poste nochmal, aber nur die stelle im code die relevant ist.

Antworten
  • Forum-Beiträge: 23

08.02.2014, 08:16:27 via Website

Moin, ok, kann ich gerne mache, dachte es wäre nur zur Übersicht etwas leichter, gerade im Bezug auf den Content Provider

Erste Activity, Übergabe der ID an die Zweite Activity

1Intent i = new Intent(getApplicationContext(), AntwortActivity.class);
2Uri selectedUri = Uri.parse(Customer.CONTENT_FRAGE_TYPE + "/" + arg3);
3i.putExtra(Customer.CONTENT_FRAGE_TYPE_ID, selectedUri);

zweite Activity Auslesen vom Intent und Übergabe an den Provider

1Bundle extras = getIntent().getExtras();
2 selectedUri = (savedInstanceState == null) ? null : (Uri) savedInstanceState
3 .getParcelable(Customer.CONTENT_ITEM_TYPE);
4
5 if (extras != null) {
6 selectedUri = extras
7 .getParcelable(Customer.CONTENT_ITEM_TYPE);
8
9 }
10
11 //String i = selectedUri.getLastPathSegment();
12 Uri uri = Uri.parse(Customer.CONTENT_URI2 + "/" + selectedUri);
13 String i = null;
14 getContentResolver().query(uri, null, null, null, i);
15
16 Log.d("Antwort", "LastPathSegment! "+uri);


Log macht folgende Ausgabe
LastPathSegment! content://com.mobimaler.mobi.helper.customer/fragen/vnd.android.cursor.dir/fragen/5
Sieht gut aus die 5 am Ende brauche ich , aber jetzt kommt es

Im Content Provider

1public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
2
3 // Objekt-ID:
4 long id;
5 int uriType = uriMatcher.match(uri);
6 switch (uriType) {
7 case CUSTOMERS:
8 mLernfelderDB.open();
9 //id = uri.getLastPathSegment();
10 return mLernfelderDB.getAllFelder();
11 //mLernfelderDB.getAllFelder();
12
13 //break;
14 case FRAGEN:
15 mFragenDB.open();
16 id = Long.parseLong(uri.getLastPathSegment());
17 return mFragenDB.getTitle(id);
18
19 }
20 getContext().getContentResolver().notifyChange(uri, null);
21 return null;
22
23 }

Abfrage auf id = Long.parseLong(uri.getLastPathSegment()); ergibt leider nicht den gewünschten Wert 5 aber im Log steht er doch

LastPathSegment! content://com.mobimaler.mobi.helper.customer/fragen/vnd.android.cursor.dir/fragen/5

Hoffe ist für euch übersichtlicher , verzweifle noch an dem Teil

Grüße Ralf

— geändert am 08.02.2014, 08:26:33

Antworten
  • Forum-Beiträge: 23

08.02.2014, 17:15:46 via Website

Hi,

statt der 5 übergibt er nur den Pfad fragen als id , also id = fragen , statt id = 5

Grüße

Antworten
  • Forum-Beiträge: 23

08.02.2014, 17:24:34 via Website

Wo meinst du ??
Meinst du hier
Uri uri = Uri.parse(Customer.CONTENT_URI2 + "/" + selectedUri + "/");

Hat leider nichts geändert , er übergibt immer noch nur das Wort fragen und nicht die 5, ich verstehe es einfach nicht

Grüße

— geändert am 08.02.2014, 17:35:45

Antworten
  • Forum-Beiträge: 23

09.02.2014, 02:20:33 via Website

Hi,

Ausagbe

Caused by: android.database.sqlite.SQLiteException: no such column: fragen: , while compiling: SELECT _id, album, album_id, name, count FROM fragen WHERE album_id=fragen

Er übergibt ganz klar nicht die 5 sind nur das Wort fragen, wo ist nur die5 geblieben

Grüße Ralf

Antworten
  • Forum-Beiträge: 1.793

09.02.2014, 11:38:20 via Website

impjor
Kannst du in der query(...)-Methode noch einmal eine Log-Ausgabe machen, und schauen ob das richtige Uri-Objekt (mit 5 am Ende) übergeben wird?

Wie sieht denn der Code von FragenDbAdapter aus? Eventuell ist da ja der Fehler.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
  • Forum-Beiträge: 23

09.02.2014, 11:47:16 via Website

Moin,

kann ich mir eigentlich nicht vorstellen, benutze den Adapter schon im aktuellen Projekt ohne Content Provider , da geht es ohne Probleme, aus irgendeinen Grund kommt die ID nicht im Content Provider an, sieht jedenfalls so aus.

1public Cursor getTitle(long id) throws SQLException {
2 Cursor mCursor = mDb.query(DATABASE_TABLE, new String[] { TAG_ID_FRAGE, TAG_ALBUM, TAG_ID_FELD, TAG_NAME, TAG_COUNT }, TAG_ID_FELD + "=" + (id), null, null, null, null, null);
3 if (mCursor != null) {
4 mCursor.moveToFirst();
5 }
6 return mCursor;
7 }


Grüße Ralf

— geändert am 09.02.2014, 11:48:51

Antworten
  • Forum-Beiträge: 1.793

09.02.2014, 12:23:07 via Website

Irgendwie passt das nicht. Die Methode getTitle(long id) erwartet einen long. "fragen" kann gar nicht übergeben werden.
Die Methode Long.parseLong() kann "fragen" aber gar nicht parsen, da es kein gültiger Long ist. Es kann also gar nicht getTitle aufgerufen werden, da vorher eine Fehlermeldung im LogCat sein müsste.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
  • Forum-Beiträge: 23

09.02.2014, 12:28:33 via Website

Hi ist ja auch klar, es soll ja auch kein " frage " übergeben werden , sondern der Wert "5" also die id aus dem ListView, nur bei der Abfrage im ContentProvider ist als letzter Wert im Content die 5 aufeinmal nicht mehr da , sondern nur als letzter wert der Pfad frage. Warum ist die 5 da nicht mehr da , das ist das Problem, wenn ich die 5 manuell in die getTitel Abfrage eintrage geht es logischer Weise sofort.
Logcat mal mit dran

Grüße

02-09 12:29:58.100: E/AndroidRuntime(16322): FATAL EXCEPTION: ModernAsyncTask #2
02-09 12:29:58.100: E/AndroidRuntime(16322): java.lang.RuntimeException: An error occured while executing doInBackground()
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137)
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.lang.Thread.run(Thread.java:841)
02-09 12:29:58.100: E/AndroidRuntime(16322): Caused by: java.lang.NumberFormatException: Invalid long: "fragen"
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.lang.Long.invalidLong(Long.java:125)
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.lang.Long.parse(Long.java:362)
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.lang.Long.parseLong(Long.java:353)
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.lang.Long.parseLong(Long.java:319)
02-09 12:29:58.100: E/AndroidRuntime(16322): at com.mobimaler.mobi.helper.Customer.query(Customer.java:97)
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.content.ContentProvider.query(ContentProvider.java:744)
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.content.ContentProvider$Transport.query(ContentProvider.java:199)
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.content.ContentResolver.query(ContentResolver.java:417)
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.content.ContentResolver.query(ContentResolver.java:360)
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:49)
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:35)
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:240)
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:51)
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:40)
02-09 12:29:58.100: E/AndroidRuntime(16322): at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:123)
02-09 12:29:58.100: E/AndroidRuntime(16322): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
02-09 12:29:58.100: E/AndroidRuntime(16322): ... 3 more

— geändert am 09.02.2014, 12:31:29

Antworten
  • Forum-Beiträge: 1.793

09.02.2014, 12:37:28 via Website

Im Content Provider
1public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
2 // Objekt-ID:
3 long id;
4 int uriType = uriMatcher.match(uri);
5 switch (uriType) {
6 case CUSTOMERS:
7mLernfelderDB.open();
8 //id = uri.getLastPathSegment();
9 return mLernfelderDB.getAllFelder();
10 //mLernfelderDB.getAllFelder();
11
12 //break;
13 case FRAGEN:
14 mFragenDB.open();
15Lass dir hier nochmal die uri ausgeben und prüfe, ob sie immer noch 5 am Ende hat
16 id = Long.parseLong(uri.getLastPathSegment());
17 return mFragenDB.getTitle(id);
18
19}
20 getContext().getContentResolver().notifyChange(uri, null);
21return null;
22
23 }
Abfrage auf id = Long.parseLong(uri.getLastPathSegment()); ergibt leider nicht den gewünschten Wert 5 aber im Log steht er doch

— geändert am 09.02.2014, 12:37:55

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
  • Forum-Beiträge: 23

09.02.2014, 12:45:00 via Website

Genau dort ist sie nicht mehr da und das verstehe ich nicht warum

Content! content://com.mobimaler.mobi.helper.customer/fragen

— geändert am 09.02.2014, 12:48:49

Antworten
  • Forum-Beiträge: 23

09.02.2014, 20:13:25 via Website

Keiner einen Ansatz oder Erfahrungswerte woran es liegen kann ? Sehe den Wald anscheinend vor lauter Bäumen nicht.

Grüße Ralf

Antworten
  • Forum-Beiträge: 23

09.02.2014, 21:51:49 via Website

Ok, so langsam kommt dunkel ins Licht, das Problem liegt anscheinend bei uriMatcher


unter dem case FRAGEN:
habe ich die ID nicht mehr , aber unter dem case FRAGEN_ID ist sie da, nur leider wenn ich dort die DB Abfrage einsetze tut sich nichts, als wenn dieser case nicht aufgerufen würde.

1public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
2
3 // Objekt-ID:
4 long id;
5 int uriType = uriMatcher.match(uri);
6 switch (uriType) {
7 case CUSTOMERS:
8 mLernfelderDB.open();
9 //id = uri.getLastPathSegment();
10 return mLernfelderDB.getAllFelder();
11 //mLernfelderDB.getAllFelder();
12 case CUSTOMERS_ID:
13 break;
14
15
16 case FRAGEN:
17 // mFragenDB.open();
18 //Log.d("Content", "LastPathSegment! "+uri); /// Id ist weg
19 //id = Long.parseLong(uri.getLastPathSegment());
20 //id = uri.getLastPathSegment();
21 //return mFragenDB.getTitle(id);
22 //mFragenDB.getTitle(5);
23 break;
24 case FRAGEN_ID:
25 mFragenDB.open();
26 id = Long.parseLong(uri.getLastPathSegment());
27 Log.d("Content", "LastPathSegment! "+uri); /// Id ist weg
28 //return mFragenDB.getTitle(id);
29 mFragenDB.getTitle(id);
30 break;
31 }
32
33 getContext().getContentResolver().notifyChange(uri, null);
34
35 return null;
36
37 }

Vielleicht einen Tipp ?????

Grüße

— geändert am 10.02.2014, 17:25:01

Antworten
  • Forum-Beiträge: 23

10.02.2014, 19:39:11 via Website

Bin mittlerweile echt ratlos , wenn ich unter FRAGEN_ID die Abfrage ausführe , bekomme ich im LOG folgende Meldung Ergbeniss_Query! android.database.sqlite.SQLiteCursor@406bf4c0 , damit kann ich jetzt gar nichts mehr anfangen. Bin schon kurz davor auf den Content Provider zu verzichten, der macht mir im Moment nur Probleme und kostet viel Zeit


Also ich denke es liegt am UriMatcher

1private static final int CUSTOMERS = 1;
2 private static final int CUSTOMERS_ID = 2;
3 private static final int FRAGEN = 3;
4 private static final int FRAGEN_ID = 4;
5
6private static final UriMatcher uriMatcher ;
7 static {
8 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
9 uriMatcher.addURI(PROVIDER_NAME, "customers", CUSTOMERS);
10 uriMatcher.addURI(PROVIDER_NAME, "customers" + "/#", CUSTOMERS_ID);
11 uriMatcher.addURI(PROVIDER_NAME, "fragen", FRAGEN);
12 uriMatcher.addURI(PROVIDER_NAME, "fragen" + "/#", FRAGEN_ID);
13
14 }

LOG gibt nach den Klick auf die ListView uriMatcher! 3 aus und da , kann er keine Abfrage auf die ID machen, mein Problem ist also der UriMatcher, nur wo, hab schon so manches probiert


Grüße

— geändert am 10.02.2014, 21:11:41

Antworten
  • Forum-Beiträge: 1.793

10.02.2014, 21:37:56 via App

Ralf Busch
Bin mittlerweile echt ratlos , wenn ich unter FRAGEN_ID die Abfrage ausführe , bekomme ich im LOG folgende Meldung Ergbeniss_Query! android.database.sqlite.SQLiteCursor@406bf4c0 , damit kann ich jetzt gar nichts mehr anfangen.
Das ist normal. Wenn ein Objekt etwas sinnvolles ergeben soll, wenn man es in einen String "umwandelt" muss man extra in der Klasse die toString()-Methode überschreiben und etwas sinnvolles zurückliefern. Das tut Cursor anscheinend nicht.

Ob es 100% am UriMatcher liegt kannst du doch einfach herausfinden: Mach mal Ausgaben der Uri bevor du sie an die zweite Activity weiterleitest und nachdem du sie in der zweiten Activity bearbeitest und wenn der ContentProvider sie erhält.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
  • Forum-Beiträge: 23

10.02.2014, 22:17:03 via Website

Hi,

in der zweiten Activity gibt die Uri eine 3 wieder statt einer 4 , so kann er nicht in die richtige Abfrage springen und diese ausführen :-(

Grüße

Antworten

Empfohlene Artikel