MainActivity saya terlihat seperti berikut:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Button b = (Button) findViewById(R.id.button);
       b.setOnClickListener(new View.OnClickListener() {
           @Override
            public void onClick(View v) {
                CalManager c = new CalManager(MainActivity.this);
                try{c.addEvent();}
                catch(IOException e){
                   Log.d("mychecks", "failed");
                }
            }
        });
    }
}

Selanjutnya, xml saya adalah sebagai berikut:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.user.test">
    <uses-permission android:name="android.permission.WRITE_CALENDAR"/>
    <uses-permission 
      android:name="android.permission.WRITE_EXTERNAL_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">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

Dan saya punya masalah dengan kode berikut di kelas CalManager:

public class CalManager {
    Context ctx;
    String dir;

    public CalManager(Context c){
        this.ctx = c;
        dir = ctx.getFilesDir().toString();
    }

    /** Directory to store user credentials for this application. */
    private static final java.io.File DATA_STORE_DIR = new java.io.File(
            dir , ".credentials/test");

    /** Global instance of the {@link FileDataStoreFactory}. */
    private static FileDataStoreFactory DATA_STORE_FACTORY;

    static {
        try {
            DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    ...
}

Itu

DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);

Pernyataan melempar kesalahan berikut:

10-11 09:26:22.939 2374-2374/com.example.user.test W/System.err: java.io.IOException: tidak dapat membuat direktori: /.credentials/test

Ada ide tentang cara memperbaikinya?

Terima kasih sebelumnya!

-1
Zimbaa 10 November 2017, 12:31

1 menjawab

Jawaban Terbaik

Membuat direktori baru dengan new java.io.File()

Berhenti di sana. Membuat instance File tidak membuat file di disk.

Anda membutuhkan DATA_STORE_DIR.mkdirs() di suatu tempat.

Tapi Anda punya masalah lain. dir adalah anggota instance yang diinisialisasi tetapi dia konstruktor, jadi Anda tidak dapat menggunakannya dalam kode statis. Anda harus menghapus static dari File ini dan blok penginisialisasi anonim.

2
user207421 10 November 2017, 18:05