Как вызвать Activity методом startActivityForResult не из другого Activity

491
04 сентября 2017, 05:18

Здравствуйте, у меня есть класс логики (Test), из которого необходимо вызвать другое Activity методом startActivityForResult (Или каким-то другим образом получить информацию из запускаемого Activity).

public class Test {
private ArrayList<Question> questions;
private Context context;
public Test(Context context, ArrayList<Question> questions) {
    this.questions = questions;
    this.context = context;
}
public Test(Context context, Question... questions) {
    for (Question question : questions) {
        this.questions.add(question);
    }
    this.context = context;
}
public void addQuestion(Question question) {
    questions.add(question);
}
public double testing() throws Exception {
    Question[] array = new Question[questions.size()];
    array = questions.toArray(array);
    Main.shake(array);
    int result = 0;
    for (Question question : array) {
        Intent intent = new Intent("com.gopea_system.phisickgame.game.test");
        intent.putExtra("isTest", true);
        intent.putExtra("com.gopea.QuestionsID", question.getID());
        //context.startActivityForResult(intent,1); // it's doesn't work???
        context.startActivity(intent);
        int getScore = 0;
        if (getScore != -1000) {
            result += getScore;
        } else {
            throw new Exception("Incorrect return to Test.testing");
        }
        Log.d("Gopea"," now result = " + result);
    }
    return result / (array.length * 100);
}
}

В методе testing() необходимо запустить Activity и узнать значение (результат), которое должно быть возвращено в класс Test. Как это можно сделать?

Answer 1
    Intent intent = new Intent(context, MainActivity.class);
    ((Activity) context).startActivityForResult(intent, resultCode);
Answer 2

Для запуска активности вам нужно в метод testing() или в конструктор класа Test нужно передать текущий контекст. Для получение значения с другой активности имеет смысл использовать startActivityForResult.Пример:

Запускаем нужную активность SecondActivity

public static final REQUEST_CODE = 1; 
public static final REQUEST_ID = "some_id";
Intent intent = new Intent(context, SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);

В активности которую запустили нужно вернуть интент.

Intent intent = new Intent();
intent.putExtra(REQUEST_ID, some_variable);
setResult(RESULT_OK, intent);
finish();

И принимаем результат с помощью onActivityResult

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (data == null) {return;}
    String text = data.getStringExtra(REQUEST_ID);
  }

Для примера получал текст но интент имеет методы для получения и других типов.Удачи!

READ ALSO
Raspberry Pi 3 model B + Java + RC522

Raspberry Pi 3 model B + Java + RC522

Здравствуйте, есть проблема: работать с RFID RC522 с Java на Raspberry pi 3 Model BПроблема заключается в поиске библиотеки, гугл результатов не дал

558
вероятности в java

вероятности в java

Как в java работать с вероятностями? Допустим, у меня есть переменная int x, которая с вероятностью 50% равна 1; c вероятностью 30% равна 2; и c вероятностью...

539
Многопоточный чат на сокетах

Многопоточный чат на сокетах

Пытаюсь реализовать графический многопоточный чат на сокетах с использованием JavaFX, но не могу понять, как происходить обмен сообщениями...

561
Class&lt;List&lt;T&gt;&gt; != Class&lt;T&gt; или как в Unirest массив дессериализовать

Class<List<T>> != Class<T> или как в Unirest массив дессериализовать

Есть у меня вот такой обобщённый метод для отправки запроса и получения сразу десериализованного объекта

401