如何在android中将值从一个活动发送到另一个扩展活动?

时间:2016-05-26 06:51:03

标签: android android-intent android-activity android-background android-task

我正在开发一个应用程序,其中我有一个共同的活动,即 BaseActivity ,我将它扩展到我的应用程序中的所有其他活动。 我在BaseActivity中运行几个AsyncTask以反映所有其他活动。我的查询是我需要从我的一项活动中将值传递给此BaseActivity,例如 MainActivity

我尝试过Class,Interface概念,但不适合我。建议我,如何实现这一目标。如果需要我的任何参考代码,请评论它,我会发布它。

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();

    }
}

5 个答案:

答案 0 :(得分:1)

将值存储在SharedPreferences中,并从应用程序中的任何活动中检索它们。

答案 1 :(得分: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参考。

答案 2 :(得分:0)

根据我的理解,您希望将一些值从MainActivity(扩展的BaseActivity)传递给BaseActivity。

只需在BaseActivity中创建一个方法,如

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

从您的MainActivity中调用此方法并设置您想要的任何内容。

setYourValue("This is my value");

如果未从BaseActivity扩展MainAcitivity,

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

在MainActivity中,

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

请做一些关于实施共享偏好的研究。

答案 3 :(得分:0)

在您当前的活动中,创建一个新的意图:

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

然后在新的Activity中,检索这些值:

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

Refer Link

答案 4 :(得分:0)

您可以通过定义公共静态来实现此目的,因为此子类或子类的所有实例都将共享它。这是一个非常难看的解决方案,我不推荐。最好使用Extras

Intent intent = new Intent(context,SecondActivity.class); intent.putExtra(&#34; Key&#34;,Value); startActivity(意图)

更多信息请参阅文档https://developer.android.com/guide/components/intents-filters.html