Autore Topic: API v2 Sample Code  (Letto 1403 volte)

Offline Torsolo86

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
API v2 Sample Code
« il: 09 Gennaio 2013, 22:01:29 CET »
0
Salve a tutti,
ho necessità di disegnare sulla mappa il percorso effettuato (tengo in memoria la collezione dei punti GPS attraversati).
Per testare le funzionalità della v2 delle mappe di Google (utilizzo della classe polyline, che fa proprio al caso mio), ho provato a lanciare il codice di esempio, impostando prima tutto (api key inclusione della libreria necessaria ecc ecc).
Mi da un errore a runtime però a cui non riesco a dare una spiegazione
Posto codice java, xml e log sperando che qualcuno piu esperto mi sappia indicare da cosa sia dovuto l'errore (sono giorni che ci sbatto la testa, cerco in rete, provo a modificare.. ma non riesco a farlo funzionare).

Codice (Java): [Seleziona]
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.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class ViewMap extends android.support.v4.app.FragmentActivity
        implements OnSeekBarChangeListener {
    private static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
    private static final LatLng SYDNEY = new LatLng(-33.87365, 151.20689);
    private static final LatLng ADELAIDE = new LatLng(-34.92873, 138.59995);
    private static final LatLng PERTH = new LatLng(-31.95285, 115.85734);

    private static final LatLng LHR = new LatLng(51.471547, -0.460052);
    private static final LatLng LAX = new LatLng(33.936524, -118.377686);
    private static final LatLng JFK = new LatLng(40.641051, -73.777485);
    private static final LatLng AKL = new LatLng(-37.006254, 174.783018);

    private static final int WIDTH_MAX = 50;
    private static final int HUE_MAX = 360;
    private static final int ALPHA_MAX = 255;

    private GoogleMap mMap;
    private Polyline mMutablePolyline;
    private SeekBar mColorBar;
    private SeekBar mAlphaBar;
    private SeekBar mWidthBar;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewmap);
       
        mColorBar = (SeekBar) findViewById(R.id.hueSeekBar);
        mColorBar.setMax(HUE_MAX);
        mColorBar.setProgress(0);

        mAlphaBar = (SeekBar) findViewById(R.id.alphaSeekBar);
        mAlphaBar.setMax(ALPHA_MAX);
        mAlphaBar.setProgress(255);

        mWidthBar = (SeekBar) findViewById(R.id.widthSeekBar);
        mWidthBar.setMax(WIDTH_MAX);
        mWidthBar.setProgress(10);

        setUpMapIfNeeded();
    }
   
    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }
   
    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (mMap != null) {
                setUpMap();
            }
        }
    }
   
    private void setUpMap() {

        // A simple polyline with the default options from Melbourne-Adelaide-Perth.
        mMap.addPolyline((new PolylineOptions())
                .add(MELBOURNE, ADELAIDE, PERTH));

        // A geodesic polyline that goes around the world.
        mMap.addPolyline((new PolylineOptions())
                .add(LHR, AKL, LAX, JFK, LHR)
                .width(5)
                .color(Color.BLUE)
                .geodesic(true));

        // Circle centered at Sydney.  This polyline will be mutable.
        PolylineOptions options = new PolylineOptions();
        int radius = 5;
        int numPoints = 100;
        double phase = 2 * Math.PI / numPoints;
        for (int i = 0; i <= numPoints; i++) {
            options.add(new LatLng(SYDNEY.latitude + radius * Math.sin(i * phase),
                    SYDNEY.longitude + radius * Math.cos(i * phase)));
        }
        int color = Color.HSVToColor(
                mAlphaBar.getProgress(), new float[] {mColorBar.getProgress(), 1, 1});
        mMutablePolyline = mMap.addPolyline(options
                .color(color)
                .width(mWidthBar.getProgress()));

        mColorBar.setOnSeekBarChangeListener(this);
        mAlphaBar.setOnSeekBarChangeListener(this);
        mWidthBar.setOnSeekBarChangeListener(this);

        // Move the map so that it is centered on the mutable polyline.
        mMap.moveCamera(CameraUpdateFactory.newLatLng(SYDNEY));
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // Don't do anything here.
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // Don't do anything here.
    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (mMutablePolyline == null) {
            return;
        }

        if (seekBar == mColorBar) {
            mMutablePolyline.setColor(Color.HSVToColor(
                    Color.alpha(mMutablePolyline.getColor()), new float[] {progress, 1, 1}));
        } else if (seekBar == mAlphaBar) {
            float[] prevHSV = new float[3];
            Color.colorToHSV(mMutablePolyline.getColor(), prevHSV);
            mMutablePolyline.setColor(Color.HSVToColor(progress, prevHSV));
        } else if (seekBar == mWidthBar) {
            mMutablePolyline.setWidth(progress);
        }
    }

   
}



Codice (XML): [Seleziona]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
  <TextView
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:gravity="center_horizontal"
   android:text="@string/properties_sydney_polyline"/>
  <TableLayout
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:stretchColumns="1">
    <TableRow
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:gravity="center_vertical">
      <TextView
       android:text="@string/hue"/>
      <SeekBar
       android:id="@+id/hueSeekBar"/>
    </TableRow>
    <TableRow
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:gravity="center_vertical">
      <TextView
       android:text="@string/alpha"/>
      <SeekBar
       android:id="@+id/alphaSeekBar"/>
    </TableRow>
    <TableRow
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:gravity="center_vertical">
      <TextView
       android:text="@string/width"/>
      <SeekBar
       android:id="@+id/widthSeekBar"/>
    </TableRow>
  </TableLayout>
  <fragment
   android:id="@+id/map"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   class="com.google.android.gms.maps.SupportMapFragment"/>
