1
votes

i am trying to upload selected image to dropbox from gallery.I am being stuck up from days because i am getting unable to resume Runtime Exception

My onActivityResult() is

 if(requestCode == PIC_UPLOAD) {

    System.out.println("Reahced 1");

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

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

    System.out.println("Reahced 2");

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
   String filePath = cursor.getString(columnIndex); 
   cursor.close();


    Uri imageUri=data.getData();
   List<NameValuePair> params = new ArrayList<NameValuePair>(1); 
   params.add(new  BasicNameValuePair("image", imageUri.getPath()));
    System.out.println("Reahced 3");


    /* String outPath = imageUri.toString(); File outFile = new
       File(outPath); FileInputStream fis = new FileInputStream(outFile);
       mDBApi.putFileOverwriteRequest("/Pic1", fis, outFile.length(),null);
    */

   Uri photoUri = data.getData(); 
   String[] proj = {MediaStore.Images.Media.DATA };
   Cursor actualimagecursor = managedQuery(photoUri, proj,null, null, null);
   int actual_image_column_index =
   actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
   actualimagecursor.moveToFirst();
   String img_path =actualimagecursor.getString(actual_image_column_index);

   System.out.println("Image location: " + img_path);

   System.out.println("Reached 1"); 

   uploadDropbox(img_path);
}

And uploadDropbox body is:

    private void uploadDropbox(String URL) {
    // TODO Auto-generated method stub
        AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET);
        AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE);
        mDBApi = new DropboxAPI<AndroidAuthSession>(session);

        System.out.println(URL);

        System.out.println("Reahced 4");

        mDBApi.getSession().startAuthentication(MyCamActivity.this);

        System.out.println("Reahced 5");

//      AccessTokenPair access = getStoredKeys();
//      mDBApi.getSession().setAccessTokenPair(access);

        FileInputStream inputStream = null;
        try {
            File file = new File(URL.toString());
            inputStream = new FileInputStream(file);
            com.dropbox.client2.DropboxAPI.Entry newEntry = mDBApi.putFile("/testing.txt", inputStream, file.length(), null, null);
            Log.i("DbExampleLog", "The uploaded file's rev is: " + newEntry.rev);
        } catch (DropboxUnlinkedException e) {
            // User has unlinked, ask them to link again here.
            Log.e("DbExampleLog", "User has unlinked.");
        } catch (DropboxException e) {
            Log.e("DbExampleLog", "Something went wrong while uploading.");
        } catch (FileNotFoundException e) {
            Log.e("DbExampleLog", "File not found.");
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {}
            }
        }
    }

onResume method body:

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

    if (mDBApi.getSession().authenticationSuccessful()) {
      try {
        // MANDATORY call to complete auth.
        // Sets the access token on the session
        mDBApi.getSession().finishAuthentication();

        AccessTokenPair tokens = mDBApi.getSession().getAccessTokenPair();

        // Provide your own storeKeys to persist the access token pair
        // A typical way to store tokens is using SharedPreferences
        storeKeys(tokens.key, tokens.secret);
        } catch (IllegalStateException e) {
          Log.i("DbAuthLog", "Error authenticating", e);
        }
    }

}

private AccessTokenPair getStoredKeys() { // TODO Auto-generated method stub

return  mDBApi.getSession().getAccessTokenPair();

}

private void storeKeys(String key, String secret) { // TODO Auto-generated method stub

    // Save the access key for later
    SharedPreferences prefs = getSharedPreferences(ACCOUNT_PREFS_NAME, 0);
    Editor edit = prefs.edit();
    edit.putString(ACCESS_KEY_NAME, key);
    edit.putString(ACCESS_SECRET_NAME, secret);
    edit.commit();
}

AndroidManifest.xml

    <activity
  android:name="com.dropbox.client2.android.AuthActivity"
  android:launchMode="singleTask"
  android:configChanges="orientation|keyboard">
  <intent-filter>
    <!-- Change this to be db- followed by your app key -->
    <data android:scheme="db-MyKey" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE"/>
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>


    <activity
        android:name=".MyCamActivity"
        android:label="@string/app_name" 
        android:screenOrientation="nosensor" android:configChanges="keyboardHidden|orientation"
        android:uiOptions="splitActionBarWhenNarrow"
        android:clearTaskOnLaunch="true"
        >

Error**:

01-23 14:58:00.855: D/dalvikvm(4238): GC_FOR_ALLOC freed 104K, 2% free 12729K/12935K, paused 16ms
01-23 14:58:00.894: I/System.out(4238): Its not null
01-23 14:58:00.901: D/AndroidRuntime(4238): Shutting down VM
01-23 14:58:00.901: W/dalvikvm(4238): threadid=1: thread exiting with uncaught exception (group=0x40a511f8)
01-23 14:58:00.901: E/AndroidRuntime(4238): FATAL EXCEPTION: main
01-23 14:58:00.901: E/AndroidRuntime(4238): java.lang.RuntimeException: Unable to resume activity {cam.pack/cam.pack.MyCamActivity}: java.lang.NullPointerException
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2444)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.os.Looper.loop(Looper.java:137)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.app.ActivityThread.main(ActivityThread.java:4424)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at java.lang.reflect.Method.invokeNative(Native Method)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at java.lang.reflect.Method.invoke(Method.java:511)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at dalvik.system.NativeStart.main(Native Method)
01-23 14:58:00.901: E/AndroidRuntime(4238): Caused by: java.lang.NullPointerException
01-23 14:58:00.901: E/AndroidRuntime(4238):     at cam.pack.MyCamActivity.onResume(MyCamActivity.java:571)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.app.Activity.performResume(Activity.java:4539)
01-23 14:58:00.901: E/AndroidRuntime(4238):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434)
01-23 14:58:00.901: E/AndroidRuntime(4238):     ... 12 more
1
you have a NullPointerException in line 571 of MyCamActivitythepoosh
@thepoosh So, what i have to do that, why this problem is arisen? Is this because of having multiple activity, if it is so really have both because this is like addon in my app. I need both of them. Please tell me what i have to do to make it run.Madhur Rampal
this is the time to start debugging, try going step by step to this line of code and see what variables are called in it, and why are they null and not with a valuethepoosh
if (mDBApi.getSession().authenticationSuccessful()) { This line generating NullPointerException, but i dont know why?Madhur Rampal
mDBApi.getSession() is returning null, either mDBApi is null, or there is no sessionthepoosh

1 Answers

0
votes

I have made a mistake, i have put dropbox session in my own defined function uploadDropbox(), and thats a an error causes NullPointerException, because if i print mDBApi so its NULL. Its not been intialized. We have to put these lines in onCreate() and now its working, images are uploading in CameraUploads folder in Dropbox.

Thanks for comments.