Я продолжаю получать «неверный заголовок потока: EFBFBDEF» (Android, десериализация) - PullRequest
0 голосов
/ 08 января 2019

Итак, я сериализовал ArrayList на эмуляторе и скопировал файл на свой телефон (в /data/data/user/0/com.dondo.djee_buss/files), и когда я запускаю приложение в эмулятор работает нормально, но когда я запускаю его на телефоне, он не читает. Мой поток поврежден, это говорит. То же самое происходит, когда я вставляю содержимое сериализованного файла в строку и при запуске сначала проверяет, существует ли файл с таким именем на устройстве, если нет, приложение должно создать файл и записать содержимое ранее определенная строка в файле.

Итак, существует ArrayList с именем serLin (SERialized LINes), в котором я храню данные из своей базы данных. Процесс сериализации проходит нормально, но если я хочу прочитать из файла (linije.txt) на эмуляторе, он работает без проблем. Тогда я решил проверить это на своем телефоне. Я создал файл .apk, установил его на свой телефон, и первое, что я заметил, это то, что мой файл, который должен содержать сериализованный объект, отсутствует. Он существует на эмуляторе, но не устанавливается вместе с .apk (это также проблема, если кто-то знает, как установить файл и приложение, это было бы хорошо), и когда я пытаюсь его запустить, я получил FileNotFoundException в ответ. Я хотел решить одну проблему в то время и хотел вручную перенести файл с моего компьютера (где находится мой эмулятор) на мой телефон, и, конечно же, пропало FileNotFoundException, вместо этого я получил IOException. Итак, я попытался скопировать содержимое из «linije.txt» в строку, из которой я бы создал свой собственный файл и десериализовать объект из этого, но возникла та же проблема.

Это фрагмент кода, который читает из файла

FileInputStream fos = null;
    try {
        fos =openFileInput("linije.txt");
        ObjectInputStream oos = new ObjectInputStream(fos); //Line 166
        serLin = (List<Linija>) oos.readObject();
    } catch (FileNotFoundException e) {
        System.out.println("noFileM8");
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("IO's wrong");
    } catch (ClassNotFoundException e) {
        System.out.println("Where's the class?");
    }

(теперь удален) кусок кода, который использовался для записи в файл

queue = Volley.newRequestQueue(this);
    JsonArrayRequest getRequest = new JsonArrayRequest(Request.Method.GET, "http://192.168.100.11:9090/linija/findAll", null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {

            try {
                serLin = map.readValue(response.toString(), new TypeReference<List<Linija>>() {
                });
                FileOutputStream sof = openFileOutput("linije.txt",MODE_PRIVATE);
                ObjectOutputStream soo = new ObjectOutputStream(sof);
                soo.writeObject(serLin);
                Log.d("Mudja", "onResponse: ");

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

    }, null);
    queue.add(getRequest);

Это ошибка, которая была напечатана (Вскоре после этого возникла исключительная ситуация NullPointerException, поскольку я использую serLin.get, а serLin имеет значение null, поскольку я не могу прочитать из файла).

W/System.err: java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:808)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:302)
    at com.dondo.djee_buss.buslines.Linija44.onCreate(Linija44.java:166)
    at android.app.Activity.performCreate(Activity.java:7383)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3250)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3405)
    at android.app.ActivityThread.-wrap12(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1994)
    at android.os.Handler.dispatchMessage(Handler.java:108)
    at android.os.Looper.loop(Looper.java:166)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7523)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
I/System.out: IO's wrong
...