2012-10-13 4 views
0

나는이 문제에 대해 많은 문제와 예제를 조사했지만 문제를 이해하고 해결하지 못했습니다. 문제는 내 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()); 

어떤 도움이 정말 감사합니다. 미리 감사드립니다.

+1

값을 onPostExecute 메소드에 전달해야합니다. 당신의 코드에 따르면, 당신은 아무 것도하지 않았지만 사후에 스피너를 멈추게했습니다. – dumbfingers

+0

나는 이것을 시도했으나 ** getResources() ** – iAziz

답변

1

onPostExecute()에 해당 라인이 포함 된 GoogleMapsAppActivity의 메소드를 호출하십시오. 당신의 onPostExecute에서

+0

에서 오류가 발생했다. 그러나 ** onPostExecute() **는 모든 메소드를 볼 수 없다. ** Drawable makerDefault = this.getResources(). getDrawable (R.drawable.poke); **에서 오류가 발생합니다. 구체적으로, ** getResources() **에서. – iAziz

+0

@ user1715137 : "onPostExecute()"에 위에있는 코드 줄을 붙여 넣지 않았습니다. "onPostExecute()'를 작성하면 ** 해당 줄이 포함 된 'GoogleMapsAppActivity' **에서 메소드를 호출합니다. " – CommonsWare

0

() 메소드 :

super.onPostExecute(strArr2); 

그것은 myMapService.execute (후 호출 활동에 호출 클래스

에 strArr2를 반환합니다) :

String[] results = myMapService.get(); 
//results == strArr2 

단지 그만큼 간단 해!

+0

답장을 보내 주셔서 감사합니다.이 시도했지만이 줄에서 응용 프로그램이 충돌합니다! – iAziz

+0

우리에게 logcat 줄. 그것은 내가 사용하는 것이기 때문에 이상한데 그것은 잘 작동합니다. – CinetiK

+0

: 전자/AndroidRuntime (2752) : 치명적인 예외 : 메인 : E/AndroidRuntime (2752) : java.lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {com.example.phooogle/com.example.phooogle.GoogleMapsAppActivity} : java.lang.NullPointerException : E/AndroidRuntime (2752) : \t android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2059) com.example.phooogle.GoogleMapsAppActivity. onCreate (GoogleMapsAppActivity.java:68) – iAziz

관련 문제