Внутреннее хранилище объектов Android - PullRequest
2 голосов
/ 05 июля 2011

Я пытаюсь сохранить ArrayLists (ArrayOne, ArrayTwo и ArrayThree) EditText во внутреннем хранилище. Как прокомментировано, это ясно показывает, что он пытается сохранить, но я никогда не получаю еще один тост после этого. Любая помощь по поводу того, почему не отображается «Сохранить завершено» или любая ошибка приветствуется.

public void save(Context c)
{
    String fileName;
    Toast.makeText(this, "Attempting Save", Toast.LENGTH_SHORT).show();//THIS SHOWS
    if(semester.getText().toString().length() == 0)
    {
        Toast.makeText(c, "Please enter a filename", Toast.LENGTH_SHORT).show();
    }
    else
    {
        fileName = "test.dat";
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        try 
        {
            fos = this.openFileOutput(fileName, Context.MODE_PRIVATE);
            oos = new ObjectOutputStream(fos);
            oos.writeObject(ArrayOne);
            oos.writeObject(ArrayTwo);
            oos.writeObject(ArrayThree);
            Toast.makeText(c, "Save Completed", Toast.LENGTH_SHORT).show(); //THIS NEVER SHOWS
        } 
        catch (FileNotFoundException e) 
        {
            Toast.makeText(c, "Could not find " + fileName + " to save.", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        } 
        catch (IOException e)
        {
            e.printStackTrace();
        } 
        finally 
        {
            try 
            {
                if (oos != null)
                    oos.close();
                if (fos != null)
                    fos.close();
            } 
            catch (Exception e)
            { /* do nothing */ }
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 07 июля 2011

Проблема в том, что класс EditText не сериализуем

Если вы отлаживаете и ставите точку останова на printStackTrace и изучаете IOException, он скажет вам, что

catch (IOException e
{
     e.printStackTrace();
} 

Классыдолжны использовать «реализует Сериализуемый» для того, чтобы они были записаны как объекты, которых нет у EditText.

Вы не можете расширить класс и добавить сериализуемый тег, потому что базовый класс все равно будет выдавать исключение.

Я предлагаю вам либо сериализовать данные через ваш собственный класс, либо сохранить все, что вы пытаетесь сделать, с помощью другого метода.

0 голосов
/ 07 июля 2011

Если после «Попытки сохранить» ничего не отображается, вы получаете исключение в этом блоке

 catch (IOException e)
         {
             e.printStackTrace();
         } 

И вы не просматриваете его ни в одном тосте. Также вы можете быть здесь, ничего не делая, за исключением:

 catch (Exception e)
        { /* do nothing */ }

Вместо поджаривания ваших сообщений ... попробуйте использовать LogCat для отладки, он прост в использовании, и вам не нужно вставлять тост-код в ваш код. Скажи мне, как идут дела.

0 голосов
/ 07 июля 2011

Я думаю, что ошибка в том, что вы проглотили существ в вашем первом блоке Try, потому что вы ловите только FileNotFound и IOException - просто для отладки вы можете перехватить универсальное Exception и распечатать трассировку стека.

Если это также помогает, это то, что я делаю:

java.io.File file = new java.io.File("/sdcard/mystorage/ArrayOne.bin");
ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
out.writeObject(obj);
out.close();

Лучший

-serkan

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