2015-03-30 4 views
-1

Я работаю над приложением для Android, связанным с Google mapss.Когда я пытаюсь дать значениям управления эмулятором, это не дает выводов на карте, что я хочу. Может ли кто-нибудь помочь мне? Вот мой MapsActivity.java:данные карты google не сохраняются должным образом в базе данных

package com.example.user.suraksha; 

import android.content.ContentValues; 
import android.content.IntentSender; 
import android.database.sqlite.SQLiteConstraintException; 
import android.database.sqlite.SQLiteDatabase; 
import android.location.Address; 
import android.location.Geocoder; 
import android.location.Location; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.LocationListener; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationServices; 
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.MarkerOptions; 

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 

public class MapsActivity extends FragmentActivity implements 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener, 
     LocationListener { 
    public static final String TAG = MapsActivity.class.getSimpleName(); 
    /* 
    * Define a request code to send to Google Play services 
    * This code is returned in Activity.onActivityResult 
    */ 
    private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000; 
    private GoogleMap mMap; // Might be null if Google Play services APK is not available. 
    private GoogleApiClient mGoogleApiClient; 
    private LocationRequest mLocationRequest; 
    MySqlHelper mDbHelper = new MySqlHelper(this); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     setUpMapIfNeeded(); 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
// Create the LocationRequest object 
     mLocationRequest = LocationRequest.create() 
       .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 
       .setInterval(10 * 1000) // 10 seconds, in milliseconds 
       .setFastestInterval(1 * 1000); // 1 second, in milliseconds 
    } 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     setUpMapIfNeeded(); 
     mGoogleApiClient.connect(); 
    } 
    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (mGoogleApiClient.isConnected()) { 
      LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
      mGoogleApiClient.disconnect(); 
     } 
    } 
    /** 
    * Sets up the map if it is possible to do so (i.e., the Google Play services APK is correctly 
    * installed) and the map has not already been instantiated.. This will ensure that we only ever 
    * call {@link #setUpMap()} once when {@link #mMap} is not null. 
    * <p/> 
    * If it isn't installed {@link SupportMapFragment} (and 
    * {@link com.google.android.gms.maps.MapView MapView}) will show a prompt for the user to 
    * install/update the Google Play services APK on their device. 
    * <p/> 
    * A user can return to this FragmentActivity after following the prompt and correctly 
    * installing/updating/enabling the Google Play services. Since the FragmentActivity may not 
    * have been completely destroyed during this process (it is likely that it would only be 
    * stopped or paused), {@link #onCreate(Bundle)} may not be called again so we should call this 
    * method in {@link #onResume()} to guarantee that it will be called. 
    */ 
    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(); 
      } 
     } 
    } 
    /** 
    * This is where we can add markers or lines, add listeners or move the camera. In this case, we 
    * just add a marker near Africa. 
    * <p/> 
    * This should only be called once and when we are sure that {@link #mMap} is not null. 
    */ 
    private void setUpMap() { 
     mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
    } 
    private void handleNewLocation(Location location) { 
     Log.d(TAG, location.toString()); 
     double currentLatitude = location.getLatitude(); 
     double currentLongitude = location.getLongitude(); 
     LatLng latLng = new LatLng(currentLatitude, currentLongitude); 
//mMap.addMarker(new MarkerOptions().position(new LatLng(currentLatitude, currentLongitude)).title("Current Location")); 
     Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault()); 
     String add = ""; 
     try{ 
      List<Address> addresses = geocoder.getFromLocation(currentLatitude, currentLongitude, 1); 
      if (addresses != null && addresses.size() > 0) { 
       StringBuilder result = new StringBuilder(); 
       for(int i = 0; i < addresses.size(); i++){ 
        Address address = addresses.get(i); 
        int maxIndex = address.getMaxAddressLineIndex(); 
        for (int x = 0; x <= maxIndex; x++){ 
         result.append(address.getAddressLine(x)); 
         result.append(","); 
        } 
        result.append(address.getLocality()); 
        result.append(","); 
        result.append(address.getPostalCode()); 
        result.append("\n\n"); 
       } 

       add = result.toString(); 
      } 

     }catch (Exception e){ 
      e.printStackTrace(); 
      Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
     SQLiteDatabase db = mDbHelper.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     try { 
      values.put("loc_longitude", currentLongitude); 
      values.put("loc_latitude", currentLatitude); 
      values.put("loc_title", add); 
      long newrowid = db.insert("Location", null, values); 
     }catch(SQLiteConstraintException e){ 
      e.printStackTrace(); 
     } 
     MarkerOptions options = new MarkerOptions() 
       .position(latLng) 
       .title(add); 
     mMap.addMarker(options); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
    } 
    @Override 
    public void onConnected(Bundle bundle) { 
     Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
     if (location == null) { 
      LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 
     } 
     else { 
      handleNewLocation(location); 
     } 
    } 
    @Override 
    public void onConnectionSuspended(int i) { 
    } 
    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
