试图获得正确的背景

时间:2014-05-11 06:07:21

标签: android google-maps android-fragments android-asynctask

我正在关注this教程以实施google direction API。在教程中,onclick和与输入数据相关的所有代码都在fragmentActivity中。但我想用一个片段。我想知道如何更改教程中的asyncTask类,以便它使用正确的Context来查找我的片段。 这是我的尝试。

public class GetDirectionsAsyncTask extends AsyncTask<Map<String, Object>, Object, ArrayList<LatLng>>
{
    public static final String USER_CURRENT_LATLNG = "user_current_latlng";
    public static final String DESTINATION_LATLNG = "destination_latlng";
    public static final String DIRECTIONS_MODE = "directions_mode";
    private MainActivity activity;
    private Closest fragment;
    private Exception exception;
    private ProgressDialog progressDialog;

    public GetDirectionsAsyncTask(Closest fragment, MainActivity activity)
    {
        super();
        this.activity = activity;
    }

    public void onPreExecute()
    {
        progressDialog = new ProgressDialog(this.fragment.getActivity());
        progressDialog.setMessage("Calculating directions");
        progressDialog.show();
    }

    @Override
    public void onPostExecute(ArrayList<LatLng> result)
    {
        progressDialog.dismiss();
        if (exception == null)
        {
            fragment.handleGetDirectionsResult(result);
        }
        else
        {
            processException();
        }
    }
 @Override
    protected ArrayList<LatLng> doInBackground(Map<String, Object>... params)
    {
        Map<String, Object> paramMap = params[0];
        try
        {
            LatLng fromPosition = (LatLng) paramMap.get(USER_CURRENT_LATLNG);
            LatLng toPosition = (LatLng) paramMap.get(DESTINATION_LATLNG);
            GMapV2Direction md = new GMapV2Direction();
            Document doc = md.getDocument(fromPosition, toPosition, (String)paramMap.get(DIRECTIONS_MODE));
            ArrayList<LatLng> directionPoints = md.getDirection(doc);
            return directionPoints;
        }
        catch (Exception e)
        {
            exception = e;
            return null;
        }
    }

    private void processException()
    {
        Toast.makeText(activity, "Error retriving data", Toast.LENGTH_LONG).show();
    }
}

它需要知道Context的那一刻,它在logcat中崩溃并出现一个nullpointer异常。如果你意识到,第一次需要上下文是progressDialog = new ProgressDialog(this.fragment.getActivity());

2 个答案:

答案 0 :(得分:1)

只需将this.fragment.getActivity()替换为this.activity,因为您已经参考了该活动。

从技术上讲,为了使它成为一个更可重复使用且分离的类,我会将MainActivity的引用替换为Context,因为它真的只需要它,并且不需要&#39如果它是MainActivity或其后的一些活动,我真的很在意。

答案 1 :(得分:1)

相反

 progressDialog = new ProgressDialog(this.fragment.getActivity());

使用

 progressDialog = new ProgressDialog(activity);