Click here to Skip to main content
15,906,816 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
http://wptrafficanalyzer.in/blog/storing-and-retrieving-locations-in-sqlite-from-google-maps-android-api-v2/#comment-255841
i have tried tis code but got an error unfortunatelly stopped.Any one help me
Posted

You should post a comment at the very blog page.
 
Share this answer
 
Comments
anamicaa 20-May-14 5:40am    
res/layout/activity_main.xml
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
="" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">

<fragment
android:id="@+id/map"
="" android:layout_width="match_parent" android:layout_height="match_parent">

anamicaa 20-May-14 5:40am    
/LocationsDB.java
package in.wptrafficanalyzer.locationmarkersqlite;

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

public class LocationsDB extends SQLiteOpenHelper{

/** Database name */
private static String DBNAME = "locationmarkersqlite";

/** Version number of the database */
private static int VERSION = 1;

/** Field 1 of the table locations, which is the primary key */
public static final String FIELD_ROW_ID = "_id";

/** Field 2 of the table locations, stores the latitude */
public static final String FIELD_LAT = "lat";

/** Field 3 of the table locations, stores the longitude*/
public static final String FIELD_LNG = "lng";

/** Field 4 of the table locations, stores the zoom level of map*/
public static final String FIELD_ZOOM = "zom";

/** A constant, stores the the table name */
private static final String DATABASE_TABLE = "locations";

/** An instance variable for SQLiteDatabase */
private SQLiteDatabase mDB;

/** Constructor */
public LocationsDB(Context context) {
super(context, DBNAME, null, VERSION);
this.mDB = getWritableDatabase();
}

/** This is a callback method, invoked when the method getReadableDatabase() / getWritableDatabase() is called
* provided the database does not exists
* */
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table " + DATABASE_TABLE + " ( " +
FIELD_ROW_ID + " integer primary key autoincrement , " +
FIELD_LNG + " double , " +
FIELD_LAT + " double , " +
FIELD_ZOOM + " text " +
" ) ";

db.execSQL(sql);
}

/** Inserts a new location to the table locations */
public long insert(ContentValues contentValues){
long rowID = mDB.insert(DATABASE_TABLE, null, contentValues);
return rowID;
}

/** Deletes all locations from the table */
public int del(){
int cnt = mDB.delete(DATABASE_TABLE, null , null);
return cnt;
}

/** Returns all the locations from the table */
public Cursor getAllLocations(){
return mDB.query(DATABASE_TABLE, new String[] { FIELD_ROW_ID, FIELD_LAT , FIELD_LNG, FIELD_ZOOM } , null, null, null, null, null);
}

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

}
anamicaa 20-May-14 5:41am    
/LocationsContentProvider.java
package in.wptrafficanalyzer.locationmarkersqlite;

import java.sql.SQLException;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.net.Uri;

/** A custom Content Provider to do the database operations */
public class LocationsContentProvider extends ContentProvider{

public static final String PROVIDER_NAME = "in.wptrafficanalyzer.locationmarkersqlite.locations";

/** A uri to do operations on locations table. A content provider is identified by its uri */
public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/locations" );

/** Constant to identify the requested operation */
private static final int LOCATIONS = 1;

private static final UriMatcher uriMatcher ;

static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(PROVIDER_NAME, "locations", LOCATIONS);
}

/** This content provider does the database operations by this object */
LocationsDB mLocationsDB;

/** A callback method which is invoked when the content provider is starting up */
@Override
public boolean onCreate() {
mLocationsDB = new LocationsDB(getContext());
return true;
}

/** A callback method which is invoked when insert operation is requested on this content provider */
@Override
public Uri insert(Uri uri, ContentValues values) {
long rowID = mLocationsDB.insert(values);
Uri _uri=null;
if(rowID>0){
_uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
}else {
try {
throw new SQLException("Failed to insert : " + uri);
} catch (SQLException e) {
e.printStackTrace();
}
}
return _uri;
}

@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}

/** A callback method which is invoked when delete operation is requested on this content provider */
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int cnt = 0;
cnt = mLocationsDB.del();
return cnt;
}

/** A callback method which is invoked by default content uri */
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

if(uriMatcher.match(uri)==LOCATIONS){
return mLocationsDB.getAllLocations();
}
return null;
}

@Override
public String getType(Uri uri) {
return null;
}
}
anamicaa 20-May-14 5:41am    
/MainActivity.java
package in.wptrafficanalyzer.locationmarkersqlite;

import android.app.Dialog;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.view.Menu;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends FragmentActivity implements LoaderCallbacks<cursor> {

GoogleMap googleMap;

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

// Getting Google Play availability status
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

// Showing status
if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

int requestCode = 10;
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
dialog.show();

}else { // Google Play Services are available

// Getting reference to the SupportMapFragment of activity_main.xml
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

// Getting GoogleMap object from the fragment
googleMap = fm.getMap();

// Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);

// Invoke LoaderCallbacks to retrieve and draw already saved locations in map
getSupportLoaderManager().initLoader(0, null, this);
}

googleMap.setOnMapClickListener(new OnMapClickListener() {

@Override
public void onMapClick(LatLng point) {

// Drawing marker on the map
drawMarker(point);

// Creating an instance of ContentValues
ContentValues contentValues = new ContentValues();

// Setting latitude in ContentValues
contentValues.put(LocationsDB.FIELD_LAT, point.latitude );

// Setting longitude in ContentValues
contentValues.put(LocationsDB.FIELD_LNG, point.longitude);

// Setting zoom in ContentValues
contentValues.put(LocationsDB.FIELD_ZOOM, googleMap.getCameraPosition().zoom);

// Creating an instance of LocationInsertTask
LocationInsertTask insertTask = new LocationInsertTask();

// Storing the latitude, longitude and zoom level to SQLite database
insertTask.execute(contentValues);

Toast.makeText(getBaseContext(), "Marker is added to the Map", Toast.LENGTH_SHORT).show();
}
});

googleMap.setOnMapLongClickListener(new OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng point) {

// Removing all markers from the Google Map
googleMap.clear();

// Creating an instance of LocationDeleteTask
LocationDeleteTask deleteTask = new LocationDeleteTask();

// Deleting all the rows from SQLite database table
deleteTask.execu
anamicaa 20-May-14 5:41am    
AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
="" package="in.wptrafficanalyzer.locationmarkersqlite" android:versioncode="1" android:versionname="1.0">

<uses-sdk
android:minsdkversion="8"
="" android:targetsdkversion="17">

<permission
android:name="in.wptrafficanalyzer.locationmarkersqlite.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>

<uses-permission android:name="in.wptrafficanalyzer.locationmarkersqlite.permission.MAPS_RECEIVE">

<uses-permission android:name="android.permission.INTERNET">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">

<uses-feature
android:glesversion="0x00020000"
="" android:required="true">

<application
android:allowbackup="true"
="" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
<activity
android:name="in.wptrafficanalyzer.locationmarkersqlite.MainActivity"
="" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN">
<category android:name="android.intent.category.LAUNCHER">



<provider
android:name="LocationsContentProvider"
android:authorities="in.wptrafficanalyzer.locationmarkersqlite.locations"
android:exported="false" />

<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="YOUR_ANDROID_API_KEY" />

Hi anamicaa,
have You refer LogCat??
It gives more help in this state.. :)
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900