2

ここで何かが足りませんか?私のコードは、Dropboxにアップロードするために、このコードに基づいてNullPointerExceptionをキックしています。

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変数は「java.io.FileInputStream@44ecd668」を出力します。これについては少し混乱していますが、ファイル変数のsystemoutには正しいパスとファイル名が表示されます。nullPointerExceptionは、私には意味のないnewEntry変数の設定から発生しているようです。Eclipseは、コードが構文的に正しいことを示しています。このドロップボックスのがらくたは私を殺しています。

@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に「Filenotfound」を生成しますが、これはもちろんcatch(FileNotFoundException)から来ています。ただし、NullPointerExceptionは発生しません。コードの上部(caseステートメント)に表示されている場合、このコードはコンテキストメニューをクリックした後に実行されています。

_____________________________________更新されたコード__________________________________________

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

だから私はこれにコードを更新しました。パスをハードコーディングするかどうかは関係ないようです。私がそうしても、EntryupEntry行がNullPointerExceptionを引き起こしています。私は途方に暮れています。これを引き起こしているものは何も見えません。

________________________________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をロードします-認証が行われる場所です-これにより、認証後にmain.javaに戻ります。
  3. ユーザーはアップロードしたいファイルに移動します
  4. ユーザーが上記のファイルを長押しすると、コンテキストメニューが表示されます。これはMain.javaでも処理されます。
  5. コンテキストメニューには、[ドロップボックスに送信]項目が含まれています。クリックすると、ここで調べているコードを含むcaseステートメントを指します。それがNullPointerExceptionを生成しているものです。上記のように、722行目が問題のある行です。その行は

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

    _____________________________________________解決_______________________________________

これを解決するために私がやったことは次のとおりです。

以前は、2つのファイル間で作業していました。私はMain.javaにDropboxauthcodeを持ち、Dropboxfileuploadactivity.javaに実際のアップロードコードを持っていました。何を試しても、アップロードをこのように機能させることができませんでした。毎回NullPointerExceptionを受け取りました。私は最初にそれを変数のせいにし、それからDropboxメソッドで使用することができませんでした。何日もそれを理解しようとした後、結局、認証コードとアップロードコードを一緒にMain.javaに移動することが私の問題を解決しました。これ以上のNullPointerExceptionsはありません。奇妙ですが、うまくいきました。変数は正常に機能します。

4

1 に答える 1

2

これを解決するために私がやったことは次のとおりです。

以前は、2つのファイル間で作業していました。私はMain.javaにDropboxauthcodeを持ち、Dropboxfileuploadactivity.javaに実際のアップロードコードを持っていました。何を試しても、アップロードをこのように機能させることができませんでした。毎回NullPointerExceptionを受け取りました。私は最初にそれを変数のせいにし、それからDropboxメソッドで使用することができませんでした。何日もそれを理解しようとした後、結局、認証コードとアップロードコードを一緒にMain.javaに移動することが私の問題を解決しました。これ以上のNullPointerExceptionsはありません。奇妙ですが、うまくいきました。変数は正常に機能します。

于 2013-02-16T21:11:15.400 に答える