AsyncTaskを実行するクラスがあり、正常に動作しており、mainActivityにデータを渡すことができます。今私はMainActivityの他の場所でこのデータを処理する方法を知らないという問題があります。スニペット(マーカー)でこのデータを使用してマーカーに情報を入れたいとします:他のクラスのスニペット内でdoInBackgroundデータを渡すにはどうすればよいですか?
AsyncTaskクラス。
public class DistanceBetweenLocations extends AsyncTask<String, Void, String> {
URL url;
@Override
protected String doInBackground(String... params) {
HttpURLConnection urlConnection = null;
StringBuilder result = null;
String duration = "";
String distance = "";
try {
url = new URL(params[0]);
}catch (MalformedURLException m){
}
try {
urlConnection = (HttpURLConnection) url.openConnection();
}catch (IOException e){
}
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
result = new StringBuilder();
String line;
while((line = reader.readLine()) != null) {
result.append(line);
}
}catch (IOException e){
} finally {
urlConnection.disconnect();
}
try {
JSONObject jsonObject = new JSONObject(result.toString());
JSONArray jsonArray = jsonObject.getJSONArray("rows");
JSONObject object_rows = jsonArray.getJSONObject(0);
JSONArray jsonArrayElements = object_rows.getJSONArray("elements");
JSONObject object_elements = jsonArrayElements.getJSONObject(0);
JSONObject object_duration = object_elements.getJSONObject("duration");
JSONObject object_distance = object_elements.getJSONObject("distance");
duration = object_duration.getString("text");
distance = object_distance.getString("text");
return distance + ", " + duration + " Driving";
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
MainActivity mp = new MainActivity();
mp.getDataFromAsyncTask(s);
}
}
これは断片である、私は私のMainActivityでデータを取得する方法であって、
public void getDataFromAsyncTask(String result) {
getDistanceAndTime = result + km;
}
そして、私はここに、このデータを使用したい:
mMap.addMarker(new MarkerOptions().position(new LatLng(geoPoint.getLatitude(), geoPoint.getLongitude()))
.title(name.getName())
.snippet(getDistanceAndTime)//here is where I want to put the data that I get in getDataFromAsyncTask
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
これはということです私は試していますが、データがありません:
私はgetDataFromAsyncTaskで使用しているグローバル変数をm yのスニペットが、彼は最初のinicializationのデータを取る:あなたの活動を自分でインスタンス化されているonPostExecute方法で
String getDistanceAndTime
public void getDataFromAsyncTask(String result) {
getDistanceAndTime = result + km;
}
mMap.addMarker(new MarkerOptions().position(new LatLng(geoPoint.getLatitude(), geoPoint.getLongitude()))
.title(name.getName())
.snippet(getDistanceAndTime)//here is where I want to put the data that I get in getDataFromAsyncTask
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));