我已经看到了几种使用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应用,所以任何帮助都表示赞赏。感谢。
答案 0 :(得分:0)
passFile
为null
,因此您使用NullPointerException
崩溃。
您指出在passFile
初始化setupFile()
。虽然如此,但您可能无法通过ExampleUnitTest
及其isNewUser()
方法调用该方法。