Как отправить значения из одного действия в другое расширенное действие в 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");
}