Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
MiniDi
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 4
15.04.2016, 20:45     Использование Context в других классах #1
У меня есть диалоговое окно, в котором я использую список. Требуется считать этот список с документа.

Есть метод 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();
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2016, 20:45     Использование Context в других классах
Посмотрите здесь:

Android Как из Thread в отдельном классе получить context приложения?
Android Fragment and context
AsyncTask должен использовать Context Android
Android Вызов методов Context из статичного контекста
Можно ли так передавать context? Android
Context немного теории Android
Android Аналог context menu
Объект Context Android
Программирование Android. Context Android
Android Context - ошибка
Android Как получить context MainActivity в Service?
Android Ошибка VKSdk.initialize(Context) must be call from Application#onCreate()

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
16.04.2016, 18:37     Использование Context в других классах #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
MainActivity mainact = new MainActivity(); так делать не стоит
получить ссылку на активити из фрагмента проще простого, во фрагменте вызываем getActivity()
чаще всего (но не всегда) когда просят передать ссылку на контекст - можно передавать ссылку на активити
MiniDi
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 4
17.04.2016, 10:18  [ТС]     Использование Context в других классах #3
Паблито, Спасибо, что помогли разобраться с:
Yandex
Объявления
17.04.2016, 10:18     Использование Context в других классах
Ответ Создать тему
Опции темы

Текущее время: 00:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru