Autore Topic: errore strano apertura activity mapfragment  (Letto 657 volte)

Offline tafazzi87

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google nexus 7 - acer E330
  • Sistema operativo:
    Ubuntu 12.04 - Mac OS X 10.6.8
errore strano apertura activity mapfragment
« il: 29 Luglio 2013, 15:34:43 CEST »
0
Ho creato un activity con un mapfragment al suo interno purtroppo però non parte mi da un errore generico e non capisco sinceramente il perchè...il codice è giusto o almeno così mi sembra  ???

Activity
Codice (Java): [Seleziona]
package com.frank.nuova;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Online extends FragmentActivity {
    GoogleMap map;
    Gps s;
    DataSource db;
    MyOpenHelper o;
    LatLng adesso;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
                o=new MyOpenHelper(getApplicationContext());
                db=new DataSource(o);
                try{
                        o.createDataBase();
                }catch(IOException e){
                        e.printStackTrace();
                }
                try{
                        o.openDataBase();
                }catch(SQLException e){
                        e.printStackTrace();
                }
                double lon;
                double lat;
                s=new Gps(getApplicationContext());
                s.getLocation();
                lon=s.longitudine();
                lat=s.latitudine();
                adesso=new LatLng(lat, lon);
                map=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mappa)).getMap();
                Marker posizione=map.addMarker(new MarkerOptions().position(adesso).title("Sei Qui"));
                map.moveCamera(CameraUpdateFactory.newLatLngZoom(adesso, 15));
                Button b=(Button) findViewById(R.id.button1);
                b.setOnClickListener(new OnClickListener() {
                               
                                @Override
                                public void onClick(View v) {
                                        // TODO Auto-generated method stub
                                        List<Coordinate> b=db.vicino_online(adesso, db.vediCoordinate());
                                        Marker[]a=new Marker[b.size()];
                                        for(int i=0;i<a.length;i++){
                                                String linea=b.get(i).getLinea()+"-"+b.get(i).getVia();
                                                a[i]=map.addMarker(new MarkerOptions().position(new LatLng(b.get(i).getLatitudine(), b.get(i).getLongitudine())).title(linea));
                                               
                                        }
                                }
                        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
    }
}
LOGCAT
Codice: [Seleziona]
07-29 15:32:18.678: E/AndroidRuntime(6806): FATAL EXCEPTION: main
07-29 15:32:18.678: E/AndroidRuntime(6806): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.frank.nuova/com.frank.nuova.Online}: java.lang.NullPointerException
07-29 15:32:18.678: E/AndroidRuntime(6806):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at android.os.Handler.dispatchMessage(Handler.java:99)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at android.os.Looper.loop(Looper.java:137)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at android.app.ActivityThread.main(ActivityThread.java:5041)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at java.lang.reflect.Method.invokeNative(Native Method)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at java.lang.reflect.Method.invoke(Method.java:511)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at dalvik.system.NativeStart.main(Native Method)
07-29 15:32:18.678: E/AndroidRuntime(6806): Caused by: java.lang.NullPointerException
07-29 15:32:18.678: E/AndroidRuntime(6806):         at com.frank.nuova.Online.onCreate(Online.java:51)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at android.app.Activity.performCreate(Activity.java:5104)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-29 15:32:18.678: E/AndroidRuntime(6806):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
07-29 15:32:18.678: E/AndroidRuntime(6806):         ... 11 more
qualcuno mi può aiutare??? sto diventando scemo  O:-)

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:errore strano apertura activity mapfragment
« Risposta #1 il: 29 Luglio 2013, 16:26:13 CEST »
0
è questa riga 51?:
Codice (Java): [Seleziona]
 map.moveCamera(CameraUpdateFactory.newLatLngZoom(adesso, 15));
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline tafazzi87

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google nexus 7 - acer E330
  • Sistema operativo:
    Ubuntu 12.04 - Mac OS X 10.6.8
Re:errore strano apertura activity mapfragment
« Risposta #2 il: 29 Luglio 2013, 16:37:21 CEST »
0
è questa riga 51?:
Codice (Java): [Seleziona]
 map.moveCamera(CameraUpdateFactory.newLatLngZoom(adesso, 15));
No vabè era per muovere sulla posizione ma cmq anche commentando quella riga non funziona ugualmente

Inviato dal mio Nexus 7 con Tapatalk 2

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:errore strano apertura activity mapfragment
« Risposta #3 il: 29 Luglio 2013, 16:48:11 CEST »
0
Riga 51 dovrebbe essere questa:
Codice (Java): [Seleziona]
50:            map=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mappa)).getMap();
51:            Marker posizione=map.addMarker(new MarkerOptions().position(adesso).title("Sei Qui"));
52:            map.moveCamera(CameraUpdateFactory.newLatLngZoom(adesso, 15));

Ad occhio direi che map è null, quindi non viene recuperata dal SupportMapFragment. Tra l'altro è possibile che sia così in quanto la documentazione a riguardo del getMap() recita:
Citazione
Returns the GoogleMap. Null if the view of the fragment is not yet ready. This can happen if the fragment lifecyle have not gone through onCreateView(LayoutInflater, ViewGroup, Bundle) yet.

E' effettivamente strano, perché dovrebbe essere già inizializzata quando arriva a quel punto.

Offline tafazzi87

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google nexus 7 - acer E330
  • Sistema operativo:
    Ubuntu 12.04 - Mac OS X 10.6.8
