将字符串从一个子类传递到另一个子类

时间:2015-11-04 23:55:39

标签: java android android-asynctask

我正在调用一个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);
    }
}

3 个答案:

答案 0 :(得分:0)

尝试将storeMapextras提取到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);

在onPostExecute

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