</LinearLayout>


Codice: [Seleziona]
01-09 21:41:37.301: E/AndroidRuntime(785): FATAL EXCEPTION: main
01-09 21:41:37.301: E/AndroidRuntime(785): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.easyrun/it.easyrun.ViewMap}: android.view.InflateException: Binary XML file line #63: Error inflating class fragment
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.os.Handler.dispatchMessage(Handler.java:99)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.os.Looper.loop(Looper.java:137)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.app.ActivityThread.main(ActivityThread.java:5039)
01-09 21:41:37.301: E/AndroidRuntime(785):         at java.lang.reflect.Method.invokeNative(Native Method)
01-09 21:41:37.301: E/AndroidRuntime(785):         at java.lang.reflect.Method.invoke(Method.java:511)
01-09 21:41:37.301: E/AndroidRuntime(785):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-09 21:41:37.301: E/AndroidRuntime(785):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-09 21:41:37.301: E/AndroidRuntime(785):         at dalvik.system.NativeStart.main(Native Method)
01-09 21:41:37.301: E/AndroidRuntime(785): Caused by: android.view.InflateException: Binary XML file line #63: Error inflating class fragment
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
01-09 21:41:37.301: E/AndroidRuntime(785):         at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.app.Activity.setContentView(Activity.java:1881)
01-09 21:41:37.301: E/AndroidRuntime(785):         at it.easyrun.ViewMap.onCreate(ViewMap.java:138)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.app.Activity.performCreate(Activity.java:5104)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
01-09 21:41:37.301: E/AndroidRuntime(785):         ... 11 more
01-09 21:41:37.301: E/AndroidRuntime(785): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f05000a
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.content.res.Resources.getText(Resources.java:230)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.content.res.Resources.getString(Resources.java:314)
01-09 21:41:37.301: E/AndroidRuntime(785):         at com.google.android.gms.common.GooglePlayServicesUtil.b(Unknown Source)
01-09 21:41:37.301: E/AndroidRuntime(785):         at com.google.android.gms.internal.d.a(Unknown Source)
01-09 21:41:37.301: E/AndroidRuntime(785):         at com.google.android.gms.internal.d.onCreateView(Unknown Source)
01-09 21:41:37.301: E/AndroidRuntime(785):         at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:846)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1061)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1160)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:272)
01-09 21:41:37.301: E/AndroidRuntime(785):         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
01-09 21:41:37.301: E/AndroidRuntime(785):         ... 21 more


A quanto sembra, non trova una risorsa. Ma non riesco a capire come risolvere la cosa.
Faccio notare che il codice è quello che si trova negli esempi della Google Maps Android v2. Una volta che riesco a far funzionare questo, devo fare solo un lavoro di adattamento alla mia app e ho risolto il tutto.

Grazie in anticipo a chi mi sappia aiutare

Offline MisterHide

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:API v2 Sample Code
« Risposta #1 il: 08 Marzo 2013, 10:41:36 CET »
0
Ciao Torsolo86, volevo sapere se avevi risolto il tuo problema perchè sono anche io nella stessa situazione.
Io non so neanche se ho fatto tutti i passaggi giusti : o sono io un asino o si spiegano male quelli di google. :-)
Certo che potevano fare una cosa un po più semplice.

Ti prego fammi sapere che sono nei casini.
ciao e grazie.

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:API v2 Sample Code
« Risposta #2 il: 08 Marzo 2013, 11:07:40 CET »
+1
La libreria di supporto (android-support-v4.jar) l'avete messa correttamente?
I numeri contano molto di più del seme.

Offline MisterHide

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:API v2 Sample Code
« Risposta #3 il: 08 Marzo 2013, 11:35:56 CET »
0
Ciao eagledeveloper innanzitutto grazie per avermi risposto.
Allora sto iniziando tutto dinuovo e cosi cerco di seguire passo - passo
ti spiego i passaggi che ho fatto finora, mi potresti dire se sono corretti e togliermi gentilmente i dubbi che ho :
- Nuovo Workspace -> TestMappe
- import -> existing android code into workspace
- browse -> ho selezionato la cartella C:\adt-bundle-windows-x86\sdk\extras\google\google_play_services\libproject\google-play-services_lib
- spuntato copy project into workspace - finish
- new android apllication project 

QUI Che devo mettere in Compile With (cioè lascio API 17 Android 4.2 jellybean o Google Apis ???

- in Application Name : DemoMappe quindi il mio package è com.example.DemoMappe ed è questo che devo indicare nella creazione della API-KEY ???

- click dx su DemoMappe - properties - android    QUI Che devo selezionare come target ?

- add e ho selezionato google-play-service_libs
Qui dove dice "islibrary" devo spuntare ?

Grazie per il tuo tempo.

EDIT: Sono riuscito finalmente a vedere la mappa EVVAI  :-) a volte mi incarto e faccio errori stupidissimissimi
Grazie lo stesso ... ehm speriamo di filare liscio da ora in poi  :-\
« Ultima modifica: 08 Marzo 2013, 12:45:07 CET da MisterHide »

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:API v2 Sample Code
« Risposta #4 il: 08 Marzo 2013, 13:10:51 CET »
0
Ottimo se avessi ancora bisogno non esitare :)
I numeri contano molto di più del seme.