-1

現在のアクティビティ以外のクラスからメソッドを機能させようとしています。この場合、メソッドがアクティビティと同じクラスにあるが呼び出されるたびに NullPointerException が発生する場合、トーストを使用して問題なく動作するバックアップ メカニズムがあります。

これらは、メイン アクティビティの重要な行です。

Backup bckp;
private Context context = Main.this;
bckp.copyBackup(backupdir, backupdirfile, database, context);

および呼び出されたメソッド:

public void copyBackup(final String backupdir,
        final String target, final String source, final Context context) {
    final File sdcard = Environment.getExternalStorageDirectory();
    if (sdcard.canWrite()) {
        InputStream input = null;
        try {
            input = new FileInputStream(source);
        } catch (FileNotFoundException e) {
            Toast.makeText(context, "There was an error finding the database", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }

        File dir = new File (backupdir);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        OutputStream output = null;
        try {
            output = new FileOutputStream(target);
        } catch (FileNotFoundException e) {
            Toast.makeText(context, "There was an error creating the backup", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }

        byte[] buffer = new byte[1024];
        int length;
        try {
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
        } catch (IOException e) {
            Toast.makeText(context, "There was an error copying the database", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }

        try {
            output.flush();
            output.close();
            input.close();
        } catch (IOException e) {
            Toast.makeText(context, "There was an error ending the copy", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    } else {
        Toast.makeText(context, "No SD card found", Toast.LENGTH_SHORT).show();
    }
}

すべてが1つのクラスにある場合に機能するのに、別のクラスにある場合は機能しない理由は私にはわかりません...助けてくれてありがとう!

編集:

05-08 14:13:24.935: E/AndroidRuntime(636): FATAL EXCEPTION: main
05-08 14:13:24.935: E/AndroidRuntime(636): java.lang.NullPointerException
05-08 14:13:24.935: E/AndroidRuntime(636):  at maturaarbeit.nicola_pfister.marks.Main$9$1.onClick(Main.java:271)
05-08 14:13:24.935: E/AndroidRuntime(636):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
05-08 14:13:24.935: E/AndroidRuntime(636):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 14:13:24.935: E/AndroidRuntime(636):  at android.os.Looper.loop(Looper.java:137)
05-08 14:13:24.935: E/AndroidRuntime(636):  at android.app.ActivityThread.main(ActivityThread.java:4745)
05-08 14:13:24.935: E/AndroidRuntime(636):  at java.lang.reflect.Method.invokeNative(Native Method)
05-08 14:13:24.935: E/AndroidRuntime(636):  at java.lang.reflect.Method.invoke(Method.java:511)
05-08 14:13:24.935: E/AndroidRuntime(636):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-08 14:13:24.935: E/AndroidRuntime(636):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-08 14:13:24.935: E/AndroidRuntime(636):  at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

2

初期化していないbckpのでnull、関数を呼び出そうとしたときです。あなたcontextは元気です

Backup bckp;

成功する

Backup bckp = new Backup();  // send parameters if your constructor takes them
private Context context = Main.this;
bckp.copyBackup(backupdir, backupdirfile, database, context);
于 2013-05-08T14:18:32.893 に答える