Android:使用getCacheDir()的NullPointerException

时间:2015-02-26 02:22:19

标签: android caching nullpointerexception

我正在构建一个应用程序,允许用户录制和上传< 30秒的声音,并且我试图找到一种方法将声音暂时存储在设备上(这样用户就可以检查它等,直到它上传到服务器。我认为使用getCacheDir()作为文件路径应该是解决方案,但无论我尝试什么形式,我都会继续获得NPE。其他人遇到了这个问题并在SO上询问了它,但从未真正得到满意的答案或解决方法。有关如何修复它或替代临时存储方法的任何建议?我的应用程序具有Android 2.0的最低SDK,因此我无法使用getExternalCacheDir()。

对于上下文,这是我的声明:

Context context;    
private String fileName = context.getCacheDir().getAbsolutePath() + "/wavesaudio/" + "temp" +".3gp";

用法:

public void startRecording() {
        mRecorder = new MediaRecorder();
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mRecorder.setOutputFile(fileName);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recordTime = 0;

播放的类似用法。我得到的错误消息说它是NPE并指向fileName字符串声明的确切行。

谢谢!

2 个答案:

答案 0 :(得分:0)

您在为其分配值之前尝试使用context

您应该在Activity.onCreate()方法中对filename进行分配,例如:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    context = this; // "context" may not be needed

    // Note: you don't need to use "context" here, since the Activity is itself a Context.
    fileName = getCacheDir().getAbsolutePath() + "/wavesaudio/" + "temp" +".3gp";

    // Rest of your onCreate() code ...
}

答案 1 :(得分:0)

您必须在活动的onCreate()中指定您的fileName。

public class MainActivity extends Activity {
  private String fileName;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    fileName = getApplicationContext().getCacheDir().getAbsolutePath() + "/wavesaudio/" + "temp" +".3gp";