我正在创建一个创建新文件的应用程序,当我命名这样的文件时没有问题:
private String FILENAME = "myFilename";
但是当我使用方法命名文件时,编译器直接跳到这一行:
String lineSep = System.getProperty("line.separator");
然后到我的班级声明:
public class AddUser extends Activity
应用程序崩溃。
这是日志文件所说的内容:
12-03 16:26:12.814: E/AndroidRuntime(20307): FATAL EXCEPTION: main
12-03 16:26:12.814: E/AndroidRuntime(20307): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.app/com.myapp.app.ProfileSaved}: java.lang.NullPointerException
12-03 16:26:12.814: E/AndroidRuntime(20307): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
12-03 16:26:12.814: E/AndroidRuntime(20307): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-03 16:26:12.814: E/AndroidRuntime(20307): at android.app.ActivityThread.access$600(ActivityThread.java:130)
这是我的文件命名方法:
int firstArray;
int nextArray;
private String fileNamer(){
File dataDirectory = Environment.getDataDirectory();
File fileDir = new File(dataDirectory, "data/com.myapp.app/files");
String[] filenameArray = fileDir.list();
Arrays.sort(filenameArray);
if (filenameArray.length == 0){
return "0";
}
if (filenameArray.length == 2500){
return "too_many_items";
}
if (!filenameArray[0].equals("0")){
return "0";
}
int arrayLength = filenameArray.length;
int i;
for(i=0; i<arrayLength-1;){
firstArray = Integer.parseInt(filenameArray[i]);
nextArray = Integer.parseInt(filenameArray[i+1]);
if (firstArray+1 == nextArray){
i++;
}
}
return Integer.toString(nextArray+1);
}
该方法似乎工作正常,但我无法理解为什么它会影响程序的其余部分,因为它只是返回一个字符串?
答案 0 :(得分:1)
if (filenameArray.length == 2500){
应为if (filenameArray.length >= 2500){
。但更重要的是,
for(i=0; i<arrayLength-1;){
firstArray = Integer.parseInt(filenameArray[i]);
nextArray = Integer.parseInt(filenameArray[i+1]);
将访问不存在的filenameArray[arrayLength]
。我想你的意思是
for(i=0; i<arrayLength-2;){
你还应该检查数组中至少有两个元素。这对我来说听起来不对。
答案 1 :(得分:0)
好的家伙感谢您的投入。
我相信我终于做对了。首先,这个方法确实是错误的,但这不是真正的问题,一个好的答案会是这样的:
“String
和调用返回分配给变量的String
的方法之间存在差异,因为为了在另一个类中使用调用的String
,可能需要将变量设置为static
。这就是为什么String
正在运行而'方法调用'String
没有。“
关于代码中的错误以防万一有人感兴趣,
中的if
if (firstArray+1 == nextArray)
需要else
以防文件名之间有空格,例如1, 3, 4
,因此下一个文件名为2
。
另一个错误是我将文件名比作Strings
所以当我对它们进行排序时,它们被排序为1, 10, 2, 3, 4, 5, 6, 7, 8, 9
。
我使用的解决方案是将零添加到文件名的开头,如0001, 0002,
,依此类推。