Как отправить значения из одного действия в другое расширенное действие в Android?

Я занимаюсь разработкой приложения, в котором у меня есть общее действие, то есть BaseActivity, я распространяю его на все остальные действия в моем приложении. Я запускаю несколько AsyncTask в BaseActivity для отражения во всех других действиях. Мой запрос мне нужен, чтобы передать значения этой BaseActivity из одного из моих действий, скажем MainActivity

Я пытался Класс, Интерфейс концепций, но не работает для меня. Подскажите, как этого добиться. Если понадобится какой-либо из моих ссылочных кодов, прокомментируйте их, я опубликую их.

РЕДАКТИРОВАНИЕ

Мне нужно передать это значение в BaseActivity. Я не могу использовать Intent, потому что я перехожу к другому действию, скажем MainActivity2

MainActivity Это мой код AsyncTask

public class AsyncHttpTask extends AsyncTask<String, Void, Integer> {

    @Override

    protected Integer doInBackground(String... params) {

        Integer result = 0;

        try {

            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse httpResponse = httpclient.execute(new HttpGet(params[0]));
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                String response = streamToStringCount(httpResponse.getEntity().getContent());
                parseResultCount(response);
                result = 1;
            } else {
                result = 0;
            }
        } catch (Exception e) {

            e.printStackTrace();
        }

        return result;
    }

    @Override

    protected void onPostExecute(Integer result) {

        //  isRefreshing = false;


        //layout.setRefreshing(false);

        super.onPostExecute(result);

    }
}


String streamToStringCount(InputStream stream) throws IOException {

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
    String line;
    String result = "";
    while ((line = bufferedReader.readLine()) != null) {

        result += line;
    }
    if (null != stream) {

        stream.close();
    }
    return result;
}


private void parseResultCount(String result) {
    Detail_Item item;
    try {
        JSONObject posts = new JSONObject(result);


        //rstatus1=posts.optString("count");
        countValue=posts.optInt("count");
        countValue1=countValue;
        Log.i("countvalue", String.valueOf(countValue));

    }

    catch (JSONException e) {

        e.printStackTrace();

    }
}

5 ответов

Сохраните значения в SharedPreferences и извлеките их из любого действия в вашем приложении.

В вашей AsyncTask определить

public interface ResultListener {
    void onResultReady(Integer result);
}

создать конструктор, который принимает параметр ResultListener

private ResultListener mRl = null;
public AsyncHttpTask (ResultListener rl) {
    mRl=rl;
}

в postExecute (он работает в главном потоке, вы знаете) слушатель вызова

 protected void onPostExecute(Integer result) {
       super.onPostExecute(result);
       if (mRl!=null)
          mRl.onResultReady(result);
 }

Теперь, если у вас есть ссылка на какое-то действие, которое реализует ResultListener, которому нужно передать результат, вы запускаете задачу следующим образом:

AsyncHttpTask.ResultListener myActivity ;
...
(new AsyncHttpTask(myActivity)).execute(myParameters);

Ваш вопрос теперь сводится к тому, как ваши действия / фрагменты запускаются и координируются, чтобы вы могли получить надлежащее myActivity ссылка в нужном месте.

Вы можете достичь этого, определив public static, так как все экземпляры этого или подкласса будут совместно использовать его. Это действительно ужасное решение, которое я не рекомендую. Лучше использовать Extras

Intent intent = new Intent (context, SecondActivity.class); intent.putExtra ("Ключ", Значение); startActivity(намерение)

дополнительную информацию см. в документе https://developer.android.com/guide/components/intents-filters.html

Насколько я понимаю, вы хотите передать некоторое значение из MainActivity (которая является расширенной BaseActivity) в BaseActivity.

Просто создайте метод в BaseActivity, как,

protected void setYourValue(Object obj){
    ..........
}

Из вашей MainActivity просто вызовите этот метод и установите все, что вы хотите.

setYourValue("This is my value");

Если вы MainAcitivity не расширены от BaseActivity,

 public static void setYourValue(Object obj){
    ..........
 }

В MainActivity,

BaseActivity.setYourValue("This is my value");

Пожалуйста, проведите некоторое исследование по реализации разделяемого предпочтения.

В вашей текущей деятельности создайте новое намерение:

Intent i = new Intent(CurrentActivity.this, NewActivity.class);
i.putExtra("new_variable_name","value");
startActivity(i);

Затем в новом действии извлеките эти значения:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String value = extras.getString("new_variable_name");
}

Ссылка Ссылка

Другие вопросы по тегам