Re:errore strano apertura activity mapfragment
« Risposta #4 il: 29 Luglio 2013, 16:51:37 CEST »
0
Riga 51 dovrebbe essere questa:
Codice (Java): [Seleziona]
50:            map=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mappa)).getMap();
51:            Marker posizione=map.addMarker(new MarkerOptions().position(adesso).title("Sei Qui"));
52:            map.moveCamera(CameraUpdateFactory.newLatLngZoom(adesso, 15));

Ad occhio direi che map è null, quindi non viene recuperata dal SupportMapFragment. Tra l'altro è possibile che sia così in quanto la documentazione a riguardo del getMap() recita:
E' effettivamente strano, perché dovrebbe essere già inizializzata quando arriva a quel punto.
Ho provato a mettere un if(map==null) prima di istanziare map... Ma anche così stesso errore...

Inviato dal mio Nexus 7 con Tapatalk 2

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:errore strano apertura activity mapfragment
« Risposta #5 il: 29 Luglio 2013, 17:02:02 CEST »
0
Domande sciocche, ma vale sempre la pena chiedere:
- I Google Play Services sono installati nel dispositivo/emulatore che stai usando?
- I permessi necessari sono impostati nel manifest?
- E' impostata nel manifest la Maps API key per l'applicazione?
Se la risposta è no ad una di queste domande getMap() tornerà sempre null.

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:errore strano apertura activity mapfragment
« Risposta #6 il: 29 Luglio 2013, 17:09:11 CEST »
0
io ho fatto quella domanda apposta perchè avevo avuto un errore simile:
In una app creavo un percorso (da file CSV/database) e zoomavo su quel percorso, ancora in fase di creazione activity/fragment. 1 volta su 10 funzionava, le altre 9 si spaccava, proprio perchè la mappa non è pronta in fase di onCreate a modifiche sostanziali (anche se i marker non dovrebbero dare problemi).

anche nella onResume non va bene, devi usare la onViewCreated mi pare.

Ad ogni modo, queste cose si risolvono andando in debug e mettendo un breakpoint sul lookup del fragment. Vai di uno step alla volta e vedi cosa è null (con il mouse in debug puoi selezionare pezzi di codice e fare WATCH).
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline tafazzi87

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google nexus 7 - acer E330
  • Sistema operativo:
    Ubuntu 12.04 - Mac OS X 10.6.8
Re:errore strano apertura activity mapfragment
« Risposta #7 il: 29 Luglio 2013, 20:25:30 CEST »
0
Domande sciocche, ma vale sempre la pena chiedere:
- I Google Play Services sono installati nel dispositivo/emulatore che stai usando?
- I permessi necessari sono impostati nel manifest?
- E' impostata nel manifest la Maps API key per l'applicazione?
Se la risposta è no ad una di queste domande getMap() tornerà sempre null.
si sono installati, lo sto usando su un nexus 7, i permessi ci sono e anche l'API key è impostata...

Post unito: 29 Luglio 2013, 20:55:58 CEST
io ho fatto quella domanda apposta perchè avevo avuto un errore simile:
In una app creavo un percorso (da file CSV/database) e zoomavo su quel percorso, ancora in fase di creazione activity/fragment. 1 volta su 10 funzionava, le altre 9 si spaccava, proprio perchè la mappa non è pronta in fase di onCreate a modifiche sostanziali (anche se i marker non dovrebbero dare problemi).

anche nella onResume non va bene, devi usare la onViewCreated mi pare.

Ad ogni modo, queste cose si risolvono andando in debug e mettendo un breakpoint sul lookup del fragment. Vai di uno step alla volta e vedi cosa è null (con il mouse in debug puoi selezionare pezzi di codice e fare WATCH).
il watch non lo trovo nel debug cmq non ci arriva neanche a istanziare la GoogleMap

Post unito: 30 Luglio 2013, 10:32:17 CEST
al primo passo che gli faccio fare del debug mi da questo errore:

se vado un passo avanti ancora invece mi da questo...


il passo dopo naturalmente disconnette l'applicazione...non so proprio cosa sia...

Post unito: 30 Luglio 2013, 15:08:12 CEST
allora facendo una singola applicazione con lo stesso codice funziona, mentre su quella niente ma perchè???? sto impazzendo...l'unica cosa che cambia è che su quella dove non funziona l'activity che contiene la mappa viene lanciata da un altra activity, potrebbe essere questo l'errore?????
l'activity che lo lancia è questa:
Codice (Java): [Seleziona]
public class MainActivity extends Activity {
       
                        @Override
                        protected void onCreate(Bundle savedInstanceState) {
                                super.onCreate(savedInstanceState);
                                setContentView(R.layout.activity_main);
                                final Activity a=this;
                                Button online=(Button) findViewById(R.id.premi_online);
                                Button offline=(Button) findViewById(R.id.button2);
                                online.setOnClickListener(new OnClickListener() {
                                       
                                        @Override
                                        public void onClick(View v) {
                                                // TODO Auto-generated method stub
                                                Intent intent=new Intent(a,Online.class);
                                                startActivity(intent);
                                        }
                                });
                                offline.setOnClickListener(new OnClickListener() {
                                       
                                        @Override
                                        public void onClick(View v) {
                                                // TODO Auto-generated method stub
                                               
                                                Intent intent=new Intent(a,Offline.class);
                                                startActivity(intent);
                                        }
                                });
                               
                        }

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

                }
« Ultima modifica: 30 Luglio 2013, 15:08:12 CEST da tafazzi87, Reason: Merged DoublePost »