2013-02-12 72 views
2

我在這裏錯過了什麼嗎?我的代碼踢基於這段代碼上傳到Dropbox的NullPointerException。Android - 上傳到Dropbox

File file = new File(mFileMag.getCurrentDir() +"/"+ mSelectedListItem); 
System.out.println(file); 
inputStream = new FileInputStream(file); 
System.out.println(inputStream); 
Entry newEntry = mDBApi.putFile("/" + mSelectedListItem, inputStream, 
     file.length(), null, null); 
System.out.println(newEntry); 

system.out命令的結果看起來沒問題。 inputStream變量輸出「[email protected]」,我有點困惑,但文件變量的systemout顯示正確的路徑和文件名。 nullPointerException似乎來自newEntry變量的設置,這對我來說是毫無意義的。 Eclipse將代碼顯示爲語法正確。這Dropbox垃圾正在殺死我。

@BenHolland - 如果我硬編碼如下的路徑 -

case D_MENU_SEND: 

      // Uploading content. 
      FileInputStream inputStream = null; 
      try { 
       //File file = new File(mFileMag.getCurrentDir() +"/"+ mSelectedListItem); 
       File file = new File("/sdcard0/DCIM/100ANDRO/deploy.json"); 
       System.out.println(file); 
       inputStream = new FileInputStream(file); 
       System.out.println(inputStream); 
       Entry newEntry = mDBApi.putFile("/Dropbox/", inputStream, 
         file.length(), null, null); 
       System.out.println(newEntry); 

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

這僅僅生成的logcat這當然是從捕獲(FileNotFoundException異常)來「文件未找到」。我不過收到NullPointerException。如果您在代碼頂部看到 - case語句 - 此代碼正在點擊上下文菜單後運行。

_____________________________________Updated code__________________________________________

// Uploading content. 
     FileInputStream inputStream = null; 

     File upfile = new File(mFileMag.getCurrentDir() + "/" + mSelectedListItem); 
     try { 
      inputStream = new FileInputStream(upfile); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     System.out.println(upfile); 
     System.out.println(inputStream); 

     try { 
      Entry upEntry = mDBApi.putFile("/test.rar", inputStream,upfile.length(), null, null); 
      System.out.println(upEntry); 
     } catch (DropboxException e) { 
      e.printStackTrace(); 
     } 

所以我已經更新的代碼這一點。我是否對路徑進行硬編碼似乎是無關緊要的。即使我這樣做,Entry upEntry行也會導致NullPointerException。我很茫然。我無法看到任何會導致這種情況的事情。

________________________________Stack從nullPointerException_______________________

02-14 13:28:07.370: W/dalvikvm(311): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
02-14 13:28:07.380: E/AndroidRuntime(311): FATAL EXCEPTION: main 
02-14 13:28:07.380: E/AndroidRuntime(311): java.lang.NullPointerException 
02-14 13:28:07.380: E/AndroidRuntime(311): at com.stavox.zircon.Main.onContextItemSelected(Main.java:722) 
02-14 13:28:07.380: E/AndroidRuntime(311): at android.app.Activity.onMenuItemSelected(Activity.java:2199) 
02-14 13:28:07.380: E/AndroidRuntime(311): at com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback.onMenuItemSelected(PhoneWindow.java:2744) 
02-14 13:28:07.380: E/AndroidRuntime(311): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143) 
02-14 13:28:07.380: E/AndroidRuntime(311): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855) 
02-14 13:28:07.380: E/AndroidRuntime(311): at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:137) 
02-14 13:28:07.380: E/AndroidRuntime(311): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:874) 
02-14 13:28:07.380: E/AndroidRuntime(311): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
02-14 13:28:07.380: E/AndroidRuntime(311): at android.widget.ListView.performItemClick(ListView.java:3382) 
02-14 13:28:07.380: E/AndroidRuntime(311): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696) 
02-14 13:28:07.380: E/AndroidRuntime(311): at android.os.Handler.handleCallback(Handler.java:587) 
02-14 13:28:07.380: E/AndroidRuntime(311): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-14 13:28:07.380: E/AndroidRuntime(311): at android.os.Looper.loop(Looper.java:123) 
02-14 13:28:07.380: E/AndroidRuntime(311): at android.app.ActivityThread.main(ActivityThread.java:4627) 
02-14 13:28:07.380: E/AndroidRuntime(311): at java.lang.reflect.Method.invokeNative(Native Method) 
02-14 13:28:07.380: E/AndroidRuntime(311): at java.lang.reflect.Method.invoke(Method.java:521) 
02-14 13:28:07.380: E/AndroidRuntime(311): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
02-14 13:28:07.380: E/AndroidRuntime(311): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
02-14 13:28:07.380: E/AndroidRuntime(311): at dalvik.system.NativeStart.main(Native Method) 

有當我點擊時發生的堆棧跟蹤追查 「發送到Dropbox的」。我想如果我打破整個過程,可能會讓人更容易幫忙。

  1. 啓動應用的列表視圖 - 它的文件管理器應用程序 - main.java
  2. 用戶點擊菜單上的一個按鈕,啓動保管箱授權 - 按鈕加載DropboxfileuploadActivity.java - 這就是其中AUTH完成 - 這將在auth後將它們返回到main.java。
  3. 用戶導航到他們想要上傳的文件
  4. 用戶長時間點擊該文件並出現上下文菜單 - 這也由Main.java處理。
  5. 上下文菜單包含一個「Send To Dropbox」項目。點擊後,它指向包含我們在這裏查看的代碼的case語句。那是什麼在產生NullPointerException。正如你所看到的,第722行是違規行。這條線是

    Entry upEntry = mDBApi.putFile("/test.rar", inputStream,upfile.length(), null, null); 
    

    _____________________________________________Solution_______________________________________

所以這裏就是我最後做來解決這個問題:

以前我是兩個文件之間的工作。我在Main.java中使用了Dropbox的authcode,並在Dropboxfileuploadactivity.java中使用了實際的上傳代碼。無論我嘗試了什麼,我都無法通過這種方式獲得上傳。我每次都收到一個NullPointerException異常。我最初將它歸咎於變量,並且無法使用Dropbox方法。經過幾天的努力,最終,將認證代碼和上傳代碼一起移動到Main.java是解決了我的問題。不再有NullPointerExceptions。奇怪的,但它的工作。變量工作正常。

+0

你可以打印堆棧跟蹤什麼的?除了瘋狂的猜測之外,你還沒有給任何人提供足夠的信息來真正幫助你。 – 2013-02-13 02:57:13

+0

你可以用硬編碼文件成功執行此操作嗎?這裏是一個例子 - > https://www.dropbox.com/static/developers/dropbox-android-sdk-1.5.3-docs/index.html – 2013-02-13 03:02:36

+0

@BenHolland - 我在底部添加了更多的信息和代碼原來的帖子。 – 2013-02-13 04:08:46

回答

2

因此,繼承人什麼我落得這樣做來解決這個問題:

以前我是兩個文件之間的工作。我在Main.java中使用了Dropbox的authcode,並在Dropboxfileuploadactivity.java中使用了實際的上傳代碼。無論我嘗試了什麼,我都無法通過這種方式獲得上傳。我每次都收到一個NullPointerException異常。我最初將它歸咎於變量,並且無法使用Dropbox方法。經過幾天的努力,最終,將認證代碼和上傳代碼一起移動到Main.java是解決了我的問題。不再有NullPointerExceptions。奇怪的,但它的工作。變量工作正常。