2013-01-23 106 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文件夾中上傳。

感謝您的意見。