Cordova无法使用.getFilesDir()获取文件目录

时间:2015-06-09 09:50:33

标签: android cordova cordova-plugins

我正在尝试使用以下代码在我的cordova插件中工作。

private void loadPatch() throws IOException {

    //File dir = this.cordova.getActivity().getApplicationContext().getFilesDir(); //this throws same error
    //File dir = cordova.getActivity().getFilesDir(); //throws same error
    File dir = cordova.getActivity().getApplicationContext().getFilesDir();

    IoUtils.extractZipResource(cordova.getActivity().getResources().openRawResource(R.raw.patch),
            dir, true);
    File patchFile = new File(dir, "microphone.pd");
    PdBase.openPatch(patchFile.getAbsolutePath());
    PdAudio.startAudio(this.cordova.getActivity());

}

然而,当我运行应用程序时,我在

下面的行上得到了nullPointExceptionError
File dir = cordova.getActivity().getApplicationContext().getFilesDir();

这是堆栈

Thread [<1> main] (Suspended (exception NullPointerException))  
    <VM does not provide monitor information>   
    Libpd.loadPatch() line: 83  
    Libpd.access$2(Libpd) line: 79  
    Libpd$1.run() line: 54  
    Handler.handleCallback(Message) line: 733   
    Handler.dispatchMessage(Message) line: 95   
    Looper.loop() line: 136 
    ActivityThread.main(String[]) line: 5333    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 515  
    ZygoteInit$MethodAndArgsCaller.run() line: 895  
    ZygoteInit.main(String[]) line: 711 
    NativeStart.main(String[]) line: not available [native method]  

我正在尝试为libPD库创建一个与android一起工作的插件,因此我需要以上工作来进行核心工作以便继续进行。

1 个答案:

答案 0 :(得分:0)

我找到了答案,我想我会发布它,以便将来对某人有用。

当我逐行调试代码时,

cordova.getActivity()。getResources()在loadPatch方法中设置为null(不知道如何)。因此,我所做的是将applicationContext作为参数传递给loadPatch方法。

private void loadPatch(Context ctx) throws IOException { 
   //CODE HERE
}

我从类的execute方法调用loadPatch方法,其中cordova.getActivity()。getApplicationContext()不为null,因此我调用了loadPatch方法,如下所示。

AppContext = this.cordova.getActivity().getApplicationContext();
this.loadPatch(this.AppContext);