我正在关注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());
答案 0 :(得分:1)
只需将this.fragment.getActivity()
替换为this.activity
,因为您已经参考了该活动。
从技术上讲,为了使它成为一个更可重复使用且分离的类,我会将MainActivity
的引用替换为Context
,因为它真的只需要它,并且不需要&#39如果它是MainActivity或其后的一些活动,我真的很在意。
答案 1 :(得分:1)
相反
progressDialog = new ProgressDialog(this.fragment.getActivity());
使用
progressDialog = new ProgressDialog(activity);