Autore Topic: Inserire posizione gps in un database  (Letto 933 volte)

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Inserire posizione gps in un database
« il: 14 Gennaio 2011, 12:26:07 CET »
0
Ciao a tutti sto sviluppando una app in cui posso inserire, tramite edit text, un nome associato alla mia posizione e poi acquisendo la latitudine e la longitudine salvare il tutto in una tabella del tipo

ID POS LAT LONG

Volevo sapere come posso aggiungere le mie coordinate al database?Tramite un location listener?
Il codice relativo alla Activity con la edit text  è il seguente
Codice (Java): [Seleziona]
       
        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.salva);      
        // Otteniamo il riferimento alla EditText di input
        final EditText inputText = (EditText)findViewById(R.id.inputText);
        // Gestiamo il bottone
        Button save = (Button)findViewById(R.id.save);
        // Creiamo ed apriamo il nuovo database
        db=new Database(getApplicationContext());        
        db.open();  
        save.setOnClickListener(new OnClickListener(){
            @Override
                        public void onClick(View v) {
                                // Leggiamo il valore inserito
                                Editable text = inputText.getText();
                                db.open();
                                // Inseriamo i valori nel database
                                db.insertPosition(text, , );
               
                        }});
       
    }
}
questo è il codice relativo al database
Codice (Java): [Seleziona]
package it.compass;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;




public class Database {
        // Dichiariamo il database
        SQLiteDatabase mDb;
        DbHelper mDbHelper;
    Context mContext;
   
    // Nome del database  
    private static final String DB_NAME="Posizioni";
   
    // Numero della versione del nostro    
    private static final int DB_VERSION=1;
   
    public Database(Context ctx){
        mContext = ctx;
        mDbHelper = new DbHelper(ctx, DB_NAME, null, DB_VERSION);      
    }
   
    // Apriamo il nostro database che è leggibile/scrivibile
    public void open(){  
        mDb = mDbHelper.getWritableDatabase();      
    }
   
    // Chiudiamo il database
    public void close(){
        mDb.close();
    }
   
    // Metodo per inserire i dati
    public void insertPosition(String pos, double lat, double log) {
        ContentValues cv=new ContentValues();
        cv.put(PositionsMetaData.POSITION_NAME_KEY, pos);
        cv.put(PositionsMetaData.POSITION_LATITUDE_KEY, lat);
        cv.put(PositionsMetaData.POSITION_LONGITUDE_KEY, log);
        mDb.insert(PositionsMetaData.POSITIONS_TABLE, null, cv);
    }
   
    // Metodo per fare la query di tutti i dati
    public Cursor fetchPosition(){
        return mDb.query(PositionsMetaData.POSITIONS_TABLE, null,null,null,null,null,null);
    }
   
    // I Metadati della tabella
    static class PositionsMetaData {
          static final String POSITIONS_TABLE = "Posizioni";
          static final String ID = "_id";
          static final String POSITION_NAME_KEY = "Nome";
          static final String POSITION_LATITUDE_KEY = "Latitudine";
          static final String POSITION_LONGITUDE_KEY = "Longitudine";
    }
   
    // Scriviamo il codice SQL di creazione della tabella
    private static final String POSITIONS_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  
        + PositionsMetaData.POSITIONS_TABLE + " ("
        + PositionsMetaData.ID+ " integer primary key autoincrement, "
        + PositionsMetaData.POSITION_NAME_KEY + " text not null, "
        + PositionsMetaData.POSITION_LATITUDE_KEY + " double not null, "
        + PositionsMetaData.POSITION_LONGITUDE_KEY + " double not null)";;
   
    // Questa classe ci aiuta nella creazione del database
    private class DbHelper extends SQLiteOpenHelper {
        public DbHelper(Context context, String name, CursorFactory factory, int version){
                super(context, name, factory, version);
        }
       
        // Creiamo la tabella quando viene creato il Database
        public void onCreate(SQLiteDatabase _db){
                _db.execSQL(POSITIONS_TABLE_CREATE);
        }
       
        // Qui mettiamo eventuali modifiche al db, se nella nostra nuova versione della app,
        // il db cambia numero di versione
        public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
        }
    }
}
e questo è il codice xml del mio layout
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">

<Button
      android:id="@+id/save"
      android:layout_width="126px"
      android:layout_height="wrap_content"
      android:text="Salva"
      android:layout_x="99px"
      android:layout_y="185px">
</Button>

<EditText
      android:id="@+id/inputText"
      android:layout_width="276px"
      android:layout_height="wrap_content"
      android:textSize="18sp"
      android:layout_x="24px"
      android:layout_y="111px">
</EditText>

<TextView
      android:id="@+id/txt"
      android:layout_width="240px"
      android:layout_height="32px"
      android:text="Salva posizione con nome"
      android:textSize="20sp"
      android:layout_x="42px"
      android:layout_y="59px">
</TextView>

</AbsoluteLayout>

