Autore Topic: errore disegno del percorso tra due punti  (Letto 2778 volte)

Offline Dami

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7 Professional
errore disegno del percorso tra due punti
« il: 26 Agosto 2012, 18:14:27 CEST »
0
Salve a tutti, sapreste aiutarmi a trovare l'errore che il logcat mi segnala?
E' stranissimo il fatto che funzionava tutto perfettamente fino a due mesetti fà...è un'applicazione che calcola il percorso tra due punti e lo disegna sulla mappa...
Vado a riprovare l'app e mi da quest'errore, non mi disegna il percorso e l'app si chiude...
Grazie a tutti in anticipo...spero mi possiate aiutare, ne ho proprio urgente bisogno....


Codice (Java): [Seleziona]
package com.mypackage.damiano;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
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.Overlay;

public class PaginaPercorso extends MapActivity {
        protected static final String TAG = null;
    MapView mapView;
    private Road mRoad;
    Intent intent2;
    Double y;
    Double z;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mainpercorso);
            mapView = (MapView) findViewById(R.id.mapview2);
            mapView.setBuiltInZoomControls(true);
            Intent intent=getIntent(); // l'intent di questa activity
               
                String pkg = getPackageName();
               
                final Double a = intent.getDoubleExtra(pkg+".myDouble5", 0);  //prendiamo i dati
                final Double b = intent.getDoubleExtra(pkg+".myDouble6", 0);
                final String d = intent.getStringExtra(pkg+".myString3");
                final String c = intent.getStringExtra(pkg+".myString");
               

            new Thread() {
                    @Override
                    public void run() {
                        TextView textView1 = (TextView)findViewById(R.id.percorso);
                                textView1.setText("Da " + d + "\nA "+ c + "");
                                Geocoder gc = new Geocoder(getBaseContext(), Locale.getDefault());
                        try {
                            List<Address> addressList = gc.getFromLocationName(c, 1);
                            if (addressList.size() > 0) {
                                Address address = addressList.get(0);
                                if(address.hasLatitude() && address.hasLongitude()){
                                        y = address.getLatitude();
                                    z = address.getLongitude();
                                    }
                                }else
                                Log.d(TAG, "no matches were found or there is no backend service available.");
                        } catch (IOException e) {}
                       
                        String url = RoadProvider
                                .getUrl(a, b, y, z);
                        InputStream is = getConnection(url);
                        mRoad = RoadProvider.getRoute(is);
                       
                       
                         
                            mHandler.sendEmptyMessage(0);
                    }
            }.start();
            intent2=new Intent(getApplicationContext(), Home.class);
            Button but = (Button)findViewById(R.id.button2);
            but.setText("Home");
            but.setOnClickListener(new OnClickListener() {
                 
               
                        public void onClick(View v) {
                               
                                        startActivity(intent2);
                               
                        }
                });
    }
   
   

    Handler mHandler = new Handler() {
            public void handleMessage(android.os.Message msg) {
                TextView textView = (TextView) findViewById(R.id.descrizione);                                
                    textView.setText(mRoad.mDescription);
                    MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
                    List<Overlay> listOfOverlays = mapView.getOverlays();
                    listOfOverlays.clear();
                    listOfOverlays.add(mapOverlay);
                    mapView.invalidate();
            };
    };

    private InputStream getConnection(String url) {
            InputStream is = null;
            try {
                    URLConnection conn = new URL(url).openConnection();
                    is = conn.getInputStream();
            } catch (MalformedURLException e) {
                    e.printStackTrace();
            } catch (IOException e) {
                    e.printStackTrace();
            }
            return is;
    }

    @Override
    protected boolean isRouteDisplayed() {
            return false;
    }
}

Codice (Java): [Seleziona]
class MapOverlay extends com.google.android.maps.Overlay {
    Road mRoad;
    ArrayList<GeoPoint> mPoints;

    public MapOverlay(Road road, MapView mv) {
            mRoad = road;
            if (road.mRoute.length > 0) {
                    mPoints = new ArrayList<GeoPoint>();
                    for (int i = 0; i < road.mRoute.length; i++) {
                            mPoints.add(new GeoPoint((int) (road.mRoute[i][1] * 1000000),
                                            (int) (road.mRoute[i][0] * 1000000)));
                    }
                    int moveToLat = (mPoints.get(0).getLatitudeE6() + (mPoints.get(
                                    mPoints.size() - 1).getLatitudeE6() - mPoints.get(0)
                                    .getLatitudeE6()) / 2);
                    int moveToLong = (mPoints.get(0).getLongitudeE6() + (mPoints.get(
                                    mPoints.size() - 1).getLongitudeE6() - mPoints.get(0)
                                    .getLongitudeE6()) / 2);
                    GeoPoint moveTo = new GeoPoint(moveToLat, moveToLong);

                    MapController mapController = mv.getController();
                    mapController.animateTo(moveTo);
                    mapController.setZoom(11);
            }
    }

    @Override
    public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) {
            super.draw(canvas, mv, shadow);
            drawPath(mv, canvas);
            return true;
    }

    public void drawPath(MapView mv, Canvas canvas) {
            int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
            Paint paint = new Paint();
            paint.setColor(Color.BLUE);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(3);
            for (int i = 0; i < mPoints.size(); i++) {   //QUESTA E' LA RIGA 167, LA PRIMA CHE IL LOGCAT RILEVA ERRATA...)
                    Point point = new Point();
                    mv.getProjection().toPixels(mPoints.get(i), point);
                    x2 = point.x;
                    y2 = point.y;
                    if (i > 0) {
                            canvas.drawLine(x1, y1, x2, y2, paint);
                    }
                    x1 = x2;
                    y1 = y2;
            }
    }
}

   


Codice: [Seleziona]
08-26 18:06:44.036: E/AndroidRuntime(709): FATAL EXCEPTION: main
08-26 18:06:44.036: E/AndroidRuntime(709): java.lang.NullPointerException
08-26 18:06:44.036: E/AndroidRuntime(709):         at com.mypackage.damiano.MapOverlay.drawPath(PaginaPercorso.java:169)
08-26 18:06:44.036: E/AndroidRuntime(709):         at com.mypackage.damiano.MapOverlay.draw(PaginaPercorso.java:159)
08-26 18:06:44.036: E/AndroidRuntime(709):         at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:42)
08-26 18:06:44.036: E/AndroidRuntime(709):         at com.google.android.maps.MapView.onDraw(MapView.java:530)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.View.draw(View.java:10978)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.View.draw(View.java:10981)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.widget.FrameLayout.draw(FrameLayout.java:450)
08-26 18:06:44.036: E/AndroidRuntime(709):         at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2126)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewRootImpl.draw(ViewRootImpl.java:2026)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1634)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.os.Handler.dispatchMessage(Handler.java:99)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.os.Looper.loop(Looper.java:137)
08-26 18:06:44.036: E/AndroidRuntime(709):         at android.app.ActivityThread.main(ActivityThread.java:4424)
08-26 18:06:44.036: E/AndroidRuntime(709):         at java.lang.reflect.Method.invokeNative(Native Method)
08-26 18:06:44.036: E/AndroidRuntime(709):         at java.lang.reflect.Method.invoke(Method.java:511)
08-26 18:06:44.036: E/AndroidRuntime(709):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-26 18:06:44.036: E/AndroidRuntime(709):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-26 18:06:44.036: E/AndroidRuntime(709):         at dalvik.system.NativeStart.main(Native Method)
« Ultima modifica: 27 Agosto 2012, 13:14:24 CEST da Ricky` »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:errore disegno del percorso tra due punti
« Risposta #1 il: 26 Agosto 2012, 18:25:54 CEST »
0
Se la riga che hai indicato nel commento è la 169 (non la 167 come scrivi), l'unica cosa che può essere NULL è mPoints. Prova a far precedere la riga da if (mPoints==null) Log.e("TAG","mPoints è NULL") e vedi cosa appare nel LogCat.

PS: quando posti codice, racchiudilo dagli appositi tag ( ) per formattarlo e renderlo più leggibili.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Dami

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7 Professional
Re:errore disegno del percorso tra due punti
« Risposta #2 il: 26 Agosto 2012, 18:45:04 CEST »
0
Si, la riga è 169...comunque niente, mPoints non è null ed il LogCat è identico a prima...non capisco quale sia l'errore...perchè prima funzionava...mah...non ho toccato il codice in questo tempo...l'emulatore è sempre lo stesso...

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:errore disegno del percorso tra due punti
« Risposta #3 il: 26 Agosto 2012, 18:50:14 CEST »
0
Si, la riga è 169...comunque niente, mPoints non è null ed il LogCat è identico a prima...non capisco quale sia l'errore...perchè prima funzionava...mah...non ho toccato il codice in questo tempo...l'emulatore è sempre lo stesso...

Si ma, se in questa riga si verifica un NULLPOINTEREXCEPTION, vuol dire che una delle variabili che stai usando è NULL. Per forza.

Codice (Java): [Seleziona]
for (int i = 0; i < mPoints.size(); i++)
Se non lo sono, ricontrolla il numero di riga, fai un clean e rebuild, ricontrolla che mPoints non sia null.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Dami

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7 Professional
Re:errore disegno del percorso tra due punti
« Risposta #4 il: 27 Agosto 2012, 01:49:18 CEST »
0
fatto...stesso errore, stesso logcat...non c'è altro da dire...l'array mPoints è null...c'è da capire perchè non viene riempito dalla funzione su...

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:errore disegno del percorso tra due punti
« Risposta #5 il: 27 Agosto 2012, 03:26:34 CEST »
0
Viene creato solo se  "road.mRoute.length > 0".
adb logcat | tee /tmp/logcat | grep TAG

Offline Dami

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7 Professional
Re:errore disegno del percorso tra due punti
« Risposta #6 il: 27 Agosto 2012, 12:30:35 CEST »
0
non so proprio come fare per risolvere...

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:errore disegno del percorso tra due punti
« Risposta #7 il: 27 Agosto 2012, 13:38:45 CEST »
0

Devi migliorare le conoscenze del linguaggio Java prima di programmare per Android.

Togli la linea:

Codice (Java): [Seleziona]
mPoints = new ArrayList<GeoPoint>();
La linea:

Codice (Java): [Seleziona]
ArrayList<GeoPoint> mPoints;
sostituiscila con:

Codice (Java): [Seleziona]
ArrayList<GeoPoint> mPoints =  new ArrayList<GeoPoint>();
in questo modo mPoints non è mai null.
adb logcat | tee /tmp/logcat | grep TAG

Offline Dami

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7 Professional
Re:errore disegno del percorso tra due punti
« Risposta #8 il: 27 Agosto 2012, 14:48:45 CEST »
0
giusto...adesso non è più null...però il percorso sulla mappa non me lo disegna...questo il logcat

08-27 12:46:43.710: D/dalvikvm(10920): GREF has increased to 201
08-27 12:46:43.720: W/System.err(10920): org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 801: not well-formed (invalid token)
08-27 12:46:43.720: W/System.err(10920):    at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:515)
08-27 12:46:43.730: W/System.err(10920):    at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:474)
08-27 12:46:43.730: W/System.err(10920):    at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:321)
08-27 12:46:43.730: W/System.err(10920):    at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:279)
08-27 12:46:43.730: W/System.err(10920):    at javax.xml.parsers.SAXParser.parse(SAXParser.java:390)
08-27 12:46:43.740: W/System.err(10920):    at javax.xml.parsers.SAXParser.parse(SAXParser.java:187)
08-27 12:46:43.740: W/System.err(10920):    at com.mypackage.damiano.RoadProvider.getRoute(RoadProvider.java:21)
08-27 12:46:43.740: W/System.err(10920):    at com.mypackage.damiano.PaginaPercorso$2.run(PaginaPercorso.java:76)

Offline Dami

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7 Professional
Re:errore disegno del percorso tra due punti
« Risposta #9 il: 27 Agosto 2012, 14:52:55 CEST »
0
il bello è che fino ad un mese fà funzionava tutto...senza toccare codice nè altro ora da questi problemi...assurdo...grazie per la pazienza comunque...speriamo riusciate ad aiutarmi...grazie davvero...

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:errore disegno del percorso tra due punti
« Risposta #10 il: 27 Agosto 2012, 15:01:31 CEST »
0
08-27 12:46:43.710: D/dalvikvm(10920): GREF has increased to 201
08-27 12:46:43.720: W/System.err(10920): org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 801: not well-formed (invalid token)
08-27 12:46:43.720: W/System.err(10920):    at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:515)
08-27 12:46:43.730: W/System.err(10920):    at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:474)
08-27 12:46:43.730: W/System.err(10920):    at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:321)
08-27 12:46:43.730: W/System.err(10920):    at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:279)
08-27 12:46:43.730: W/System.err(10920):    at javax.xml.parsers.SAXParser.parse(SAXParser.java:390)
08-27 12:46:43.740: W/System.err(10920):    at javax.xml.parsers.SAXParser.parse(SAXParser.java:187)
08-27 12:46:43.740: W/System.err(10920):    at com.mypackage.damiano.RoadProvider.getRoute(RoadProvider.java:21)
08-27 12:46:43.740: W/System.err(10920):    at com.mypackage.damiano.PaginaPercorso$2.run(PaginaPercorso.java:76)

Mi sembra di capire ci sono problemi con il parsing di qualche documento (sarà la sorgente dati?). Hai provato a verificare questa cosa?

PS: Evita doppi post ;)
« Ultima modifica: 27 Agosto 2012, 15:15:55 CEST da Ricky` »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:errore disegno del percorso tra due punti
« Risposta #11 il: 27 Agosto 2012, 15:07:46 CEST »
0
il bello è che fino ad un mese fà funzionava tutto...senza toccare codice nè altro ora da questi problemi...assurdo...grazie per la pazienza comunque...speriamo riusciate ad aiutarmi...grazie davvero...

Come ha accennato Ricky: potrebbe essere variata la sorgente dei dati? Intendo dire che potrebbe essere variata proprio la risposta. Prova a salvare la risposta XML un file su SD e verifica.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Dami

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7 Professional
Re:errore disegno del percorso tra due punti
« Risposta #12 il: 28 Agosto 2012, 15:25:57 CEST »
0
Ragazzi perdonatemi, ma per sorgente dati quali file intendete?

Offline Dami

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7 Professional
Re:errore disegno del percorso tra due punti
« Risposta #13 il: 29 Agosto 2012, 16:03:29 CEST »
0
Ricky e bradipao non ho capito cosa volete dire...sareste così gentili da spiegarmelo? :D

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:errore disegno del percorso tra due punti
« Risposta #14 il: 29 Agosto 2012, 16:17:04 CEST »
0
Ricky e bradipao non ho capito cosa volete dire...sareste così gentili da spiegarmelo? :D

Da dove prendi i dati che mostri?