我正在调用一个Web服务来从json中获取一个对象,然后我需要将我创建了一个字符串的对象传递给另一个Web服务。我在AsyncTask中调用了每个Web服务。我无法将第一个jsonObject命名映射传递给另一个子类。不要担心actaul调用,我想将字符串“map”传递给第二个AsyncTask,以便能够在web调用中使用它。这两个类都是子类。
public class aisleStoreID extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String urlExtension = "getpartnerstore?latitude=" + lat + "&longitude=" + lng + "&partner_id=" + "60" + "&vendor_store_nbr=" + id + "";
final String authToken = Utils.md5(urlExtension);
String urlString = "http://aisle411.ws/webservices2/getpartnerstore.php?latitude=" + lat + "&longitude=" + lng + "&partner_id=" + 60 + "&vendor_store_nbr=" + id + "&auth=" + authToken;
InputStream inputStream = null;
try {
HttpResponse response = ConnectionHelper.executeHttpGetStoreMap(urlString);
HttpEntity entity = response.getEntity();
inputStream = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
result = sb.toString();
if (response != null) {
result = response.toString();
JSONObject jsonObject = new JSONObject(String.valueOf(sb));
JSONArray arr = jsonObject.getJSONArray("stores");
JSONObject jObj = arr.getJSONObject(0);
String map = jObj.getString("store_map_url");
Intent intent = new Intent(this, getStoreMap.class);
intent.putExtra("retailer_store_id", map);
startActivity(intent);
}
} catch (Exception e) {
System.out.println(e.getMessage());
return e.getMessage();
}
return result;
}
@Override
protected void onPostExecute(String result) {
System.out.println(" What's in it" + result);
}
}
public class getStoreMap extends AsyncTask<String, String, String> {
Bundle bundle = getIntent().getExtras();
String storeMap = bundle.getString("retailer_store_id");
@Override
protected String doInBackground(String... params) {
String urlExtension = "map?latitude=" + lat + "&longitude=" + lng + "&partner_id=" + "60" + "&retailer_store_id=" + map + "";
final String authToken = Utils.md5(urlExtension);
String urlString = "http://aisle411.ws/webservices2/map.php?latitude=" + lat + "&longitude=" + lng + "&partner_id=" + 60 + "&retailer_store_id=" + map + "&auth=" + authToken;*/
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
}
答案 0 :(得分:0)
尝试将storeMap
从extras
提取到doInBackground
方法的代码。
答案 1 :(得分:0)
您需要在aisleStoreID AsyncTask'onPostExecute()中执行此操作:
@Override
protected void onPostExecute(String result) {
System.out.println(" What's in it" + result);
String params[]=new String[1];
params[0]=result;
new getStoreMap().execute(params);
}
然后获取getStoreMap AsyncTask的doInBackground中的参数。
注意:Intent用于将额外内容从一个组件发送到另一个组件(如活动,服务,广播接收器或内容提供商),而不是在类或子类之间。
答案 2 :(得分:0)
异步任务并不意味着是一项活动。这意味着在获取活动数据时在后台工作。区别很重要,我建议您在android docs
中阅读我会尝试从doInBackground返回map,然后在onPostExecute中调用另一个AsyncTask,你也可以从
中删除其中的一些变量JSONObject jsonObject = new JSONObject(String.valueOf(sb));
JSONArray arr = jsonObject.getJSONArray("stores");
JSONObject jObj = arr.getJSONObject(0);
到这个
JSONObject jsonObject = new JSONObject(String.valueOf(sb)).getJSONArray("stores").getJSONObject(0);
public class aisleStoreID extends AsyncTask<String, String, String> {
@Override
String doInBackground(String... params) {
// ...
return map;
}
@Override
protected void onPostExecute(String result) {
new getStoreMap().execute(result);
}
}