Uri oder File path als String speichern zum wiederauslesen

Jaiel

Jaiel

Dauergast
235
Hallo.

Habe eine klasse Person die einen Kontakt in meiner App darstellt.

Diese Person hat unter anderem ein Photo und wird in einer Datenbank gespeichert.

Beim Anlegen oder ändern der Person hole ich mir aus der Galerie ein Bild welches vom User ausgesucht wird.

Zurueck bekomme ich dann die URI zum Bild.

Meine Frage ist: Wie kann ich diese URI in meiner Datenbank unterbringen? Kann man die URI in ein String verwandeln und später aus dem String wieder die URI?

Wenn es nicht geht : kriege ich irgendwie den absoluten Path aus der URI?

Habe bei SO einige Beiträge gelesen dass man auf Android Version achten müsste oder dass man verschiedene URIs bekommt oder dass man gar URIS zu Bildern bekommt die gar nicht auf dem Handy sind sondern auf externen Speichermedium (Google Drive) und dass man dann Müll Zurueck bekommt sollte man versuchen daraus ein Image zu erzeugen.


Danke im voraus


Jaiel
 
Hallo Jaiel,

so ganz kann ich nicht nachvollziehen, was du genau meinst , dazu müsstest du mal ein Beispiel darstellen.

Wenn du aber eh schon eine DB hast ( ich vermute mal Sqlite), warum nimmst du dir am Anfang nicht das
Bitmap, reduzierst es , und speicherst das ByteArray in der DB. (z.b. als Thumbnail)

Dann hast du später nicht mehr das Problem , herauszufinden, wo das Bild ist oder
vielleicht schon gelöscht oder verschoben worden ist.
 
Zuletzt bearbeitet:
Also ok hier habe ich einen Ansatz aus SO probiert um den FilePath aus der URI die ich in onActivityResult bekomme:

Code:
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 123 && resultCode == RESULT_OK
                && null != data) {
            String selectedImagePath = getPath(data.getData());
            lh.setPhotoFilepath(selectedImagePath);

        }
        else
            lh.setPhotoFilepath(null);
    }

    public String getPath(Uri uri) {
        // just some safety built in
        if( uri == null ) {
            // TODO perform some logging or show user feedback
            return null;
        }
        // try to retrieve the image from the media store first
        // this will only work for images selected from gallery
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if( cursor != null ){
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            String path = cursor.getString(column_index);
            cursor.close();
            return path;
        }
        // this is our fallback here
        return uri.getPath();
    }

So starte ich die Auswahl:

Code:
            /*
            Intent galleryIntent = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            // Start the Intent
            main.startActivityForResult(galleryIntent, 123);
*/
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            main.startActivityForResult(Intent.createChooser(intent,"Select Picture"), 123);


Ich kriege leider nicht den FilePath. Ich prüfe das mit
Code:
public void setPhotoFilepath(String filePath)
{
    if(filePath==null){
        contactPhoto= BitmapFactory.decodeResource(contactsMenuFrame.getContext().getResources(),R.mipmap.ic_launcher);
        filePathToContactPhoto="-";
    }
    else{
        contactPhoto= BitmapFactory.decodeFile(filePath);
        filePathToContactPhoto=filePath;
    }
    newContactPhoto.setImageBitmap(contactPhoto);
}


EDIT: Ich teste gerade auf dem Emulator...Ich versuchs mal auf richtiger HArdware und melde mich ncohmal zurück dann.
 
Nachfrage :

Wenn ich es richtig verstanden habe , bekommst du hier
if (requestCode == 123 && resultCode == RESULT_OK
&& null != data) {
String selectedImagePath = getPath(data.getData());
lh.setPhotoFilepath(selectedImagePath);

}
else
lh.setPhotoFilepath(null);

nichts zurück , resultCode != 123 und auch nicht RESULT_OK - richtig ???
 
ich bekomme schon den pfad das ausgesucht bild wird richtig angezeigt aber beim erneuten starten der app und abchecken der kontakte ist das bild nciht mehr da und das contactphoto ist null!

ich bekomme im android monitor die nachricht dass das file nicht existiert
 
Nimms mir nicht übel , ein wenig verwirrend das Ganze ..

Ich versuche mich eben durchzuwühlen :)

Worin sicherst du denn der zuvor ermittelte Url ??
Irgendwas musst du ja damit machen, wenn du die App erneut aufrufst.

Das kann ich noch nicht ersehen
 
Upps. Ich habe dem FilePath beim erstellen der Person nciht gesetzt dadurch stand in jedem Person objekt "-" als Filepath. Da sit kalr dass er das nciht findet.

Bis jetzt läuft es wieder richtig :D

Sorry für die Umstände. danke swa00!
 
Die Wunderheiler von AH :)

Viel Erfolg !!
 
  • Danke
Reaktionen: lordzwieback

Ähnliche Themen

J
  • JennyLessner
Antworten
1
Aufrufe
703
jogimuc
J
B
Antworten
6
Aufrufe
1.051
jogimuc
J
Manny87
  • Manny87
Antworten
11
Aufrufe
166
swa00
swa00
Zurück
Oben Unten