Wie bekomm ich es hin das jeder Benutzer sein eigenes Profilbild hat?

  • Antworten:11
  • Bentwortet
Chero Beam
  • Forum-Beiträge: 37

09.09.2015, 13:23:39 via Website

Ich habe eine Chatapp entwickelt wo jeder nutzer sein eigenes Profilbild haben sollte! Der Benutzer ist auch in der lage sich ein Profilbild in seiner Gallery im handy auszusuchen und nach Parse.com hochzuladen!
Jetzt kommt das Problem:
Bsp: User peter geht in die profile activity und lädt sein profilbild nach parse hoch und es wird auch angezeigt in der Image View! Also ich zieh das Bild vom Parse server zurück in die Image View.
User hans loggt sich ein geht auch in die profile activity um sein eigenes Profilbild auszusuchen und hochzuladen und es wird das profilbild von User peter angezeigt!

Wie kann das sein, da jeder User sein eigenes Profilbild haben sollte! Es darf nicht sein das, dass Profilbild von User Peter auch beim User hans in SEIN Profilbild geladen wird!

Was mache ich falsch?

Hier kommt mein code womit ich das bild nach Parse hochlade und danach beziehe (fetsche) vom parse server!
Bitte dringenst um Hilfe!!!

final ParseUser currentUser = ParseUser.getCurrentUser();
final String currentUserUsername = currentUser.getUsername();

        // Create the Parse File
        final ParseFile file = new ParseFile("Profile.png", image);
        // Upload the image into Parse Cloud
        file.saveInBackground();
        // Create a New Class called "ImageUpload" in Parse
        final ParseObject gameScore = new ParseObject("imageProfile");
        // Create the ParseFile
        // Create a column named "ImageName" and set the string
        gameScore.put("Image", "Profile.png");
        // Take the user name and put it to parse
        gameScore.put("user", currentUserUsername);
        // Create a column named "ImageFile" and insert the image
        gameScore.put("ImageFile", file);
        // Create the class and the columns
        gameScore.saveInBackground(new SaveCallback() {
            @Override
            public void done(ParseException e) {

                String objectId = gameScore.getObjectId();
                Log.e(TAG, objectId);

                Toast.makeText(getBaseContext(), "Your Profile Image is Saved!", Toast.LENGTH_LONG).show();

                final ParseUser currentUser = ParseUser.getCurrentUser();
                final String currentUserUsername = currentUser.getUsername();

                if (currentUser != null) {


                    ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("imageProfile");
                    query.orderByDescending("createdAt");
                    query.whereEqualTo("user", currentUserUsername);
                    query.whereEqualTo("objectId", currentUserUsername);
                    Log.v(TAG, "user" + currentUserUsername);
                    query.findInBackground(new FindCallback<ParseObject>() {
                        @Override
                        public void done(List<ParseObject> imgProfile,  com.parse.ParseException e) {
                            if (e == null) {

                                mProfile = imgProfile;

                                final ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("imageProfile");
                                query.getFirstInBackground(new GetCallback<ParseObject>() {
                                    @Override
                                    public void done(final ParseObject imgProfile, com.parse.ParseException e) {
                                        if (e == null) {

                                        } else {

                                            imgProfile.getObjectId();


                                            ParseFile fileObject = imgProfile.getParseFile("ImageFile");
                                            fileObject.getDataInBackground(new GetDataCallback() {

                                                public void done(byte[] data, com.parse.ParseException e) {
                                                    if (e == null) {

                                                        // Decode the Byte[] into Bitmap
                                                        Bitmap bmp = BitmapFactory.decodeByteArray(data, 0,
                                                                data.length);

                                                        // Get the ImageView from profile.xml
                                                        imgPhoto = (ParseImageView) findViewById(R.id.personal_imageView);


                                                        // Set the Bitmap into the ImageView
                                                        imgPhoto.setImageBitmap(bmp);


                                                    }

                                                }
                                            });
                                        }
                                    }
                                });

                            }
                        }
                    });
                }
            }
        });
    }


};

— geändert am 09.09.2015, 13:25:03

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.09.2015, 14:35:56 via App

Hallo,
Warum machst du das so kompliziert? (so sieht dein Code zumindest für aussenstehende aus)
Lade dich das Bild auf deinen Server hoch, das ist dann der erste schritt.
Im zweiten schritt lädst du du deine Nachrichten der Chats wobei zu jeder nachricht der Autor und sein Bild dazukommt.

