Нет такого файла или каталога для установки и получения массива строк - PullRequest
0 голосов
/ 20 февраля 2012

как вы видите, я пытаюсь установить массив String и получить его в Android, он не дает мне такой файл / каталог, я добавил разрешение в mainfist для использования внешнего хранилища

попробовал его на моем устройстве Android и эмуляторес той же ошибкой

иногда выдает "не удается создать исключение нулевого указателя активности"

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv= (TextView) findViewById(R.id.ee);
        String[] descs = {
                "Java T-shirt",
                "Java Mug",
                "Duke Juggling Dolls",
                "Java Pin",
                "Java Key Chain"
            };            

        saveArray(descs);

        String[] s =loadArray();

        tv.setText(s[2]); 
}
public void saveArray(String[] output_veld) {

       try {

            File sdCard = Environment.getExternalStorageDirectory();                
            File directory = new File(sdCard.getAbsolutePath() + "/MyFiles");                
            directory.mkdirs();

            File file = new File(directory,"textfile.txt");                
            FileOutputStream fos = new FileOutputStream(file);

            ObjectOutputStream out = new ObjectOutputStream(fos);
            out.writeObject(output_veld);
            out.flush();
            out.close();
        }
        catch (IOException e) {
            System.out.println(e); 
        }
}    
public String[] loadArray() {

         try {
             File sdCard = Environment.getExternalStorageDirectory();

             File directory = new File(sdCard.getAbsolutePath() + "/MyFiles");
             File file = new File(directory +"textfile.txt");
             FileInputStream fis = new FileInputStream(file);

             ObjectInputStream in = new ObjectInputStream(fis);
             String[] gelezen_veld = (String[])in.readObject();
             in.close();

             return gelezen_veld;
         }
         catch (Exception e) {
             System.out.println(e);
         }
         return null;
}

logcat:

02-17 17:34:07.884: E/AndroidRuntime(1533): FATAL EXCEPTION: main
02-17 17:34:07.884: E/AndroidRuntime(1533): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.one/com.test.one.TestActivity}: java.lang.NullPointerException
02-17 17:34:07.884: E/AndroidRuntime(1533):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at android.os.Looper.loop(Looper.java:123)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at java.lang.reflect.Method.invokeNative(Native Method)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at java.lang.reflect.Method.invoke(Method.java:521)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at dalvik.system.NativeStart.main(Native Method)
02-17 17:34:07.884: E/AndroidRuntime(1533): Caused by: java.lang.NullPointerException
02-17 17:34:07.884: E/AndroidRuntime(1533):     at com.test.one.TestActivity.onCreate(TestActivity.java:50)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-17 17:34:07.884: E/AndroidRuntime(1533):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

Ответы [ 2 ]

0 голосов
/ 20 февраля 2012

Это создает файл из двух строк и добавляет косую черту между частями

File file = new File(directory,"textfile.txt");     

Это создает файл из одной строки и не добавляет косую черту

File file = new File(directory +"textfile.txt");
0 голосов
/ 20 февраля 2012

Я думаю, вы пропустили создание там текстового файла. Попробуйте это:

public void saveArray(String[] output_veld) {

       try {

            File sdCard = Environment.getExternalStorageDirectory();                
            File directory = new File(sdCard.getAbsolutePath() + "/MyFiles"); 
            if(!directory.exist())               
                directory.mkdirs();

            String path=sdCard.getAbsolutePath()+"/MyFiles/";

            String filePath= path + "textfile.txt";

            if(!new File(filePath).exists())
              new File(filePath).createNewFile();

            FileOutputStream fos = new FileOutputStream(filePath);

            ObjectOutputStream out = new ObjectOutputStream(fos);
            out.writeObject(output_veld);
            out.flush();
            out.close();
        }
        catch (IOException e) {
            System.out.println(e); 
        }
}   

РЕДАКТИРОВАТЬ:

Вы должны использовать

 File file = new File(directory +"/textfile.txt");

в вашем методе loadArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...