/* 
* Google Play services can resolve some errors it detects. 
* If the error has a resolution, try sending an Intent to 
* start a Google Play services activity that can resolve 
* error. 
*/ 
     if (connectionResult.hasResolution()) { 
      try { 
// Start an Activity that tries to resolve the error 
       connectionResult.startResolutionForResult(this, CONNECTION_FAILURE_RESOLUTION_REQUEST); 
/* 
* Thrown if Google Play services canceled the original 
* PendingIntent 
*/ 
      } catch (IntentSender.SendIntentException e) { 
// Log the error 
       e.printStackTrace(); 
      } 
     } else { 
/* 
* If no resolution is available, display a dialog to the 
* user with the error. 
*/ 
      Log.i(TAG, "Location services connection failed with code " + connectionResult.getErrorCode()); 
     } 
    } 
    @Override 
    public void onLocationChanged(Location location) { 
     handleNewLocation(location); 
    } 
} 

А вот мой MySqlHelper.java: пакет com.example.user.suraksha;

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

/** 
* Created by user on 3/29/2015. 
*/ 

public class MySqlHelper extends SQLiteOpenHelper{ 
    public static final String TABLE_NAME = "Location"; 

    public static final String ID_SQL = "loc_id"; 
    public static final String TITLE = "loc_title"; 
    public static final String LONGITUDE = "loc_longitude"; 
    public static final String LATITUDE = "loc_latitude"; 
    public static final String POSITION = "loc_position"; 

    public static final int D_VERSION = 1; 
    public static final String DB_NAME = "markerlocations.db"; 

    public static final String DB_CREATE = 
      "create table Location (loc_id integer autoincrement,loc_longitude float , loc_latitude float, loc_title text , loc_position text,primary key(loc_id));"; 

