Android-студии, как передать контекст из основной активности в другой класс - PullRequest
0 голосов
/ 05 мая 2018

У меня есть эта проблема, как я могу использовать функцию из MainActivity в моем классе Dialog_findname, я должен передать контекст main в строке: vardadienas = main.loadedfile(MainActivity.this);

public class Dialog_findname extends AppCompatDialogFragment {

  private EditText findName;
  private findnameDialogListener listener;
  private List<VDienas> vardadienas = new ArrayList<>();
  private Finder finder = new Finder();
  private MainActivity main = new MainActivity();


  @Override
  public Dialog onCreateDialog(Bundle savedInstanceState) {

    vardadienas = main.loadedfile(MainActivity.this);
  }

И это моя функция MainActivity, которую я хочу вызвать в другом классе:

public List<VDienas> loadedfile(Context ctxt){
    FileInputStream fis = null;
    try {
        fis = openFileInput(FILE_NAME);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader reader = new BufferedReader(isr);
        String line;
        reader.readLine();

        while ((line = reader.readLine()) != null){
            VDienas VissGads = new VDienas();
            String[] tokens = line.split(";");


            VissGads.setDatums(tokens[0]);
            VissGads.setMenesis(Integer.parseInt(tokens[1]));
            VissGads.setDiena(Integer.parseInt(tokens[2]));

            for (int i = 0; i < Integer.parseInt(tokens[3]); i++) {
                VissGads.setVards(tokens[i + 4]);

            }
            vardadienas.add(VissGads);
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if (fis != null){
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return vardadienas;

}

Я пытался найти похожие вопросы, но все еще не мог понять, как :(

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Сначала , вы не можете создать действие со следующим:

private MainActivity main = new MainActivity();

его следует начинать с Context.startActivity(), подробнее об этом можно прочитать на Документация по активности .

Второй , у вас есть следующий метод:

public List<VDienas> loadedfile(Context ctxt) {
  ...
}

так, вы не можете назвать это следующим фрагментом внутри фрагмента:

 vardadienas = main.loadedfile(MainActivity.this);

потому что MainActivity.this ссылается на экземпляр MainActivity, но ваш фрагмент не является экземпляром активности.

Вам нужно вызвать метод со следующим:

 vardadienas = main.loadedfile(getContext());

где getContext() относится к Деятельности, где прикреплен Фрагмент.


Вам лучше переместить loadedfile(Context ctxt) в его собственный класс как в класс утилит, чтобы вы могли повторно использовать метод из любого другого класса. Вы можете сделать что-то вроде этого:

public class FileUtils {
  private FileUtils() {} // this prevent class being instantiate.

  // we need to make it static so it can be accessed without
  // creating an instance of the class.
  // of course, you can use singleton. But it's another topic
  public static List<VDienas> loadedfile(Context ctxt) {
    ...
  }
}

тогда вы можете использовать метод с чем-то вроде этого:

vardadienas = FileUtils.loadedfile(getContext());
0 голосов
/ 05 мая 2018

Я думаю, вы должны вызывать эту функцию на вашем MainActivity.

vardadienas = main.loadedfile(this);

или проверьте MainActivity.class

...