private double [] readFile (InputStream _input) throws IOException {
DataInputStream audioInput = new DataInputStream (new BufferedInputStream (_input));
int musicLength = (int)(audioInput.available()/2.0);
double [] music = new double [musicLength];
int i = 0;
while (i < audioInput.available() && i < musicLength) {
music[i] = (double)audioInput.readShort();
i++;
}
audioInput.close();
return music;
}
此代码是我正在处理的较大项目的一部分,涉及DSP技术来比较两个音频信号。该代码应该返回一个包含音频文件中原始数据的double [](InputStream _input是一个参数,表示对getResources().openRawResource(R.raw.audio_file)
的调用结果,并且不为null)。但是,当我运行代码时,我得到一个空指针异常。堆栈跟踪的相关部分如下:空指针例外与Android中的输入流
03-12 22:24:57.818: W/System.err(8931): java.lang.NullPointerException
03-12 22:24:57.818: W/System.err(8931): at android.content.res.AssetManager.getAssetRemainingLength(Native Method)
03-12 22:24:57.818: W/System.err(8931): at android.content.res.AssetManager.access$300(AssetManager.java:36)
03-12 22:24:57.818: W/System.err(8931): at android.content.res.AssetManager$AssetInputStream.available(AssetManager.java:552)
03-12 22:24:57.818: W/System.err(8931): at com.ashwin.iSleep.AudioRecorder.readFile(AudioRecorder.java:88)
根据堆栈跟踪,确切的错误是在调用audioInput.available()
。从我所知道的问题来看,本地方法是AssetManager.getAssetRemainingLength()
。任何帮助表示赞赏!
Pl。检查你在哪里调用这个函数。如果你得到空指针,请不要调用这个函数.... – Vinay 2012-03-13 05:46:38