나는이 문제에 대해 많은 문제와 예제를 조사했지만 문제를 이해하고 해결하지 못했습니다. 문제는 내 AsyncTask 클래스의 InBackground 메서드에서 String 배열을 가져와 일부 프로세스가 데이터에 발생하는 다른 클래스로 가져와야한다는 것입니다.AsyncTask 반환은 다른 메서드로 전달되지 않습니다
public class myMapService extends AsyncTask<String, Void, String[]> {
private ProgressDialog progressDialog;
private keyword activity;
private String rst = " " ;
private String[] strArr1;
private String[] strArr2;
private String[] resultList;
public String[] getResultList() { return this.resultList; }
public myMapService(keyword activity, ProgressDialog progressDialog)
{
this.activity = activity;
this.progressDialog = progressDialog;
}
@Override
protected void onPreExecute()
{
progressDialog.show();
}
@Override
protected String[] doInBackground(String... arg0) {
String result = "";
int responseCode = 0;
int executeCount = 0;
HttpResponse response;
StringBuilder sb = new StringBuilder();
String line;
try
{
HttpClient client = new DefaultHttpClient();
HttpGet httppost = new HttpGet("http://XXX.com/ccvo/mel-asset-data/query.php?lon="+ arg0[0].toString() + "&lat="+ arg0[1].toString() +"&within=" + arg0[2].toString() + "&keyword="+ arg0[3].toString().replace(" ", "%20"));
Log.v("Results", "from web: " + arg0[0]);
Log.v("Results", "from web: " + arg0[1]);
Log.v("Results", "from web: " + arg0[2]);
Log.v("Results", "from web: " + arg0[3]);
do
{
progressDialog.setMessage("Passing paratmeters.. ("+(executeCount+1)+"/5)");
// Execute HTTP Post Request
executeCount++;
response = client.execute(httppost);
responseCode = response.getStatusLine().getStatusCode();
} while (executeCount < 5 && responseCode == 408);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
while ((line = rd.readLine()) != null)
{
result = line.trim();
sb.append(line);
}
}catch (Exception e2) {
responseCode = 408;
e2.printStackTrace();
}
rst = result.toString();
// splits everything
if(rst != null && rst.length() > 0)
{
strArr1 = rst.split("\\|");
for(int i=0;i<strArr1.length;i++)
{
Log.d("Results", "Array size1.1 " + i);
Log.v("Results", "Array split1.2 " + strArr1[i]);
if(strArr1[i] != null && strArr1[i].length() >0 && strArr1[i].contains(","))
{
strArr2 = strArr1[i].split(",");
for(int j=0; j<strArr2.length ;j++)
{
// strArr3[i][j] = strArr2[j].toString();
if(strArr2.length == 4)
{
// int temp = Integer.parseInt(strArr2[j]) ;
// strArr2[j] = Integer.toString(Integer.parseInt(strArr2[j])) ;
}
Log.d("Results", "Array size2.3 " + j);
Log.d("Results", "Array split2.4 " + strArr2[j]);
}
}
}
}
/* if(rst != null && rst.length() > 0)
{
strArr = rst.split("\\|");
for(int i=0;i<strArr.length;i++)
{
Log.d("Results", "Array split 1: " + strArr[i]);
// Log.d("Results", "Array split 2: " + arrfetch[i]);
}
}
*/
this.resultList = strArr2;
return strArr2;
}
@Override
protected void onPostExecute(String[] strArr2)
{
progressDialog.dismiss();
}
}
strArr2 배열이 ategory, 위도, 경도, 거리 값을 반환
여기 내 myMapService 클래스입니다. 이 클래스는 버튼 리스너를 통해 시작되지만지도에는 사용 가능한 객체가 표시됩니다. 내 keyword.java에서 :
View firstButton = findViewById(R.id.button1);
firstButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
gps = new GPSTracker(keyword.this);
// check if GPS enabled
String latitude = Double.toString(gps.getLatitude());
String longitude = Double.toString(gps.getLongitude());
ProgressDialog progressDialog = new ProgressDialog(keyword.this);
progressDialog.setCancelable(false);
myMapService myMapService = new myMapService(keyword.this, progressDialog);
myMapService.execute(longitude.toString(),latitude.toString(), withinn.toString(), keywordSeleced.toString());
Intent i = new Intent(getBaseContext(), GoogleMapsAppActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(i);
}
});
나는 MapActivity를 확장 어디에 내 GoogleMapsAppActivity.java 내 AsyncTask를 클래스의 결과를 사용할 필요가있다. 이 값들을 다음 줄에 전달해야합니다 :
Drawable makerDefault = this.getResources().getDrawable(R.drawable.poke);
MirItemizedOverlay itemizedOverlay = new MirItemizedOverlay(makerDefault);
itemizedOverlay.addOverlayItem((int) (1E6 * -37.720754), (int) (1E6 * 145.048798), "La trobe");
mapView.getOverlays().add(itemizedOverlay);
MapController mc = mapView.getController();
mc.setCenter(new GeoPoint((int) (1E6 * -37.720754), (int) (1E6 * 145.048798)));/
mc.zoomToSpan(itemizedOverlay.getLatSpanE6(), itemizedOverlay.getLonSpanE6());
어떤 도움이 정말 감사합니다. 미리 감사드립니다.
값을 onPostExecute 메소드에 전달해야합니다. 당신의 코드에 따르면, 당신은 아무 것도하지 않았지만 사후에 스피너를 멈추게했습니다. – dumbfingers
나는 이것을 시도했으나 ** getResources() ** – iAziz