尝试写入.json时应用崩溃

时间:2020-07-26 12:23:42

标签: android json streamwriter fileoutputstream writetofile

已编辑

所以我试图编写一个写入.Json的代码,但我的应用程序不断崩溃。

我遵循serval教程中的操作方法,但没有帮助。

我的代码如下:

AndroidManifest:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name = "android.permission.WRITE_INTERNAL_STORAGE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

MainActivity:

私有静态最终字符串FILE_NAME =“ MyDataSheet.json”;

...

公共字符串chkFile(上下文上下文){ 字符串json = null;

try {
    InputStream is = context.getAssets().open(FILE_NAME);
    int size = is.available();
    byte[] buffer = new byte[size];
    is.read(buffer);
    is.close();
    json = new String(buffer, "UTF-8");
} catch (IOException ex) {
    ex.printStackTrace();
    return null;
}
return json;
}

...

protected  void sdBTN(View v, Context context)
{
    String txt1 = input1.getText().toString();
    String txt2 = input2.toString();
    String txt3 = unput3.toString();

JSONObject object = null;
try {
    object = new JSONObject(chkFile(this));
} catch (JSONException e) {
    e.printStackTrace();
}


try {
    object.put("name", text1);
    object.put("googleSheet", myGoogleSheet);
    object.put("googleScript", myGoogleScript);

} catch (JSONException e) {
    e.printStackTrace();
}
System.out.println(object);

}

我在Assets文件夹中创建了该文件,但该应用仍显示出与我之前关闭.txt相同的关闭结果。

我遵循教程,但没有帮助。

1 个答案:

答案 0 :(得分:1)

您应该检查控制台日志输出,以查看要包含在问题中的实际错误消息。利用Android Logging类。像这样添加日志记录:

import android.util.Log;
...
private static final String TAG = "MyAppName";
Log.i(TAG, "Some info message such as mkdir: "+file);

if (BuildConfig.DEBUG) {
   Log.d(TAG, "Some debug message here");
}

摆脱e.printStackTrace()并使用:

Log.e(TAG, "Failed to save:"+file, e);

从Android Studio启动后,您的应用程序正在运行,并且连接到USB上的设备时,请转到Android Studio的Logcat标签。 Logcat标签允许过滤名称-只需键入“ MyAppName”,然后再次运行测试即可。

您有'file.mkdir();'在chkFile()中引用了FILE_NAME,该文件也传递给openFileOutput(FILE_NAME ...),因此在打开该路径以写入文件之前,您可能已将文件路径创建为目录。