-2

我正在制作一个创建新文件的应用程序,当我这样命名文件时没有问题:

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);
}

该方法似乎工作正常,但我不明白为什么它会影响程序的其余部分,因为它所做的只是返回一个字符串?

4

2 回答 2

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;){

并且您还应该检查数组中是否至少有两个元素。这听起来不对,对我来说。

于 2012-12-03T22:14:22.880 回答
0

好的,谢谢您的意见。

我相信我终于做对了。首先,该方法确实有问题,但这并不是真正的问题,一个好的答案应该是这样的:

String“a和调用返回分配给变量的 a 的方法之间存在区别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,等等。

于 2012-12-05T04:44:32.817 回答