Чрезвычайно странное исключение NullPointerException при чтении в файле Android

Вот код:

Thread clientThread = new Thread() {
            @Override
            public void run() {
                try {
                    client = new Client();
                    quest = client.readFile();
                    Log.v("Client string", quest);

                    //File file = new File(myContext.getFilesDir(), "questionnaire.xml");
                    //BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                    //bw.write(quest);
                    File tempFile = File.createTempFile("questionnaire", ".xml");
                    FileOutputStream fout = new FileOutputStream(tempFile);
                    PrintStream out = new PrintStream(fout);
                    out.println(quest);//InputStream stream = new ByteArrayInputStream(quest.getBytes("UTF-8"));
                    //getResources().op
                    try {
                    Serializer serializer = new Persister();
                    responseToQuestionnaire = serializer.read(ResponseToQuestionnaire.class, tempFile);
                    }
                    catch(Exception e) {}
                    Log.v("Let's seeeeee",responseToQuestionnaire.getQuestionnaireTemplate().toString());

                } catch (Exception e1) {
                    e1.printStackTrace();
                }
//              try {
//                  OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
//                          openFileOutput(currentQuestionnaire.getName(),
//                                  Context.MODE_PRIVATE));
//                  outputStreamWriter.write(client.readFile());
//                  outputStreamWriter.close();
//              } catch (IOException e) {
//                  Log.e("Exception", "File write failed: " + e.toString());
//              }
            }
        };
        clientThread.start();

Код генерирует исключение Null Pointer, даже если quest представляет собой строку полной длины, которая прекрасно печатается в журнале. Я пробовал несколько способов сохранения файла, но SimpleXML не сериализует строку... только файлы XML.


person Maciej Musialek    schedule 19.03.2014    source источник
comment
пожалуйста, добавьте логкэт   -  person Mr. Borad    schedule 19.03.2014
comment
pastebin.com/ZzT81vis   -  person Maciej Musialek    schedule 19.03.2014
comment
Какая строка № 159 находится в вашем BasicQuestionActivity.java   -  person Mr. Borad    schedule 19.03.2014
comment
Log.v(Давайте посмотрим, ответ на вопросник.getQuestionnaireTemplate().toString());   -  person Maciej Musialek    schedule 19.03.2014
comment
вы получаете какое-то исключение, и поэтому ваша переменная responseToQuestionnaire имеет значение null, поэтому перед этой строкой поместите e.printStackTrace(); тогда вы получите правильную ошибку.   -  person Mr. Borad    schedule 19.03.2014
comment
Я знаю, что это происходит. Я думаю, что происходит проблема с записью файла со строкой. Строка не полностью сохраняется с помощью FileWriter и вообще не сохраняется с помощью BufferedWriter... Я не знаю, как это интерпретировать.   -  person Maciej Musialek    schedule 19.03.2014
comment
Почти уверен, что getQuestionnaireTemplate() является нулевой частью, поскольку вы устанавливаете только responseToQuestionnaire (если только он не создан внутри)   -  person Cruceo    schedule 19.03.2014
comment
Это не проблема, поскольку объект должен был быть создан ранее с текстовым файлом, который не сохраняется должным образом.   -  person Maciej Musialek    schedule 19.03.2014
comment
Либо ваш responseToQuestionnaire.getQuestionnaireTemplate() — это null, либо responseToQuestionnaire — это null. Это так просто. Установите точку останова, используйте отладчик, проверьте это. Кстати, вы установили разрешения на чтение/запись во внешнее хранилище внутри вашего AndroidManifest.xml?   -  person Drew    schedule 19.03.2014


Ответы (1)


Буферизованные потоки не обязательно записывают данные до тех пор, пока в этом нет необходимости. Попробуйте закрыть выходной поток перед вызовом метода read().

person Sofi Software LLC    schedule 19.03.2014