Uri oder File path als String speichern zum wiederauslesen

  • 7 Antworten
  • Neuester Beitrag
Diskutiere Uri oder File path als String speichern zum wiederauslesen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
Jaiel

Jaiel

Experte
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
 
swa00

swa00

Moderator
Teammitglied
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:
Jaiel

Jaiel

Experte
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.
 
swa00

swa00

Moderator
Teammitglied
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 ???
 
Jaiel

Jaiel

Experte
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
 
swa00

swa00

Moderator
Teammitglied
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
 
Jaiel

Jaiel

Experte
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!
 
swa00

swa00

Moderator
Teammitglied
Die Wunderheiler von AH :)

Viel Erfolg !!
 
Ähnliche Themen - Uri oder File path als String speichern zum wiederauslesen Antworten Datum
5