Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 05.06.2019
Сообщений: 6
1

Ошибка при работе с потоками ввода-вывода в Android Studio

05.06.2019, 11:58. Показов 2582. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Только начала работать в Android Studio. Просмотрела несколько видеоуроков по первоначальной настройке AS. Вроде все хорошо, работа с переходами, textView и т.д. и т.п. Но столкнулась с проблемой при работе с потоками ввода-вывода.
Задача была максимально простой. Сохранение в файл и считывание из него. Были перепробованы куча способов

Вот сама функция сохранения (мне хотя бы с ней разобраться). При разработке в Idea ошибку не била. А так ошибка в первой же строчке.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public Boolean saveInFile(String textSave) throws IOException{
 
        try {
            FileOutputStream fileOutputStream = openFileOutput("example.txt", MODE_PRIVATE);
            fileOutputStream.write(textSave.getBytes());
            fileOutputStream.close();
 
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
вот код ошибки

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.testworkwithfile, PID: 12895
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.FileOutputStream android.content.Context.openFileOutput(java.lang.String, int)' on a null object reference
        at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:192)
        at com.example.testworkwithfile.workWithFiles.WorkWithFiles.saveInFile(WorkWithFiles.java:17)
        at com.example.testworkwithfile.MainActivity$1.onClick(MainActivity.java:46)
        at android.view.View.performClick(View.java:5637)
        at android.view.View$PerformClick.run(View.java:22429)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Потом залезла в файлы библиотеки io и увидела, что в них очень много ошибок (то есть, например, подчеркивает красным многие методы и строки "import").

Все делала по этим видеоурокам
https://www.youtube.com/watch?... l4&index=2

https://www.youtube.com/watch?... x=74&t=11s

Заранее спасибо за помощь!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2019, 11:58
Ответы с готовыми решениями:

Ошибка при работе с потоками ввода (вывода) в файл (из файла)
Изучаю перегрузку операторов ввода/вывода с файлом и без. Вылетает такая ошибка при отработанном...

Ошибка при работе Android Studio
Вот такая ошибка выходит после запуска Android Studio 1.3.1 И почему не нажимается Run в...

Ошибка ввода-вывода 103 при работе с текстовым файлом
При использовании статичного имени внешнего файла, к примеру "test0", код работает, файл создаётся...

(Android studio, java) Ошибка при импорте библиотеки cannot resolve symbol android studio
Вот библиотека https://github.com/mik3y/usb-serial-for-android. Устанавливал так, File -> New ->...

11
106 / 82 / 15
Регистрация: 07.06.2011
Сообщений: 584
Записей в блоге: 2
05.06.2019, 12:33 2
Покажите фрагмент ContextWrapper.java, 192 строку

Вот это вам должно помочь, инициировать context
0
0 / 0 / 0
Регистрация: 05.06.2019
Сообщений: 6
05.06.2019, 12:49  [ТС] 3
Вот код ContextWrapper.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    /** @hide */
    @Override
    public void reloadSharedPreferences() {
        mBase.reloadSharedPreferences();
    }
 
    @Override
    public boolean moveSharedPreferencesFrom(Context sourceContext, String name) {
        return mBase.moveSharedPreferencesFrom(sourceContext, name);
    } // вот здесь 195 строчка
 
    @Override
    public boolean deleteSharedPreferences(String name) {
        return mBase.deleteSharedPreferences(name);
    }
И, кстати, насчет Вашего ответа. Он не поможет, так как в стандартных java-библиотеках (List, File, ComtextWrapper) имеются ошибки. Где-то ошибки на "import"-ы, где-то просто в самом методе ошибка. А их быть просто не должно. К примеру в файле ContextWrapper.java 112 ошибок. Мб что-то надо указать в файлах-конфигах? Просто я сегодня только начала с этим знакомиться. Мб что-то в файлах .gradle надо указать?
0
106 / 82 / 15
Регистрация: 07.06.2011
Сообщений: 584
Записей в блоге: 2
05.06.2019, 13:09 4
скиньте скрин
0
0 / 0 / 0
Регистрация: 05.06.2019
Сообщений: 6
05.06.2019, 13:18  [ТС] 5
Прикрепляю. Скрины файла ContextWrapper.java
Миниатюры
Ошибка при работе с потоками ввода-вывода в Android Studio   Ошибка при работе с потоками ввода-вывода в Android Studio  
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
05.06.2019, 15:27 6
Цитата Сообщение от alexan0308 Посмотреть сообщение
Покажите фрагмент ContextWrapper.java, 192 строку
это не ее класс, если что

Цитата Сообщение от marina_dashenka Посмотреть сообщение
112 ошибок
нет там ошибок, просто не нужно туда лезть, открывать их и так далее

что бы решить проблему надо видеть весь код - что и откуда вызывается,
я про этот метод saveInFile()
0
0 / 0 / 0
Регистрация: 05.06.2019
Сообщений: 6
05.06.2019, 16:07  [ТС] 7
Все. Поняла. Скидываю класс MainActivity, созданный по-умолчанию AS с методом onCreate, и класс WorkWithFiles, где и реализован метод saveInFile. А вызывается он в listener onClickListenerForButtonSave

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.example.testworkwithfile.workWithFiles;
import android.support.v7.app.AppCompatActivity;
 
import java.io.*;
import java.io.IOException;
 
public class WorkWithFiles extends AppCompatActivity {
 
    public Boolean saveInFile(String textSave) throws IOException{
 
        try {
            FileOutputStream fileOutputStream = openFileOutput("example.txt", MODE_PRIVATE);
            fileOutputStream.write(textSave.getBytes());
            fileOutputStream.close();
 
            return true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
 
}

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.example.testworkwithfile;
 
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
import com.example.testworkwithfile.workWithFiles.WorkWithFiles;
 
import java.io.IOException;
 
public class MainActivity extends AppCompatActivity {
 
    private Button buttonSave;
    private EditText textSave;
    private TextView boolResult;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        buttonSave = findViewById(R.id.b_save);
        textSave = findViewById(R.id.et_save);
        boolResult = findViewById(R.id.tv_bool_result);
 
        //listener для кнопки сохранения в файл
        View.OnClickListener onClickListenerForButtonSave = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                WorkWithFiles workWithFiles = new WorkWithFiles();
                Boolean res = null;
                try {
                    res = workWithFiles.saveInFile(textSave.getText().toString());
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if(!res){
                    boolResult.setText("Ошибка");
                    boolResult.setTextColor(Color.parseColor(String.valueOf(R.color.false_result)));
                }
                else {
                    boolResult.setText("Успешно");
                    boolResult.setTextColor(Color.parseColor(String.valueOf(R.color.true_result)));
                }
            }
        };
        buttonSave.setOnClickListener(onClickListenerForButtonSave);
 
    }
}
Думаю, что тут все максимально аскетично. И на всякий скину AndroidManifest.xml, потому что говорят, что возможно в нем проблема
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.testworkwithfile">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_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"
        tools:ignore="GoogleAppIndexingWarning">
        <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>
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
05.06.2019, 16:33 8
Цитата Сообщение от marina_dashenka Посмотреть сообщение
class WorkWithFiles extends AppCompatActivity
Это в уроках так говорят делать?
0
0 / 0 / 0
Регистрация: 05.06.2019
Сообщений: 6
05.06.2019, 16:47  [ТС] 9
Конкретно это - нет. Я смотрела по видеоруокам как производить начальную настройку AS. А остальное - просто перерыла все форумы и пыталась исправить ошибку. И на одном из них был указан данный способ. Если не экстендить данный класс, то метод openFileOutput не работает. Если имеются еще какие-то замечания по написанию кода, то выслушаю обязательно. Лишь бы вы помогли еще и с текущей проблемой
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
05.06.2019, 17:15 10
Лучший ответ Сообщение было отмечено marina_dashenka как решение

Решение

Просто взять этот метод saveInFile и положить его MainActivity.

Добавлено через 45 секунд
И научиться смотреть на вкладку logcat, там пишутся ошибки и причины их возникновения.
1
0 / 0 / 0
Регистрация: 05.06.2019
Сообщений: 6
05.06.2019, 17:38  [ТС] 11
Это помогло. Спасибо. А не могли ли Вы объяснить почему?
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
05.06.2019, 19:15 12
Ну если коротко, то там что-то непонятное, что не может работать в принципе.
Чтобы вынести что-то в другой класс, не нужно наследоваться от активити, контекст можно передать через конструктор класса (если очень надо).
0
05.06.2019, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2019, 19:15
Помогаю со студенческими работами здесь

Ошибка при работе с потоками
Есть две функции: одна закидывает изображения в вектор, а вторая забирает их оттуда и обрабатывает....

Ошибка при работе с потоками
Пишу программу которая меняет обои рабочего стола , и вот код программы using System; using...

Ошибка при работе с потоками
void __fastcall TForm1::FormCreate(TObject *Sender) { haha *Thr = new haha(true);...

Ошибка при работе с потоками
Проблема в том что , сколько я указал потоков столько программа проходит строк . Типо : 50...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru