2012-11-30 97 views
-1

爲什麼我要這麼做?該應用程序正在運行得很好,wher我決定做tracaRota方法來構建從UMA ponit到另一路線,並開始做到這一點,應用程序甚至不啓動Android中的Google地圖「無法啓動活動ComponentInfo」

11-30 10:45:28.836: E/AndroidRuntime(14114): FATAL EXCEPTION: main 
11-30 10:45:28.836: E/AndroidRuntime(14114): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.aplicacaoteste1/com.example.aplicacaoteste1.Main}: java.lang.NullPointerException 
11-30 10:45:28.836: E/AndroidRuntime(14114): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at android.os.Looper.loop(Looper.java:123) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at java.lang.reflect.Method.invokeNative(Native Method) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at java.lang.reflect.Method.invoke(Method.java:521) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at dalvik.system.NativeStart.main(Native Method) 
11-30 10:45:28.836: E/AndroidRuntime(14114): Caused by: java.lang.NullPointerException 
11-30 10:45:28.836: E/AndroidRuntime(14114): at com.example.aplicacaoteste1.Main.tracaRota(Main.java:167) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at com.example.aplicacaoteste1.Main.onCreate(Main.java:77) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-30 10:45:28.836: E/AndroidRuntime(14114): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-30 10:45:28.836: E/AndroidRuntime(14114): ... 11 more 


    package com.example.aplicacaoteste1; 

import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.List; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

import org.w3c.dom.Document; 
import org.xml.sax.SAXException; 

import android.content.Context; 
import android.graphics.Color; 
import android.graphics.drawable.Drawable; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 
import com.google.android.maps.MyLocationOverlay; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.OverlayItem; 

public class Main extends MapActivity { 

private MapController mControl; 
private MapView mapV; 
private LocationManager lManager; 
private MyLocationOverlay myLOverlay; 
private MyOverlays itemizedOverlay; 


@Override 
protected void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.activity_main); 

    mapV = (MapView) findViewById(R.id.mapView); 
    //mapV.displayZoomControls(true); 
    mapV.setBuiltInZoomControls(true); 
    //mapV.setSatellite(true); 

    mControl = mapV.getController(); 
    mControl.setZoom(5); 

    lManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    lManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new GeoUpdateHandler()); 

    myLOverlay = new MyLocationOverlay(this, mapV); 
    mapV.getOverlays().add(myLOverlay); 


    List<Overlay> mapOverlays = mapV.getOverlays(); 
    Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker); 
    PontoTurísticos pontoTuristico = new PontoTurísticos(drawable, this); 

    GeoPoint point1 = new GeoPoint(19240000,-99120000); 
    OverlayItem novoPontoTuristico = new OverlayItem(point1, "Hola, Mundo!", "I'm in Mexico City!"); 

    GeoPoint point2 = new GeoPoint(-80535835, -348788191); 
    OverlayItem novoPontoTuristico2 = new OverlayItem(point2, "SJCC!", "Olá, tudo bem?!"); 

    pontoTuristico.addOverlay(novoPontoTuristico); 
    pontoTuristico.addOverlay(novoPontoTuristico2); 
    mapOverlays.add(pontoTuristico); 

    tracaRota(myLOverlay.getMyLocation(), novoPontoTuristico2.getPoint(), Color.GREEN, mapV); 

    myLOverlay.runOnFirstFix(new Runnable() { 

     @Override 
     public void run() { 
      mapV.getController().animateTo(myLOverlay.getMyLocation()); 

     } 
    }); 

    //Drawable drawable = this.getResources().getDrawable(R.drawable.ic_launcher); 
    //itemizedOverlay = new MyOverlays(this, drawable); 
    //createMarker(); 



//  double lat = -8.0556; 
//  double longi = 34.8911; 
} 


public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

protected boolean isRouteDisplayed() { 
    return false; 
} 

public class GeoUpdateHandler implements LocationListener{ 

    @Override 
    public void onLocationChanged(Location location) { 
     int lat = (int) (location.getLatitude()); 
     int log = (int) (location.getLongitude()); 

     GeoPoint point = new GeoPoint(lat, log); 
     //createMarker(); 
     //mControl.animateTo(point); 
     mControl.setCenter(point); 

    } 

    @Override 
    public void onProviderDisabled(String arg0) { 

    } 

    @Override 
    public void onProviderEnabled(String arg0) { 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

} 

//private void createMarker(){ 
// GeoPoint p = mapV.getMapCenter(); 
// OverlayItem overlayitem = new OverlayItem(p, "", ""); 
// itemizedOverlay.addOverlay(overlayitem); 
// if(itemizedOverlay.size() < 0){ 
//  mapV.getOverlays().add(itemizedOverlay); 
// } 
//} 

protected void onResume(){ 
    super.onResume(); 
    myLOverlay.enableMyLocation(); 
    myLOverlay.enableCompass(); 
} 

protected void onPause(){ 
    super.onPause(); 
    myLOverlay.disableMyLocation(); 
    myLOverlay.disableCompass(); 
} 

private void tracaRota(GeoPoint src,GeoPoint dest, int color, MapView mV) 
{ 
    // connect to map web service 
    StringBuilder urlString = new StringBuilder(); 
    urlString.append("http://maps.google.com/maps?f=d&hl=en"); 
    urlString.append("&saddr=");//from 
    urlString.append(Double.toString((double)src.getLatitudeE6()/1.0E6)); 
    urlString.append(","); 
    urlString.append(Double.toString((double)src.getLongitudeE6()/1.0E6)); 
    urlString.append("&daddr=");//to 
    urlString.append(Double.toString((double)dest.getLatitudeE6()/1.0E6)); 
    urlString.append(","); 
    urlString.append(Double.toString((double)dest.getLongitudeE6()/1.0E6)); 
    urlString.append("&ie=UTF8&0&om=0&output=kml"); 
    //Log.d("xxx","URL="+urlString.toString()); 
    // get the kml (XML) doc. And parse it to get the coordinates(direction route). 
    Document doc = null; 
    HttpURLConnection urlConnection= null; 
    URL url = null; 
    try 
    { 
     url = new URL(urlString.toString()); 
     urlConnection=(HttpURLConnection)url.openConnection(); 
     urlConnection.setRequestMethod("GET"); 
     urlConnection.setDoOutput(true); 
     urlConnection.setDoInput(true); 
     urlConnection.connect(); 

     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     doc = db.parse(urlConnection.getInputStream()); 

     if(doc.getElementsByTagName("GeometryCollection").getLength()>0) 
     { 
      //String path = doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getNodeName(); 
      String path = doc.getElementsByTagName("GeometryCollection").item(0).getFirstChild().getFirstChild().getFirstChild().getNodeValue() ; 
      //Log.d("xxx","path="+ path); 
      String [] pairs = path.split(" "); 
      String[] lngLat = pairs[0].split(","); // lngLat[0]=longitude lngLat[1]=latitude lngLat[2]=height 
      // src 
      GeoPoint startGP = new GeoPoint((int)(Double.parseDouble(lngLat[1])*1E6),(int)(Double.parseDouble(lngLat[0])*1E6)); 
      mV.getOverlays().add(new pontosRota(startGP,startGP,1)); 
      GeoPoint gp1; 
      GeoPoint gp2 = startGP; 
      for(int i=1;i<pairs.length;i++) // the last one would be crash 
      { 
       lngLat = pairs[i].split(","); 
       gp1 = gp2; 
       // watch out! For GeoPoint, first:latitude, second:longitude 
       gp2 = new GeoPoint((int)(Double.parseDouble(lngLat[1])*1E6),(int)(Double.parseDouble(lngLat[0])*1E6)); 
       mV.getOverlays().add(new pontosRota(gp1,gp2,2,color)); 
       //Log.d("xxx","pair:" + pairs[i]); 
      } 
      mV.getOverlays().add(new pontosRota(dest,dest, 3)); // use the default color 
     } 
    } 
    catch (MalformedURLException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (ParserConfigurationException e) 
    { 
     e.printStackTrace(); 
    } 
    catch (SAXException e) 
    { 
     e.printStackTrace(); 
    } 
} 

} 
+0

第167行的指令是什麼? com.example.aplicacaoteste1.Main.tracaRota(Main.java:167) – znat

回答

0

似乎喜歡上了這行:

tracaRota(myLOverlay.getMyLocation(), novoPontoTuristico2.getPoint(), Color.GREEN, mapV); 

mLOverlay.getMyLocation返回null。

嘗試將其移入myLOverlay.runOnFirstFix runner

相關問題