Was ist denn dein Konkretes Problem, das geht mir aus deinem Post nicht hervor.
Da hat sich bestimmt ein Codefehler oder ein Logikfehler eingeschlichen.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Chero Beam
  • Forum-Beiträge: 37

09.09.2015, 15:59:57 via Website

Hallo Pascal,

das Bild auf parse hochzuladen ist kein Problem, aber ich es klappt nicht das Bild vom Parse server zurückzubekommen! Ich hab schon alles mögliche versucht und wie du sagst ich blick jetzt selbst irgendwie nicht mehr durch!
In meinem parse table imageProfile habe ich wie du siehst den "user" und die "ImageFile". Also ich kann das bild hochladen unter "ImageFile" und habe den usernamen unter "user".

Das was ich gerne möchte ist das jeder user sein eigenes profilbild hat! Jeder user kann auch sein Bild hochladen. Das Problem ist nur das ich das Bild nicht vom Parse Server abrufen kann in meine Image View. Ich habs versucht mit query und fetch, query.whereEqualTo("user", currentUserUsername); usw. aber es funktioniert nicht!

Wichtig ist für mich auch das ich das Bild nicht über die ObjectId beziehe weil der user die möglichkeit haben soll sein Profilbild jederzeit zu verändern!

Was kann ich da machen um das Bild von Parse zu beziehen?

Hier ist ein Bild von meinem Parse server...

image

— geändert am 09.09.2015, 16:00:36

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.09.2015, 17:02:17 via App

wie kommunizierst du denn mit dem Server? Ist das eine reine http/s anbindung per rest/service die du dann in der App entsprehend kapselst?
Wenn ja warum stellst du das bild nicht einfach unter einer bestimmten url zur verfügung und hast in deinem Objekt dann einen Verweis auf die URL. In app musst du nurnoch das bild der url herunterladen und anzeigen. Dafür gibt es vorgerferitgte Libs wie ION oder Picasso.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Chero Beam
  • Forum-Beiträge: 37

09.09.2015, 17:51:30 via Website

Genau darum gehts! Wenn ich mit einer url arbeite dann kann der user nicht mehr sein bild ändern und das bild wird immer dasselbe bleiben! Genau das möchte ich nicht!!!
Und ich müsste ständig die url eingeben um das neue bild zu aktualisieren!!!

Weisst du eine andere Möglichkeit???

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.09.2015, 18:28:56 via App

nein, warum denn auch, das muss alles dynamisch gehen. Der user läd ein Bild über den bisherigen weg hoch. Dein server merkt das, stellt es unter eine url zur verfügung und schreibt die url in deine DB. Bei der Abfrage bekommst du nun immer die aktuelle Bildurl zurück. Damit ist das hochladen komplett unabhängig vom anzeigen und das Problem wäre beiseite geschafft.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Chero Beam
  • Forum-Beiträge: 37

09.09.2015, 19:21:02 via Website

Also wäre das Ergebnis dasselbe? Ich dachte immer wenn ich es mit einer Url mache das ich dann auch immer den code aktualisieren müsste!
Kennst du dich mit parse aus, wie müsste ich das mit der url in meine code integrieren? Bin momentan total durcheinander damit...

Lg chero

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.09.2015, 19:27:49 via App

ich weiss nicht was du mit parse meinst. ich kenne nur das parsen von webseiteninfos. ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rexxar
  • Forum-Beiträge: 2.563

09.09.2015, 19:56:14 via App

Es sollte so sein dass der Table bei allen Nutzern gleich ist.
Denke ich zumindest.
Also nicht direkt das Bild in den Anzeigekasten laden sondern aus dem Table und den erst synchronisieren.
So würde ich es machen.

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
Chero Beam
  • Forum-Beiträge: 37

10.09.2015, 10:46:09 via Website

Danke an alle für die hilfe aber das Problem hat sich geklärt!
Super Forum übrigens!

Danke nochmal :)

Lg chero

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.09.2015, 11:46:38 via App

Sehr schön, dann setze deinen Thread bitte noch auf Beantwortet, indem du im Browser über deinem ersten Post auf "Mehr"->"Beantwortet" klickst.

Danke (smug)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Chero Beam
  • Forum-Beiträge: 37

10.09.2015, 11:57:36 via Website

alles klar, danke pascal und nen schönen tag dir ;)

Antworten