Implementieren von chooseImageListener und uploadListener! Brauch dringend Hilfe!!!

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

11.09.2015, 15:51:26 via Website

Hallo,

das implementieren in meinen code von chooseImageListener und uploadListener klappt nicht! Weiss jemand eine Lösung???

Ziel soll sein das der User die möglichkeit haben soll ein Bild via Gallery oder Cameraa auszusuchen!!!

Hier kommt der code in protected void onCreate...

mCurrentPhotoPath = PreferenceManager.getDefaultSharedPreferences(this).getString("picturePath", "");
    if (!mCurrentPhotoPath.equals("")) ;

    imgPic = (ParseImageView) findViewById(R.id.img_recipes);
    imgPic.setImageBitmap(BitmapFactory.decodeFile(mCurrentPhotoPath));
    imgPic.setOnClickListener**(chooseImageListener);**
    mRecipesChat = (EditText) findViewById(R.id.add_text);
    mSendPicBtn = (Button) findViewById(R.id.btn_pic);
    mSendPicBtn.setOnClickListener**(uploadListener);**




    mSendRecipesBtn = (Button) findViewById(R.id.btn_comment);
    mSendRecipesBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            ParseUser currentUser = ParseUser.getCurrentUser();

            String currentUserUsername = currentUser.getUsername();

            String commentStatus = mRecipesChat.getText().toString();



            if (commentStatus.isEmpty()) {

                AlertDialog.Builder builder = new AlertDialog.Builder(RecipesIdeas.this);
                builder.setMessage("Please type in a Message!");
                builder.setTitle("Oops!");
                builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();
                    }

                });
                AlertDialog dialog = builder.create();
                dialog.show();




                // Create the Parse File
                final ParseFile file = new ParseFile("Pics.png"**, image);**
                // Upload the image into Parse Cloud
                file.saveInBackground();

                ParseObject commentObject = new ParseObject("Comment and Pics");
                commentObject.put("commentStatus", commentStatus);
                commentObject.put("user", currentUserUsername);
                commentObject.put("Pics", "Pics.png");
                commentObject.put("PicsFile", file);
                commentObject.saveInBackground(new SaveCallback() {

Antworten
Sven R.
  • Forum-Beiträge: 1.904

11.09.2015, 15:57:59 via App

Wo sind die Variablen chooseImageListener und uploadListener deklariert?

Ps: Die erste if Abfrage ist sinnlos.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Chero Beam

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

11.09.2015, 20:58:28 via App

Vielleicht hilft das hier:
http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample

Der auswertumgsteil für die Kamera ist etwas kompliziert gemacht. das könnte man verweinfachen indem man einfach das geschossene Bild aus dem speicher ließt anstatt die Bytes zu konvertieren. Natürlich kommt es auf den Anwendungsfall an.

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

Chero Beam

Antworten
Chero Beam
  • Forum-Beiträge: 37

12.09.2015, 13:45:38 via Website

image

Hi Sven, ich habs auf diese weise versucht aber es klappt nicht! Weisst du eine andere Lösung?

image

Antworten
Chero Beam
  • Forum-Beiträge: 37

12.09.2015, 13:46:42 via Website

Hallo Pascal, vielen Dank für deine Antwort, ich werd mir das später mal ansehen...

Lg Chero

Antworten
Chero Beam
  • Forum-Beiträge: 37

12.09.2015, 13:50:30 via Website

Oh, ich sehs, die if abfrage " if (!mCurrentPhotoPath.equals("")) ;" ist wirklich sinnlos! Danke! Bitte schau dir die pics an die ich geschickt habe mit den variablen, vielleicht weisst du eine lösung wie/wo ich das deklarieren kann!?

Antworten
Chero Beam
  • Forum-Beiträge: 37

12.09.2015, 13:51:42 via Website

image

hier das 2 pic...

Antworten
Sven R.
  • Forum-Beiträge: 1.904

12.09.2015, 14:31:37 via App

Natürlich müssen die Variablen vor der Benutzung deklariert werden.

Am Beispiel einer Zahl:

int i = 0;
i++;

Und nicht andersrum:

i++;
int i = 0;

Du kannst hier aber auch den Listener anonym übergeben:

setListener(new Listener() {...})

— geändert am 12.09.2015, 14:32:50

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Chero Beam

Antworten
Chero Beam
  • Forum-Beiträge: 37

13.09.2015, 13:27:37 via Website

Hallo Sven,
könntest du dir mal meinen code ansehen? Ich bekomme vom Logcat diese Meldung: Attempt to invoke virtual method 'void com.parse.ParseImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference

hier kommt der code...

public class RecipesIdeas extends ListActivity {

protected EditText mRecipesChat;
protected Button mSendRecipesBtn;
protected Button mSendPicBtn;
protected List<ParseObject> mRecipes;
protected ParseImageView imgPic;

private static final String TAG = RecipesIdeas.class.getName();
private static int RESULT_LOAD_CAMERA_IMAGE = 2;
private static int RESULT_LOAD_GALLERY_IMAGE = 1;
private String mCurrentPhotoPath;
private File cameraImageFile;

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

    if (resultCode == Activity.RESULT_OK) {

        if (requestCode == RESULT_LOAD_GALLERY_IMAGE && null != data) {

            Uri selectedImage = data.getData();
            String[] filePathColumn = {MediaStore.Images.Media.DATA};

            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            mCurrentPhotoPath = cursor.getString(columnIndex);
            PreferenceManager.getDefaultSharedPreferences(this).edit().putString("picturePath", mCurrentPhotoPath).commit();
            cursor.close();

            imgPic = (ParseImageView) findViewById(R.id.img_recipes);
            imgPic.setImageBitmap(BitmapFactory.decodeFile(mCurrentPhotoPath));


        } else if (requestCode == RESULT_LOAD_CAMERA_IMAGE) {
            mCurrentPhotoPath = cameraImageFile.getAbsolutePath();
        }

        File image = new File(mCurrentPhotoPath);
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
        Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(), bmOptions);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100 /*ignored for PNG*/, stream);
        byte[] bitmapdata = stream.toByteArray();
        imgPic.setImageBitmap(bitmap);


    }
}


