Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
MiniDi
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 4
#1

Использование Context в других классах

15.04.2016, 20:45. Просмотров 913. Ответов 2
Метки нет (Все метки)

У меня есть диалоговое окно, в котором я использую список. Требуется считать этот список с документа.

Есть метод changeGroup, где массив с документа будет меняться. Требуется передать этот массив в диалоговое окно DialogGroupSelection. Но при использовании метода group из класса Book требуется передать Context. И тут и есть проблема, я не понимаю, что именно надо передать.

Чтобы я не пробовала всегда одна и та же ошибка:
Attempt to invoke virtual method 'android.content.res.AssetManager android.content.Context.getAssets()' on a null object reference.

При этом, если вызывать метод group в MainActivity в onCreate, то ошибок нет.

MainActivity:
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
public class MainActivity extends AppCompatActivity  {
    DialogFragment dlg;
    Book book = new Book();
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
 
    // Создаем переменную типа Book
    String[] data = book.group(this); // Так работает нормально
 
    dlg = new DialogGroupSelection();
    dlg.show(getFragmentManager(), "dlg");
 
    }
 
public String[] changeGroup(){
   String[] dat = book.group(); // Какой Context передавать сюда?
   return dat;
}
 
public class Book{
    // В переменную записываем имя файла
    String text = "list.xls";
    InputStream fis;
 
    public String[] group(Context myContext){
        try {
            //Открываем нужный документ
            AssetManager myAsset = myContext.getAssets();
            fis = myAsset.open(text);
 
            // Создаем книгу
            Workbook wb = new HSSFWorkbook(fis);
            int number_sheets = wb.getNumberOfSheets()-1;
 
            //Создаем массив из перых ячеек каждого листа
            String[] group = new String[number_sheets];
            for(int count_list = 0; count_list<number_sheets; count_list++) {
                group[count_list] = wb.getSheetAt(count_list).getRow(0).getCell(0).getStringCellValue();
            }
            return group;
        }
        catch (IOException e){e.printStackTrace();}
    }
}
И диалоговое окно DialogGroupSelection. Код:
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
public class DialogGroupSelection extends DialogFragment implements DialogInterface.OnClickListener {
 
MainActivity mainact = new MainActivity();
String[] list = mainact.changeGroup();
//String[] list = mainact.book.group(); Можно ли обращаться напрямую? И какой Context тогда использовать?
int i=1;
public Dialog onCreateDialog(Bundle savedInstanceState) {
 
    AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
    adb.setTitle("Выберите свою группу")
            .setSingleChoiceItems(list, -1, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int item) {
                    Toast.makeText(getActivity(), "Ваша группа: " + list[item], Toast.LENGTH_SHORT).show();
                }
            })
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    // User clicked OK, so save the mSelectedItems results somewhere
                    // or return them to the component that opened the dialog
 
                }
            });
    return adb.create();
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2016, 20:45
Ответы с готовыми решениями:

Fragment and context
Есть шерлокбар. Два таба у него. Каждому табу привязан свой фрагмент...

Context - ошибка
Здравствуйте! Программа должна выводить карту из google. Использую Picasso как...

Объект Context
Проблема такая: Я создаю новый класс в отдельном файле для работыSQLite и в...

Аналог context menu
Всем привет. Я пишу судоку. Проблема в том что при взаимодействии с ячейкой...

Программирование Android. Context
Добрый день! Прошу подсказать, почему в доках...

2
Pablito
2707 / 2154 / 731
Регистрация: 12.05.2014
Сообщений: 7,521
Завершенные тесты: 1
16.04.2016, 18:37 #2
Лучший ответ Сообщение было отмечено MiniDi как решение

Решение

MainActivity mainact = new MainActivity(); так делать не стоит
получить ссылку на активити из фрагмента проще простого, во фрагменте вызываем getActivity()
чаще всего (но не всегда) когда просят передать ссылку на контекст - можно передавать ссылку на активити
1
MiniDi
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 4
17.04.2016, 10:18  [ТС] #3
Паблито, Спасибо, что помогли разобраться с:
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2016, 10:18

Context немного теории
Вообщем нужно мне было запустить из метода своего класса фрагмент. Вообщем как...

Ошибка при смене Context
Доброго времени суток! Делаю простую рисовалку. При попытке смены контекста...

AsyncTask должен использовать Context
Добрый день! Мое приложение должно использовать сетевое соединение,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru