» »

[android] java.lang.RuntimeException

[android] java.lang.RuntimeException

piki12 ::

Dober večer vsem,
rad bi vpašal zakaj se mi naredi napaka ko z naslednjo kodo naložim recimo z dropboxa ali pa z nekega določenega placa, oz če slikam sliko mi javi za ta del napako. Če pa hočem naloadati sliko z galerije mi pa zadeva dela odlično. Sedaj me zanima zakaj, je ta del tako občutljiv..

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) return;

    switch (requestCode) {
        case PICK_FROM_CAMERA:

            this.picturePath = picturePath;

            Intent intent1 = new Intent(getBaseContext(), AndroidPaint.class);
            startActivity(intent1);
            break;
        case PICK_FROM_FILE:
            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]);
            String picturePath = cursor.getString(columnIndex);
            this.picturePath = picturePath;
            cursor.close();
            Intent intent = new Intent(getBaseContext(), AndroidPaint.class);
            startActivity(intent);

            //  doCrop();

            break;


    }
}


Javi mi naslednjo napako
  java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=3, result=-1, data=Intent { dat=file:///mnt/sdcard/Android/data/com.dropbox.android/files/scratch/app.png typ=image/png }} to activity {com.slikar.slika/slikar.Main.FirstPage}: java.lang.NullPointerException
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3103)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3146)
    at android.app.ActivityThread.access$1100(ActivityThread.java:132)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1187)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4575)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.NullPointerException
    at slikar.Main.FirstPage.onActivityResult(FirstPage.java:396)
    at android.app.Activity.dispatchActivityResult(Activity.java:4649)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3099)
    ... 11 more




lp,
ppiki12

user4683 ::

katera izmed vrstic zgoraj je vrstica 396? v tej imas namrec nekaj null

piki12 ::

V vrstici Cursor cursor po nase 16 vrstica

MrStein ::

getContentResolver() vrne null.
Zakaj, pa bo kdo drugi vedel...
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

piki12 ::

in zakaj pa to vrne, sedaj me zanima,..
Osebno nimam pojma ker enostavno mi ni jasno, pri navadni galeriji dela odlično, pri dropboxu pa pri pick from file pa ne..Sem pregledal na stacku že vse variante pa mi še ni jasno..

MrStein ::

Za vsak primer tja dodaj kontrolo, če je res null, in če je izpiše kaj podatkov, vsaj toliko, da se potrdi, da je res null.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Mavrik ::

Če samo prebereš dokumentacijo klicev, ki jih delaš, boš takoj opazil kakšno ogromno neumnost počneš.
The truth is rarely pure and never simple.

piki12 ::

ja in kakšna neumnost je to ?

Mavrik ::

Razloži mi, kaj točno to dela oz. zakaj si to napisal:

           String[] filePathColumn = {MediaStore.Images.Media.DATA};
           Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            this.picturePath = picturePath;
The truth is rarely pure and never simple.

piki12 ::

rabim da path vun dobi ? Sem pa koperal z exampla ..na netu..

Zgodovina sprememb…

  • spremenilo: piki12 ()

piki12 ::

Mah ne morš verjet zdej sem spremenu pa mi ne dela galerija ostalo pa dela:
/external/images/media/333: open failed: ENOENT
Problem pa je da te poti ne najde, pri ostalih dveh ko dobi celo pot pa najde :O..
Spremenjena koda
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK) return;


        switch (requestCode) {
            case PICK_FROM_CAMERA:
                Intent intent = new Intent(getBaseContext(), AndroidPaint.class);
                startActivity(intent);

               picturePath= mImageCaptureUri.getPath().toString() ;
          //      doCrop();

                break;

            case PICK_FROM_FILE:
                mImageCaptureUri = data.getData();
                Intent intent1 = new Intent(getBaseContext(), AndroidPaint.class);
                startActivity(intent1);

                picturePath= mImageCaptureUri.getPath().toString();
          //      doCrop();

                break;
        }

    }

kr?en ::

Kaj pa ce bi ti kaksen breakpoint postavil in zagnal debug mode?

piki12 ::

from dropbox: /mnt/sdcard/Android/data/com.dropbox.android/files/scratch/appSetpint.png
from galerija: /external/images/media/333
from camera:/mnt/sdcard/tmp_avatar_1382875588475.jpg
from pick from file /sdcard/DCIM/Camera/IMG_20131015_103458.jpg

Pobral sem z vseh 4 primerov sedaj ne vem kaj je narobe tole no :( samo galerija ne dela, ker dobim res čudn link ampak ne vem zakaj, ma kdo idejo kaj je narobe ..

Mavrik ::

Ja, dobiš URI ki kaže na Content provider in ne datoteko.

No, vidim da si končno pogruntal da iskanje poti do datoteke v Dropboxu v sistemski galeriji ni pametno ;)

ENOENT dobiš če probaš pisati v datoteko, ki ni tvoja. Če misliš pisati v datoteke, potem jasno ne moreš tega delati direkt v datoteko iz druge aplikacije.

Anyway, kar ti dela probleme je tole:
Uri je samo naslov, ki ni nujno pot do datoteke. Druga aplikacija ti lahko da karkoli, dokler se da naslov razreši v veljavno vsebino na napravi. Zato zunanjo vsebino odpiraš s ContentResolverjem, ki poskrbi, da dobiš z Urija veljaven InputStream.

Torej sliko naložiš z Urija takole:

InputStream imageInputStream = getContentResolver().openInputStream(uri);
Bitmap image = BitmapFactory.decodeStream(imageInputStream);
imageInputStream.close();


Jasno lahko tule uporabiš še več opcij, oz. če rabiš vsebino kot datoteko, jo pač skopiraš v datoteko z InputStreama v svoj cache direktorij.
The truth is rarely pure and never simple.

piki12 ::

Veš kako js nardim :D
tole kar si ti napisal, shranim, preberem vendar to traja :( ..


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Android] Bluetooth aplikacija

Oddelek: Programiranje
51014 (877) marjan_h
»

[Android] Splošno

Oddelek: Programiranje
351939 (1069) piki12
»

android črta

Oddelek: Programiranje
412272 (1543) g333kk
»

[android] vstavljanje slike

Oddelek: Programiranje
71145 (1042) messi
»

[android] crash

Oddelek: Programiranje
61265 (1074) messi

Več podobnih tem