private File createImageFile() throws IOException {

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = timeStamp + "_";

    File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    File folder = new File(storageDir.getAbsolutePath() + "/PlayIOFolder");

    if (!folder.exists()) {
        folder.mkdir();
    }

    cameraImageFile = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            folder      /* directory */
    );

    return cameraImageFile;
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recipes_ideas);

    mCurrentPhotoPath = PreferenceManager.getDefaultSharedPreferences(this).getString("picturePath", "");

    mRecipesChat = (EditText) findViewById(R.id.add_text);
    imgPic = (ParseImageView) findViewById(R.id.img_recipes);
    imgPic.setImageBitmap(BitmapFactory.decodeFile(mCurrentPhotoPath));
    View.OnClickListener chooseImageListener = null;
    imgPic.setOnClickListener(chooseImageListener);

    mSendPicBtn = (Button) findViewById(R.id.btn_pic);
    View.OnClickListener uploadListener = null;
    mSendPicBtn.setOnClickListener(uploadListener);

    mSendRecipesBtn = (Button) findViewById(R.id.btn_comment);
    mSendRecipesBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


        }
    });

    chooseImageListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialogChooseFrom();
        }
    };


    uploadListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            byte[] image = null;

            try {
                image = readInFile(mCurrentPhotoPath);
            } catch (Exception e) {
                e.printStackTrace();
            }


            ParseUser currentUser = ParseUser.getCurrentUser();

            String currentUserUsername = currentUser.getUsername();

            final String commentStatus = mRecipesChat.getText().toString();

            // Create the Parse File
            final ParseFile file = new ParseFile("Comment.png", image);
            // Upload the image into Parse Cloud
            file.saveInBackground();

            ParseObject commentObject = new ParseObject("Comment");
            commentObject.put("commentStatus", commentStatus);
            commentObject.put("user", currentUserUsername);
            commentObject.put("Image", "Comment.png");
            commentObject.put("CommentFile", file);
            commentObject.saveInBackground(new SaveCallback() {
                @Override
                public void done(ParseException e) {

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

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

                    if (currentUser == null) {
                        Toast.makeText(RecipesIdeas.this, "Send!", Toast.LENGTH_LONG).show();
                        mRecipesChat.setText("");

                        ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Comment");
                        query.orderByDescending("createdAt");
                        query.whereEqualTo("commentStatus", commentStatus);
                        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, ParseException e) {
                                if (e == null) {

                                    mRecipes = imgProfile;

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

                                            } else {

                                                imgProfile.getObjectId();


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

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

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

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


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


                                                            queryAndPopulateMsgs();
                                                        }
                                                    }
                                                });
                                            }
                                        }
                                    });


                                } else {


                                }

                            }


                        });

                    }


                }


            });
        }
    };
}


