2014-09-15 7 views
0

Android에서 새로 생겼습니다. MAP 프로젝트를 만들려고 노력 중입니다 ... 일부 블로그에서 코드를 찾았습니다. 작동하는 방식으로 편집하지만, 출력에서는 계속 progressDialog를 계속 진행합니다. 끝내지 마십시오Google지도 V2 API 지침 : 오류는 발생하지 않지만 제대로 작동하지 않습니다.

이것은 있습니다. 내 코드

public class LokasiActivity extends FragmentActivity{ 

public static final String USER_CURRENT_LAT = "user_current_lat"; 
public static final String USER_CURRENT_LONG = "user_current_long"; 
public static final String DESTINATION_LAT = "destination_lat"; 
public static final String DESTINATION_LONG = "destination_long"; 
public static final String DIRECTIONS_MODE = "directions_mode"; 
private static final LatLng AMSTERDAM = new LatLng(52.37518, 4.895439); 
private static final LatLng PARIS = new LatLng(48.856132, 2.352448); 
private Exception exception; 
private ProgressDialog progressDialog; 
private GoogleMap googleMap; 
Button btnjalur; 
ArrayList<LatLng> directionPoints; 
SupportMapFragment fragment; 
private Polyline newPolyline; 
private int width, height; 
private LatLngBounds latlngBounds; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.lokasi_layout); 

    btnjalur = (Button)findViewById(R.id.btnJalur); 

    getSreenDimanstions(); 

     fragment = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)); 
     googleMap = fragment.getMap(); 

    btnjalur.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      findDirections(AMSTERDAM.latitude, AMSTERDAM.longitude, PARIS.latitude, PARIS.longitude, LokasiDirection.MODE_DRIVING); 

     } 
    }); 
} 


public void handleGetDirectionsResult() { 
    PolylineOptions rectLine = new PolylineOptions().width(5).color(Color.RED); 

    for(int i = 0 ; i < directionPoints.size() ; i++) 
    {   
     rectLine.add(directionPoints.get(i)); 
    } 
    if (newPolyline != null) 
    { 
     newPolyline.remove(); 
    } 
    newPolyline = googleMap.addPolyline(rectLine); 

     latlngBounds = createLatLngBoundsObject(AMSTERDAM, PARIS); 
     googleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(latlngBounds, width, height, 150)); 


} 

private void getSreenDimanstions() 
{ 
    Display display = getWindowManager().getDefaultDisplay(); 
    width = display.getWidth(); 
    height = display.getHeight(); 
} 

private LatLngBounds createLatLngBoundsObject(LatLng firstLocation, LatLng secondLocation) 
{ 
    if (firstLocation != null && secondLocation != null) 
    { 
     LatLngBounds.Builder builder = new LatLngBounds.Builder();  
     builder.include(firstLocation).include(secondLocation); 

     return builder.build(); 
    } 
    return null; 
} 

public class GetDirectionsAsyncTask extends AsyncTask<Map<String, String>, Object, ArrayList<LatLng>> 
{ 

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


    @Override 
    protected ArrayList<LatLng> doInBackground(Map<String, String>... params) 
    { 
     Map<String, String> paramMap = params[0]; 
     try 
     { 
      LatLng fromPosition = new LatLng(Double.valueOf(paramMap.get(USER_CURRENT_LAT)) , Double.valueOf(paramMap.get(USER_CURRENT_LONG))); 
      LatLng toPosition = new LatLng(Double.valueOf(paramMap.get(DESTINATION_LAT)) , Double.valueOf(paramMap.get(DESTINATION_LONG))); 
      LokasiDirection md = new LokasiDirection(); 
      Document doc = md.getDocument(fromPosition, toPosition, paramMap.get(DIRECTIONS_MODE)); 
      directionPoints = md.getDirection(doc); 
      return directionPoints; 
     } 
     catch (Exception e) 
     { 
      exception = e; 
      return null; 
     } 
    } 

    public void onPostExecute() 
    { 
     progressDialog.dismiss(); 
     if (exception == null) 
     { 
      handleGetDirectionsResult(); 
     } 
     else 
     { 
      processException(); 
     } 
    } 


    private void processException() 
    { 
     Toast.makeText(LokasiActivity.this, "Error retriving data", 3000).show(); 
    } 
} 

public void findDirections(double fromPositionDoubleLat, double fromPositionDoubleLong, double toPositionDoubleLat, double toPositionDoubleLong, String mode) 
{ 
    Map<String, String> resultdestination = new HashMap<String, String>(); 
    resultdestination.put(USER_CURRENT_LAT, String.valueOf(fromPositionDoubleLat)); 
    resultdestination.put(USER_CURRENT_LONG, String.valueOf(fromPositionDoubleLong)); 
    resultdestination.put(DESTINATION_LAT, String.valueOf(toPositionDoubleLat)); 
    resultdestination.put(DESTINATION_LONG, String.valueOf(toPositionDoubleLong)); 
    resultdestination.put(DIRECTIONS_MODE, mode); 

    new GetDirectionsAsyncTask().execute(resultdestination); 
} 
@Override 
protected void onResume() { 
    super.onResume(); 
    latlngBounds = createLatLngBoundsObject(AMSTERDAM, PARIS); 
    googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(latlngBounds, width, height, 150)); 


} 

}

내 코드에 문제가 .... u는 그 실현 경우에 저를 알려주세요 ..

답변

0

출력 그냥해서 ProgressDialog 일을 계속 ... 끝이 없을

진행 대화 상자를 닫지 마십시오. onPostExecute()의 코드는 메소드 서명이 잘못되었으므로 실행되지 않습니다.

변경

public void onPostExecute() 

@Override 주석이 컴파일러를 할 수

@Override 
public void onPostExecute(ArrayList<LatLng> result) 

에 당신이하지 않은 경우 오류를 방출하여 메서드를 재정의 사실인지 확인하세요.

관련 문제