Android问题 - 无法检查文件是否存在

时间:2016-12-06 22:23:09

标签: java android file

我已经看到了几种使用File.exists()方法检查文件是否存在的方法。我的问题是我使用这种方法而且它正在抛出java.lang.NullPointerException。我尝试过调试,每次都崩溃,因为它是我应用中的第一个检查之一。

这是我在运行测试时遇到的错误:

java.lang.NullPointerException
    at com.example.user.project.MainActivity.isExistingUser(MainActivity.java:36)
    at com.example.user.project.ExampleUnitTest.isNewUser(ExampleUnitTest.java:21)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)


Process finished with exit code -1

此代码在应用启动时运行

public class MainActivity extends AppCompatActivity {
    File passFile;
    private Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setUpContext();
        setupFile(context);
        //Checks if the password already exists
        if (!isExistingUser()){
            //If the user hasn't used the app before, takes them to the makeID activity
            Intent createIntent = new Intent(this, makeId.class);
            startActivity(createIntent);
        }

    } 

此功能是应用程序加载时的功能,它检查用户是否存在,如果不存在则推送它们创建登录。

private void setUpContext() {
    context = getApplicationContext();
}

此函数使用应用程序上下文设置上下文对象。

private void setupFile(Context c) {
    passFile = new File(c.getFilesDir(),"pass.txt");
}

此函数使用上下文获取存储应用程序的目录,并为文件添加.txt扩展名。

public boolean isExistingUser() {
    return passFile.exists();
}

此功能设置为查看passFile是否存在,以检查用户是否已经运行过应用程序。这是从上面给我例外的函数。

这是我的第一个Android应用,所以任何帮助都表示赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

passFilenull,因此您使用NullPointerException崩溃。

您指出在passFile初始化setupFile()。虽然如此,但您可能无法通过ExampleUnitTest及其isNewUser()方法调用该方法。