    public MySqlHelper(Context context) { 
     super(context, DB_NAME, null, D_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(DB_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME); 
     onCreate(db); 
    } 
} 

А вот мои ошибки LogCat:

03-30 19:23:55.980: E/ConnectivityService(387): Exception trying to add a route: java.lang.IllegalStateException: command '16 interface fwmark exempt add 10.0.2.2/32' failed with '400 16 Failed to add exemption rule (File exists)' 
03-30 19:23:56.120: E/logwrapper(772): executing /system/bin/ip failed: No such file or directory 
03-30 19:25:10.630: E/JavaBinder(670): java.lang.RuntimeException: android.os.DeadObjectException 
03-30 19:25:10.630: E/JavaBinder(670):  at android.os.Parcel.writeException(Parcel.java:1366) 
03-30 19:25:10.630: E/JavaBinder(670):  at android.os.Binder.execTransact(Binder.java:410) 
03-30 19:25:10.630: E/JavaBinder(670):  at dalvik.system.NativeStart.run(Native Method) 
03-30 19:25:10.630: E/JavaBinder(670): Caused by: android.os.DeadObjectException 
03-30 19:25:10.630: E/JavaBinder(670):  at android.os.BinderProxy.transact(Native Method) 
03-30 19:25:10.630: E/JavaBinder(670):  at android.content.IIntentReceiver$Stub$Proxy.performReceive(IIntentReceiver.java:124) 
03-30 19:25:10.630: E/JavaBinder(670):  at android.app.ActivityThread$ApplicationThread.scheduleRegisteredReceiver(ActivityThread.java:816) 
03-30 19:25:10.630: E/JavaBinder(670):  at android.app.ApplicationThreadNative.onTransact(ApplicationThreadNative.java:394) 
03-30 19:25:10.630: E/JavaBinder(670):  at android.os.Binder.execTransact(Binder.java:404) 
03-30 19:26:35.210: E/SQLiteDatabase(1015): Error inserting loc_latitude=37.422005 loc_longitude=-100.084095 loc_title= 
03-30 19:26:35.210: E/SQLiteDatabase(1015): android.database.sqlite.SQLiteConstraintException: columns loc_longitude, loc_latitude are not unique (code 19) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at com.example.user.suraksha.MapsActivity.handleNewLocation(MapsActivity.java:144) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at com.example.user.suraksha.MapsActivity.onLocationChanged(MapsActivity.java:194) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at com.google.android.gms.internal.zzpe$zza.handleMessage(Unknown Source) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at android.os.Handler.dispatchMessage(Handler.java:102) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at android.os.Looper.loop(Looper.java:136) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at java.lang.reflect.Method.invoke(Method.java:515) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
03-30 19:26:35.210: E/SQLiteDatabase(1015):  at dalvik.system.NativeStart.main(Native Method) 
03-30 19:26:38.930: E/StrictMode(620): A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks. 
03-30 19:26:38.930: E/StrictMode(620): java.lang.Throwable: Explicit termination method 'close' not called 
03-30 19:26:38.930: E/StrictMode(620):  at dalvik.system.CloseGuard.open(CloseGuard.java:184) 
03-30 19:26:38.930: E/StrictMode(620):  at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:278) 
03-30 19:26:38.930: E/StrictMode(620):  at android.net.SSLCertificateSocketFactory.verifyHostname(SSLCertificateSocketFactory.java:190) 
03-30 19:26:38.930: E/StrictMode(620):  at android.net.SSLCertificateSocketFactory.createSocket(SSLCertificateSocketFactory.java:435) 
03-30 19:26:38.930: E/StrictMode(620):  at com.android.okhttp.Connection.upgradeToTls(Connection.java:131) 
03-30 19:26:38.930: E/StrictMode(620):  at com.android.okhttp.Connection.connect(Connection.java:107) 
03-30 19:26:38.930: E/StrictMode(620):  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294) 
03-30 19:26:38.930: E/StrictMode(620):  at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 
03-30 19:26:38.930: E/StrictMode(620):  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 
03-30 19:26:38.930: E/StrictMode(620):  at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 
03-30 19:26:38.930: E/StrictMode(620):  at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89) 
03-30 19:26:38.930: E/StrictMode(620):  at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197) 
03-30 19:26:38.930: E/StrictMode(620):  at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:254) 
03-30 19:26:38.930: E/StrictMode(620):  at com.google.android.gms.http.GoogleHttpClient.a(SourceFile:913) 
03-30 19:26:38.930: E/StrictMode(620):  at com.google.android.gms.http.GoogleHttpClient.b(SourceFile:759) 
03-30 19:26:38.930: E/StrictMode(620):  at com.google.android.gms.http.GoogleHttpClient.execute(SourceFile:663) 
03-30 19:26:38.930: E/StrictMode(620):  at com.google.android.gms.http.GoogleHttpClient.execute(SourceFile:654) 
03-30 19:26:38.930: E/StrictMode(620):  at com.google.android.gms.playlog.uploader.e.a(SourceFile:346) 
03-30 19:26:38.930: E/StrictMode(620):  at com.google.android.gms.playlog.uploader.e.a(SourceFile:232) 
03-30 19:26:38.930: E/StrictMode(620):  at com.google.android.gms.playlog.uploader.e.a(SourceFile:204) 
03-30 19:26:38.930: E/StrictMode(620):  at com.google.android.gms.playlog.uploader.UploaderService.a(SourceFile:52) 
03-30 19:26:38.930: E/StrictMode(620):  at com.google.android.gms.gcm.ap.run(SourceFile:131) 

ответ

0

MapActivityForAddress.java

public class MapActivityForAddress extends Activity implements LocationListener, OnMyLocationButtonClickListener { 

