我的读/写代码有什么问题

时间:2015-07-06 08:25:23

标签: java android

我试图做一个平均值并保存最后添加到平均值的数字,但我的代码总是"返回"我在logcat:

07-06 08:14:44.646    9981-9981/com.example.emilio.notification E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.emilio.notification, PID: 9981
java.lang.NumberFormatException: Invalid double: ""
        at java.lang.StringToReal.invalidReal(StringToReal.java:63)
        at java.lang.StringToReal.parseDouble(StringToReal.java:267)
        at java.lang.Double.parseDouble(Double.java:301)
        at com.example.emilio.notification.MainActivity.stackmyArray(MainActivity.java:207)
        at com.example.emilio.notification.MainActivity.writeMyArray(MainActivity.java:192)
        at com.example.emilio.notification.MainActivity.access$100(MainActivity.java:47)
        at com.example.emilio.notification.MainActivity$2.onClick(MainActivity.java:109)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

这是我的代码:(写入/读取文件是最后一个数字的代码,数组的写入/读取是平均值。我开始尝试做一个数组,但我无法追加,所以如果你的问题有一个数组,而不是我的"逻辑",它的确定。堆栈代码是增量,所以如果我再添加一个数字到平均值,它将做正确的除法)

private void writeToFile(String data) {
    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("estrela.txt", Context.MODE_PRIVATE));
        outputStreamWriter.write(data);
        outputStreamWriter.close();

    } catch (IOException e) {
        Log.e("Exception", "File write failed: " + e.toString());
    }
}



private String readFromFile() {

    String ret = "";

    try {
        InputStream inputStream = openFileInput("estrela.txt");

        if (inputStream != null) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ((receiveString = bufferedReader.readLine()) != null) {
                stringBuilder.append(receiveString);
            }

            inputStream.close();
            ret = stringBuilder.toString();
        }
    } catch (FileNotFoundException e) {
        Log.e("login activity", "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e("login activity", "Can not read file: " + e.toString());
    }

    return ret;
}
private void writeMyArray(double rate){
    //PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("arraymedia.txt", true)));
    //.println(rate);
    Double ratex2 = rate + Double.parseDouble(readMyArray());

    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("test3.txt", Context.MODE_PRIVATE));
        if(readMyArray() == "")
        {
            outputStreamWriter.write(0);
        }
        outputStreamWriter.write(Double.toString(ratex2));
        outputStreamWriter.close();
        stackmyArray();

    } catch (IOException e) {
        Log.e("Exception", "File write failed: " + e.toString());
    }


}
private void stackmyArray()
{
    if(readMyArray() != "") {
        try {
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("test3count.txt", Context.MODE_PRIVATE));
            if(stackread() == "")
            {outputStreamWriter.write(0);}
            Double stack = Double.parseDouble(stackread()) + 1;
            outputStreamWriter.write(Double.toString(stack));
            outputStreamWriter.close();

        } catch (IOException e) {
            Log.e("Exception", "File write failed: " + e.toString());
        }
    }
    else
    {

        try {
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("test3count.txt", Context.MODE_PRIVATE));
            outputStreamWriter.write(Integer.toString(1));
            outputStreamWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
}
private String readMyArray(){
    String ret = "";

    try {
        InputStream inputStream = openFileInput("test3.txt");


        if (inputStream != null) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ((receiveString = bufferedReader.readLine()) != null) {
                stringBuilder.append(receiveString);
            }

            inputStream.close();
            ret = stringBuilder.toString();
        }
    } catch (FileNotFoundException e) {
        Log.e("login activity", "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e("login activity", "Can not read file: " + e.toString());
    }

    return ret;
}

private String stackread(){
    String ret = "";

    try {
        InputStream inputStream = openFileInput("test3count.txt");

            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ((receiveString = bufferedReader.readLine()) != null) {
                stringBuilder.append(receiveString);
            }

            inputStream.close();
            ret = stringBuilder.toString();
    } catch (FileNotFoundException e) {
        Log.e("login activity", "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e("login activity", "Can not read file: " + e.toString());
    }

    return ret;
}

通过Keppil回答,我现在有了这个logcat:

07-06 08:38:25.223  18958-18958/com.example.emilio.notification E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.emilio.notification, PID: 18958
java.lang.NumberFormatException: Invalid int: "��"
        at java.lang.Integer.invalidInt(Integer.java:138)
        at java.lang.Integer.parse(Integer.java:410)
        at java.lang.Integer.parseInt(Integer.java:367)
        at java.lang.Integer.parseInt(Integer.java:334)
        at com.example.emilio.notification.MainActivity$2.onClick(MainActivity.java:114)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

1 个答案:

答案 0 :(得分:0)

您在转换前检查String是否为"",但您仍然尝试转换它:

if(stackread() == "")
{outputStreamWriter.write(0);}
Double stack = Double.parseDouble(stackread()) + 1;
outputStreamWriter.write(Double.toString(stack));

此外,两次调用stackread()可能会有问题,而您使用==来比较字符串。将其更改为:

String stackRead = stackread();
if (stackRead.equals("")) {
    outputStreamWriter.write(0);
} else {
    Double stack = Double.parseDouble(stackRead) + 1;
    outputStreamWriter.write(Double.toString(stack));
}
相关问题