Grazie a tutti e spero di non aver sbagliato sezione   :-[
« Ultima modifica: 14 Gennaio 2011, 17:18:23 CET da brastolfo »

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Inserire posizione gps in un database
« Risposta #1 il: 14 Gennaio 2011, 12:41:19 CET »
0
Non ho ben capito.. Il tuo problema é come inserire le coordinate nel database o come ottenerle?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Inserire posizione gps in un database
« Risposta #2 il: 14 Gennaio 2011, 12:53:38 CET »
0
il mio problema è come ottenerle e poi come inserirle  :-P
In pratica l'utente inserisce in una edit text il nome della posizione da salvare e preme il pulsante salva..il programma salva questo nome
nel database alla voce "Posizione" e recuperando la latitudine e la longitudine del luogo in cui mi trovo le associa nel database alla "Posizione" creandomi cosi la prima riga di una tabella fatta in questo modo
ID POS LAT LON

scusami non so se sono stato chiaro  :-[

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Inserire posizione gps in un database
« Risposta #3 il: 14 Gennaio 2011, 17:19:49 CET »
0
piccolo aggiornamento ho cambiato il codice dell'activity in questo modo..secondo voi cosi dovrebbe andar bene?

Codice (Java): [Seleziona]
import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.text.Editable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;


public class SalvaActivity extends Activity {
    private Database db;
    //coordinate
    Double lat=10.0;
    Double lon=40.0;
       
        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.salva);      
        // Otteniamo il riferimento alla EditText di input
        final EditText inputText = (EditText)findViewById(R.id.inputText);
        // Gestiamo il bottone
        Button save = (Button)findViewById(R.id.save);
        // Creiamo ed apriamo il nuovo database
        db=new Database(getApplicationContext());        
        db.open();  
        //Otteniamo le coordinate
        LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        LocationListener locListener = new LocationListener()  {               
             public void onLocationChanged(Location loc) {                    
                lat=loc.getLatitude();
                lon=loc.getLongitude();
             }              
             public void onProviderDisabled(String provider) {              
                Toast.makeText( getApplicationContext(),"Gps Disabled",Toast.LENGTH_SHORT ).show();
             }
             public void onProviderEnabled(String provider) {              
                Toast.makeText( getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show();
             }
             public void onStatusChanged(String provider, int status, Bundle extras) {              
             }
        };
        locManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, locListener);                
        save.setOnClickListener(new OnClickListener(){
                     public void onClick(View v) {
                                // Leggiamo il valore inserito
                                Editable text = inputText.getText();
                                db.open();                             
                // Inseriamo i valori nel database
                                db.insertPosition(text.toString(), lat, lon);                
             }        
        });
    }
}

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Inserire posizione gps in un database
« Risposta #4 il: 15 Gennaio 2011, 12:10:16 CET »
0
Non ci sta nessuno che riesce ad aiutarmi? Cmq gli errori che mi da al momento del salvataggio sono i seguente:

Codice: [Seleziona]
01-15 11:07:15.558: ERROR/AndroidRuntime(325): FATAL EXCEPTION: main
01-15 11:07:15.558: ERROR/AndroidRuntime(325): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.compass/it.compass.SalvaActivity}: java.lang.SecurityException: Requires ACCESS_FINE_LOCATION permission
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.os.Looper.loop(Looper.java:123)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.app.ActivityThread.main(ActivityThread.java:4627)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at java.lang.reflect.Method.invokeNative(Native Method)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at java.lang.reflect.Method.invoke(Method.java:521)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at dalvik.system.NativeStart.main(Native Method)
01-15 11:07:15.558: ERROR/AndroidRuntime(325): Caused by: java.lang.SecurityException: Requires ACCESS_FINE_LOCATION permission
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.os.Parcel.readException(Parcel.java:1247)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.os.Parcel.readException(Parcel.java:1235)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:516)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.location.LocationManager._requestLocationUpdates(LocationManager.java:711)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.location.LocationManager.requestLocationUpdates(LocationManager.java:630)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at it.compass.SalvaActivity.onCreate(SalvaActivity.java:51)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
01-15 11:07:15.558: ERROR/AndroidRuntime(325):     ... 11 more

Offline IacopoDeeNosee

  • Utente junior
  • **
  • Post: 128
  • Respect: +33
    • Google+
    • iacopodeenosee
    • Mostra profilo
    • visualhunter
  • Dispositivo Android:
    Samsung Nexus S - GT-I9023
  • Play Store ID:
    IacopoDeeNosee
  • Sistema operativo:
    Arch linux x86_64
Re:Inserire posizione gps in un database
« Risposta #5 il: 15 Gennaio 2011, 12:15:08 CET »
0
l'errore è descritto bene nel logcat:
Citazione
...
Caused by: java.lang.SecurityException: Requires ACCESS_FINE_LOCATION permission
...
dovresti aggiungere nel manifest il permesso per localizzare il dispositivo.[1a0

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Inserire posizione gps in un database
« Risposta #7 il: 15 Gennaio 2011, 12:33:28 CET »
0
l'errore è descritto bene nel logcat:dovresti aggiungere nel manifest il permesso per localizzare il dispositivo.[1a0
si l'ho già inserito ma purtroppo non va cmq... :-(
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="it.compass"
     android:versionCode="1"
     android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".CompassActivity"
                 android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       
        <activity android:name=".InviaActivity"
                 android:label="@string/app_name">
        </activity>
               
        <activity android:name=".NavigaActivity"
                 android:label="@string/app_name">
        </activity>
       
         <activity android:name=".SalvaActivity"
                 android:label="@string/app_name">
        </activity>  
         
    <uses-library android:name="com.google.android.maps" />            
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_GPS" />
   
    </application>
    <uses-sdk android:minSdkVersion="8" />

   

</manifest>

Ho seguito anche il tutorial ma purtroppo è leggermente diverso da quello che devo fare io...