    private GoogleMap googleMap; 
    LocationManager locationManager; 
    Location location; 
    Geocoder geocoder; 
    List<Address> addresses; 
    CameraUpdate cameraUpdate; 
    double latitude, longitude; 
    String zip, city, state, country, mediaPath, mediaDate, mediaTime, mediaLongitude, mediaLatitude; 
    int position = 0; 
    String title = ""; 
    DatabaseHelper dbHelper; 
    Button next; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.map_activity_for_address); 

     if (!isGooglePlayServicesAvailable()) { 
      finish(); 
     } 
     MapFragment supportMapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapforAddress); 
     next = (Button) findViewById(R.id.btnMapNext); 
     dbHelper = new DatabaseHelper(getApplicationContext()); 

     googleMap = supportMapFragment.getMap(); 
     googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
     googleMap.setMyLocationEnabled(true); 
     // googleMap.setOnMyLocationButtonClickListener(this); 
     googleMap.getUiSettings().setZoomControlsEnabled(true); 

     googleMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 

      @Override 
      public void onMapLongClick(LatLng arg0) { 
       googleMap.clear(); 
       latitude = arg0.latitude; 
       longitude = arg0.longitude; 
       zip = null; 
       city = null; 
       state = null; 
       country = null; 

       geocoder = new Geocoder(MapActivityForAddress.this, Locale.getDefault()); 
       try { 

        addresses = geocoder.getFromLocation(latitude, longitude, 1); 
        if (addresses != null && addresses.size() > 0) { 

         title = ""; 
         zip = addresses.get(0).getPostalCode(); 
         city = addresses.get(0).getLocality(); 
         state = addresses.get(0).getAdminArea(); 
         country = addresses.get(0).getCountryName(); 
         if (zip != null) { 
          title += zip + ", "; 
         } 
         if (city != null) { 
          title += city + ", "; 
         } 
         if (state != null) { 
          title += state + ", "; 
         } 
         if (country != null) { 
          title += country; 
         } 
        } else { 
         title = "Unknown Location"; 
        } 

       } catch (IOException e) { 

        e.printStackTrace(); 
       } 
       googleMap.addMarker(new MarkerOptions().position(arg0).title(title)); 

      } 
     }); 
     next.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       if (!title.trim().isEmpty() && title != null) { 

        finish(); 
       } else { 
        Toast.makeText(getApplicationContext(), "Select Location First", Toast.LENGTH_LONG).show(); 

       } 

      } 
     }); 



// place this function on your button click 
dbHelper.insertMedia(mediaAddress, mediaLongitude, mediaLatitude); 
     } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
     if (location != null) { 
      LatLng latLang = new LatLng(location.getLatitude(), location.getLongitude()); 
      cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLang, 17); 
      googleMap.animateCamera(cameraUpdate); 

     } 

    } 

    @Override 
    public void onBackPressed() { 

    } 

    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    private boolean isGooglePlayServicesAvailable() { 
     int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
     if (ConnectionResult.SUCCESS == status) { 
      return true; 
     } else { 
      GooglePlayServicesUtil.getErrorDialog(status, this, 0).show(); 
      return false; 
     } 
    } 

    @Override 
    public boolean onMyLocationButtonClick() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

} 

DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "MapDatabase.db"; 


    private static final int DATABASE_VERSION = 1; 

    Cursor cur; 
    SQLiteDatabase db; 
    ContentValues values; 

    // Table Names 

    private static final String INCIDENT = "incident"; 


    // Table Create Statements 

    // INCIDENT table create statement 
    private static final String CREATE_TABLE_INCIDENT = "CREATE TABLE "+ INCIDENT + " (sr_no INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, mediaAddress text,mediaLongitude text,mediaLatitude text)"; 

    public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL(CREATE_TABLE_INCIDENT); 

    } 

    public void insertMedia(String mAddress, String mLongitude, String mLatitude) { 
     db = this.getWritableDatabase(); 

     values = new ContentValues(); 
     cur = db.query(INCIDENT, null, null, null, null, null, null); 
     cur.moveToFirst(); 

     values.put("mediaAddress", mAddress); 
     values.put("mediaLongitude", mLongitude); 
     values.put("mediaLatitude", mLatitude); 

     db.insert(INCIDENT, null, values); 
     db.close(); 


    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

} 
+0

вы можете дать мне полные коды и Classe s? – user3215150

+0

он дает ошибку на getmap и insertMedia – user3215150

+0

см. Мой обновленный ответ ... –

Смежные вопросы