private void refreshMsgs() {
    queryAndPopulateMsgs();
}


protected void queryAndPopulateMsgs() {

    ParseUser currentUser = ParseUser.getCurrentUser();
    if (currentUser != null) {

        ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Comment");
        query.orderByDescending("createdAt");
        query.setLimit(300);
        query.findInBackground(new FindCallback<ParseObject>() {
            @Override
            public void done(List<ParseObject> comment, ParseException e) {
                if (e == null) {
                    mRecipes = comment;

                    RecipesAdapter adapter = new RecipesAdapter(getListView().getContext(), mRecipes);
                    setListAdapter(adapter);

                    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 {
                                Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();

                            }

                        }


                    });


                }


            }
        });
    }
}


            @Override
            protected void onResume() {
                super.onResume();

                queryAndPopulateMsgs();
            }


            private void dialogChooseFrom() {

                final CharSequence[] items = {"From Gallery", "From Camera"};

                android.app.AlertDialog.Builder chooseDialog = new android.app.AlertDialog.Builder(this);
                chooseDialog.setTitle("Pick your choice").setItems(items, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        if (items[which].equals("From Gallery")) {

                            Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                            startActivityForResult(galleryIntent, RESULT_LOAD_GALLERY_IMAGE);

                        } else {

                            try {

                                File photoFile = createImageFile();
                                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                                cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                                startActivityForResult(cameraIntent, RESULT_LOAD_CAMERA_IMAGE);

                            } catch (IOException e) {
                                e.printStackTrace();
                            }


                        }
                    }
                });

                chooseDialog.show();
            }


            private byte[] readInFile(String path) throws IOException {

                byte[] data = null;
                File file = new File(path);
                InputStream input_stream = new BufferedInputStream(new FileInputStream(file));
                ByteArrayOutputStream buffer = new ByteArrayOutputStream();
                data = new byte[16384]; // 16K
                int bytes_read;

                while ((bytes_read = input_stream.read(data, 0, data.length)) != -1) {
                    buffer.write(data, 0, bytes_read);
                }

                input_stream.close();
                return buffer.toByteArray();
            }
        }

Antworten
Chero Beam
  • Forum-Beiträge: 37

13.09.2015, 13:37:42 via Website

Das ist das was Logcat sagt:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.parse.ParseImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference
at com.appmaker.xxxxxxxxxx.RecipesIdeas.onCreate(RecipesIdeas.java:128)
at android.app.Activity.performCreate(Activity.java:6289)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2760)
            at android.app.ActivityThread.access$900(ActivityThread.java:177)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5944)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

13.09.2015, 17:49:58 via App

In Zeile 128 deines Codes rufst du anscheined setImageBitmap() auf dem imgPic auf. Das imgPic ist aber null. Entweder hast du nicht findViewById gemacht oder findViewById konnte kein View mit dieser id finden -> Ist in deinem Layout dieses View mit dieser Id drin?

— geändert am 13.09.2015, 17:50:22

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Chero Beam
  • Forum-Beiträge: 37

18.09.2015, 17:49:35 via Website

Hi Sven, ja in meinem layout ist dieses view drinne aber das ist nicht das problem! Das Problem was ich habe ist das ich es nicht hinbekomme die listview in meinem adapter einzubauen und da die listview nicht in meinem adapter definiert ist bekomm ich null!!!
Kannst du mir helfen die listview in meinem adapter zu implementieren? Kennst du dich mit so etwas aus??? Because i dont get it!!! :(

Bitte schau mal nach diesem Link, da hab ich das Thema mit meinem Adapter gepostet! https://www.nextpit.de/forum/668568/brauche-dringend-hilfe-implementieren-von-listview-in-adapter

— geändert am 18.09.2015, 18:13:00

Antworten