2013-01-23 52 views
1

我试图上传所选图像从gallery.I到收存箱,因为我得到无法恢复运行时异常如何将图像上传到Dropbox?

我onActivityResult()我是从天卡住了是

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); 
} 

而uploadDropbox体是:

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方法体:

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); 
     } 
    } 

} 

私人AccessTokenPair getStoredKeys(){// TODO自动生成方法存根

return mDBApi.getSession().getAccessTokenPair(); 

}

私人无效storeKeys(String键,字符串秘密){// TODO汽车式生成方法存根

// 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" 
     > 

错误**

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 
+0

你在'MyCamActivity'的第571行有'NullPointerException' – thepoosh

+0

@thepoosh所以,我必须这么做,为什么会出现这个问题?这是因为有多个活动,如果它真的有两个,因为这就像我的应用程序中的插件。我需要他们两个。请告诉我我要做些什么才能使它运行。 –

+1

这是开始调试的时候,试着一步一步去这行代码,看看里面调用了什么变量,为什么它们是'null'而没有值 – thepoosh

回答

0

我犯了一个错误,我已经把Dropbox的会议在我自己定义的函数uploadDropbox(),并且那是一个错误导致NullPointerException,因为如果我打印mDBApi所以它的NULL。它没有被初始化。我们必须将这些行放在onCreate()中,现在正在工作,图像将在Dropbox的CameraUploads文件夹中上传。

感谢您的意见。