我正在开发一个应用程序,其中我有一个共同的活动,即 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();
}
}
答案 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");
}
答案 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