-1

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

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

EDITED

Мне нужно передать этот countvalue к 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(); 

    } 
} 
+0

какой тип значений вы хотите в базовой деятельности? –

+0

Можете ли вы показать свой код, что вы пробовали? – Masum

+0

Я получаю несколько целых значений от json в ** MainActivity ** и должен передавать эти целые значения в ** BaseActivity ** –

ответ

0

По моему разумению вы хотите передать некоторое значение из MainActivity (Which расширяет 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"); 

Пожалуйста, сделать некоторые исследования по реализации sharedpreferrence.

+0

Я не распространяю BaseActivity в MainActivity, поэтому я не могу напрямую обращаться к 'setYourValue', правильно? –

+0

Хорошо, если так, то нет другого пути, я думаю, вам нужно создать статический метод в BaseActivity или SharedPreference. – Srinivasan

+0

Thats fine. Я думаю, SharedPreference будет делать ... –

1

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

+0

Хорошее предложение. Я попробую это и дам вам знать. –

0

В текущей деятельности, создать новый Intent:

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"); 
} 

Refer Link

0

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

Цель намерения = новое намерение (контекст, SecondActivity.class); цель.putExtra («Ключ», «Значение»); startActivity (намерение)

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

1

В вашем 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 в надлежащем месте.

 Смежные вопросы

  • Нет связанных вопросов^_^