处理来自AsyncTask的结果

时间:2014-10-20 01:56:54

标签: java android android-fragments android-asynctask

我创建了一个新的AsyncTask,一切似乎都运行良好。我只是不知道如何检索结果并在创建AsyncTask的Fragment中使用它们。

如何在AsyncTask运行完毕后检索ArrayList并在调用片段中使用该ArrayList?它在OnPostExecute中吗?

的AsyncTask

    @Override
    protected ArrayList<String> doInBackground(String... params) {
        // TODO Auto-generated method stub
        mArray = new ArrayList<String>();
        StringBuilder sb = new StringBuilder(GEOCODING_API_BASE + OUT_JSON);
        try {
            sb.append("?address=")
                    .append(URLEncoder.encode(params[0], "UTF-8"));
            sb.append("&sensor=false");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String uri = sb.toString();

        HttpGet httpGet = new HttpGet(uri);
        HttpClient client = new DefaultHttpClient();
        HttpResponse response;
        StringBuilder stringBuilder = new StringBuilder();

        try {
            response = client.execute(httpGet);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject = new JSONObject(stringBuilder.toString());

            double lng = ((JSONArray) jsonObject.get("results"))
                    .getJSONObject(0).getJSONObject("geometry")
                    .getJSONObject("location").getDouble("lng");

            double lat = ((JSONArray) jsonObject.get("results"))
                    .getJSONObject(0).getJSONObject("geometry")
                    .getJSONObject("location").getDouble("lat");

            Log.e("latitude", "" + lat);
            Log.e("longitude", "" + lng);
            String longitude = Double.toString(lng);
            String latitude = Double.toString(lat);
            mArray.add(longitude);
            mArray.add(latitude);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return mArray;
    }

    @Override
    protected void onPostExecute(ArrayList<String> result) {
        super.onPostExecute(result);

    }

}

致电碎片

case R.id.btnSubmit:
        String desc = etDesc.getText().toString().trim();
        String loc = etLocation.getText().toString().trim();
        String time = btnTime.getText().toString().trim();
        String date = btnDate.getText().toString().trim();
        String sport = tvSportName.getText().toString().trim();
        String title = etTitle.getText().toString().trim();
        ParseUser currentUser = ParseUser.getCurrentUser();

        // check to see if the values are empty

        SportEvent newSportEvent = new SportEvent();
        newSportEvent.setSport(sport);
        newSportEvent.setTime(title);
        newSportEvent.setDate(date);
        newSportEvent.setTitle(title);
        newSportEvent.setDesc(desc);
        newSportEvent.setUser(currentUser);

        //getLatLongFromAddress(loc);
        new LocationAsyncTask().execute(loc);

        // implement user signin first>>>

        // newSportEvent.setUser(ParseUser.getCurrentUser());
        ParseACL acl = new ParseACL();
        acl.setPublicReadAccess(true);
        acl.setPublicWriteAccess(true); // objects created are writable
        newSportEvent.setACL(acl);

1 个答案:

答案 0 :(得分:0)

如果您的异步任务是一个单独的类,您可以创建一个接口以将结果发送到该片段。异步类将调用接口方法,您的片段将实现接口并覆盖接口方法。查看更多HERE