Bild von FilePicker / Intent in ein anderes Verzeichnis kopieren

Ich versuche, das von Intent empfangene Bild in ein anderes Verzeichnis zu kopieren. Aber ich kann es noch nicht zum Laufen bringen. Brauchen Sie Hilfe

Meine Logcat:

04-29 14:56:22.778 31620-31620/com.example.krupal.sqlitetest I/Choreographer: Skipped 42 frames!  The application may be doing too much work on its main thread.
04-29 14:56:24.944 31620-31633/com.example.krupal.sqlitetest W/EGL_emulation: eglSurfaceAttrib not implemented
04-29 14:56:24.944 31620-31633/com.example.krupal.sqlitetest W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x7f5170636740, error=EGL_SUCCESS
04-29 14:56:26.370 31620-31633/com.example.krupal.sqlitetest E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f517631a550
04-29 14:56:26.381 31620-31620/com.example.krupal.sqlitetest W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.
04-29 14:56:26.381 31620-31620/com.example.krupal.sqlitetest W/ViewRootImpl: Dropping event due to root view being removed: MotionEvent { action=ACTION_HOVER_ENTER, actionButton=0, id[0]=0, x[0]=322.27295, y[0]=447.5, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=4168947, downTime=4168760, deviceId=0, source=0x1002 }
04-29 14:56:26.381 31620-31620/com.example.krupal.sqlitetest W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.
04-29 14:56:26.381 31620-31620/com.example.krupal.sqlitetest W/ViewRootImpl: Dropping event due to root view being removed: MotionEvent { action=ACTION_HOVER_ENTER, actionButton=0, id[0]=0, x[0]=322.27295, y[0]=447.5, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=4168947, downTime=4168760, deviceId=0, source=0x1002 }
04-29 14:56:26.381 31620-31620/com.example.krupal.sqlitetest W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.
04-29 14:56:26.381 31620-31620/com.example.krupal.sqlitetest W/ViewRootImpl: Dropping event due to root view being removed: MotionEvent { action=ACTION_HOVER_MOVE, actionButton=0, id[0]=0, x[0]=322.27295, y[0]=447.5, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=4168947, downTime=4168760, deviceId=0, source=0x1002 }
04-29 14:56:26.381 31620-31620/com.example.krupal.sqlitetest W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.
04-29 14:56:27.652 31620-31633/com.example.krupal.sqlitetest E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f517631a710
04-29 14:56:29.935 31620-31630/com.example.krupal.sqlitetest I/art: Background sticky concurrent mark sweep GC freed 7247(862KB) AllocSpa,ce objects, 0(0B) LOS objects, 0% free, 10MB/10MB, paused 10.778ms total 53.218ms
04-29 14:56:30.051 31620-31620/com.example.krupal.sqlitetest D/BuildVersion: Build version >=19
04-29 14:56:30.070 31620-31620/com.example.krupal.sqlitetest D/AndroidRuntime: Shutting down VM


                                                                           --------- beginning of crash
04-29 14:56:30.071 31620-31620/com.example.krupal.sqlitetest E/AndroidRuntime: FATAL EXCEPTION: main
                                                                           Process: com.example.krupal.sqlitetest, PID: 31620
                                                                           ** java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.externalstorage.documents/document/primary:Download/2015-09-09.jpg flg=0x1 }} to activity {com.example.krupal.sqlitetest/com.example.krupal.sqlitetest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'char[] java.lang.String.toCharArray()' on a null object reference **
                                                                               at android.app.ActivityThread.deliverResults(ActivityThread.java:3699)
                                                                               at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)
                                                                               at android.app.ActivityThread.-wrap16(ActivityThread.java)
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                               at android.os.Looper.loop(Looper.java:148)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                            Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'char[] java.lang.String.toCharArray()' on a null object reference
                                                                               at java.io.File.fixSlashes(File.java:183)
                                                                               at java.io.File.<init>(File.java:130)
                                                                               at com.example.krupal.sqlitetest.MainActivity.onActivityResult(MainActivity.java:160)
                                                                               at android.app.Activity.dispatchActivityResult(Activity.java:6428)
                                                                               at android.app.ActivityThread.deliverResults(ActivityThread.java:3695)
                                                                               at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 
                                                                               at android.app.ActivityThread.-wrap16(ActivityThread.java) 
                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                               at android.os.Looper.loop(Looper.java:148) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                               at java.lang.reflect.Method.invoke(Native Method) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
04-29 14:56:32.316 31620-31620/com.example.krupal.sqlitetest I/Process: Sending signal. PID: 31620 SIG: 9

Quelle

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        switch (requestCode) {
            case SELECT_PICTURE: {
                Uri selectedImageURI = data.getData();
                if (Build.VERSION.SDK_INT < 19) {
                    String selectedImagePath = getPath(selectedImageURI);
                    Bitmap bitmap = BitmapFactory.decodeFile(selectedImagePath);
                    avatar.setImageBitmap(bitmap);
                    copyImageToInternalStorage(new File(getPath(selectedImageURI)));
                    Log.d("BuildVersion","Build version <19");

                } else {
                    ParcelFileDescriptor parcelFileDescriptor;
                    try {
                        parcelFileDescriptor = getContentResolver().openFileDescriptor(selectedImageURI, "r");
                        FileDescriptor fileDescriptor = null;
                        if (parcelFileDescriptor != null) {
                            fileDescriptor = parcelFileDescriptor.getFileDescriptor();
                        }
                        Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
                        avatar.setImageBitmap(image);
                        Log.d("BuildVersion","Build version >=19");
                        copyImageToInternalStorage(new File(getPath(selectedImageURI)));

                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
                break;
            }
            (everything else)
}

Copy-Methode:

    private void copyImageToInternalStorage(File sourcefile) {
    String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date());
    File folder = getExternalFilesDir("ImageDatabase");
    File file = new File(folder, "IMG_"+timeStamp+".jpg");

    if(!sourcefile.exists()){
        return;
    }
    FileChannel source = null;
    FileChannel dest = null;

    try {
        source = new FileInputStream(sourcefile).getChannel();
        dest = new FileOutputStream(file).getChannel();
        if(source != null && dest != null){
            dest.transferFrom(source,0,source.size());
        }
        if(source != null){
            source.close();
        }
        if(dest != null){
            dest.close();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

GetPath-Methode:

public String getPath(Uri uri) {
    String[] projection = {MediaStore.Images.Media.DATA};

    //  Cursor cursor=managedQuery(uri, projection, null, null, null);
    @SuppressWarnings("deprecation")
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

Aber das gibt mir NullPointerException. Was muss geändert werden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage