Android MapActivity googlemaps : Couldn't get connection factory client

4.5k Views Asked by At

I'm working with googlemaps V2 and I've made my google api key V2. First time I run this program it's work and then when I run it again until this time, its always can't show the map and only coordinate that I give. And when I see the logcat the error was "Couldn't get connection factory client". And when I open my map.xml graphical layout there's show "Failed to find style 'mapViewStyle' in current theme".

Anyone can help me how to fix the problem so the program can show the map? Thank you so much.

enter image description here

enter image description here

anyone know how to fix it? thank you so much.

this my mapactivity

package unai.s1.skripsi.atm;

import greendroid.widget.ActionBar;
import greendroid.widget.ActionBar.Type;

import java.util.List;

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import unai.s1.skripsi.R;
import unai.s1.skripsi.atm.TowerController;
import unai.s1.skripsi.atm.TowerModel;
import unai.s1.skripsi.atm.MapOverlay;


public class Map extends MapActivity {

private MapView mapView;
private ActionBar actionBar;
private MapController mapController;
private GeoPoint gpUser, p;
private SharedPreferences prefLocation;

private Context mContext;
String lat, lon, name, alamat;
@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.map);
    mContext = this;

    actionBar = (ActionBar) findViewById(R.id.myActionBar);
    actionBar.setTitle("Bandung Tour Guide");
    actionBar.setType(Type.Empty);
    actionBar.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });
    actionBar.getHandler();


    initMap();
}

@SuppressWarnings("deprecation")
public void initMap() {
    mapView = (MapView) findViewById(R.id.map);
    View zoomView = mapView.getZoomControls();
    LinearLayout myzoom = (LinearLayout) findViewById(R.id.zoom);
    myzoom.addView(zoomView);
    mapView.setStreetView(false);
    mapView.setBuiltInZoomControls(true);
    mapView.displayZoomControls(true);
    // Untuk mengambil lokasi user saat ini
    prefLocation = mContext.getSharedPreferences("mkul", 0);
    double latUser = Double.parseDouble(prefLocation.getString("userLat",
            "0"));
    double lonUser = Double.parseDouble(prefLocation.getString("userLon",
            "0"));
    gpUser = new GeoPoint((int) (latUser * 1E6), (int) (lonUser * 1E6));

    mapController = mapView.getController();

    TowerController rc = new TowerController(mContext);
    List<TowerModel> lsRm = rc.getAll();

    for (int i = 0; i < lsRm.size(); i++) {
        TowerModel poi = lsRm.get(i);

        lat = poi.getLat();
        lon = poi.getLon();
        name = poi.getName();
        alamat = poi.getAddress();

        String coordinates[] = {lat, lon};

        double lati = Double.parseDouble(coordinates[0]);
        double longi = Double.parseDouble(coordinates[1]);

        p = new GeoPoint((int) (lati * 1E6), (int) (longi * 1E6));

        List<Overlay> mapOverlays = mapView.getOverlays();
        int draw = R.drawable.marker;
        Drawable drawable = this.getResources().getDrawable(draw);
        MapOverlay itemizedoverlay = new MapOverlay(drawable,mContext,poi);
        OverlayItem overlayitem = new OverlayItem(p, name, alamat);
        itemizedoverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedoverlay);
    }
    mapController.animateTo(gpUser);
    mapController.setZoom(16); 
}

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

}

this is my map.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<greendroid.widget.ActionBar
    android:id="@+id/myActionBar"
    android:layout_width="fill_parent"
    android:layout_height="30dp"
    android:background="@drawable/action_bar_background" />

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <com.google.android.maps.MapView
        android:id="@+id/map"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:apiKey="AIzaSyAT5pGvWOLeEuugI8asdasE7as3osTaZjSQ"
        android:clickable="true"
        android:enabled="true" 
        />

    <LinearLayout
        android:id="@+id/zoom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

</LinearLayout>

this is my androidmanifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="unai.s1.skripsi"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<application

    android:icon="@drawable/bc1"
    android:label="@string/app_name"
    android:name=".hotel.mmMtowerApplication"
    android:theme="@style/Theme.coba" >

     <activity
        android:label="@string/app_name"
        android:name=".hotel.DashboardActivity"
        android:screenOrientation="portrait" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

      <!--  Login Activity -->
    <activity
        android:label="Login Account" 
        android:name=".login.LoginActivity"></activity>

    <!--  Register Activity -->
    <activity
        android:label="Register New Account" 
        android:name=".login.RegisterActivity"></activity>


    <activity
        android:name=".hotel.MTowerOpening"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".rs.MhotelOpening"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".polisi.MpolisiOpening"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".kuliner.MkulinerOpening"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".wisata.MwisataOpening"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".fo.MfoOpening"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".atm.MatmOpening"
        android:screenOrientation="portrait" >
    </activity>



     <activity
        android:name=".hotel.MTowerActivity"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".rs.Rsactivity"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".polisi.Polisiactivity"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".kuliner.Kulineractivity"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".wisata.Wisataactivity"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".fo.Foactivity"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".atm.Atmactivity"
        android:screenOrientation="portrait" >
    </activity>



    <activity
        android:name=".hotel.Underconstructions"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".rs.Underconstructions"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".polisi.Underconstructions"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".kuliner.Underconstructions"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".wisata.Underconstructions"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".fo.Underconstructions"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".atm.Underconstructions"
        android:screenOrientation="portrait" >
    </activity>


    <activity
        android:name=".hotel.Tower"
        android:screenOrientation="portrait" >
   </activity> 
    <activity
        android:name=".rs.Tower"
        android:screenOrientation="portrait" >
   </activity>
    <activity
        android:name=".polisi.Tower"
        android:screenOrientation="portrait" >
   </activity>
   <activity
        android:name=".kuliner.Tower"
        android:screenOrientation="portrait" >
   </activity>
   <activity
        android:name=".wisata.Tower"
        android:screenOrientation="portrait" >
   </activity>
   <activity
        android:name=".fo.Tower"
        android:screenOrientation="portrait" >
   </activity>
   <activity
        android:name=".atm.Tower"
        android:screenOrientation="portrait" >
   </activity>




    <activity
        android:name=".hotel.TowerDetailInformation"
        android:screenOrientation="portrait"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name=".rs.TowerDetailInformation"
        android:screenOrientation="portrait"
        android:label="@string/app_name" >
    </activity>
     <activity
        android:name=".polisi.TowerDetailInformation"
        android:screenOrientation="portrait"
        android:label="@string/app_name" >
    </activity>
    <activity
        android:name=".kuliner.TowerDetailInformation"
        android:screenOrientation="portrait"
        android:label="@string/app_name" >
    </activity>
     <activity
        android:name=".wisata.TowerDetailInformation"
        android:screenOrientation="portrait"
        android:label="@string/app_name" >
    </activity>
     <activity
        android:name=".fo.TowerDetailInformation"
        android:screenOrientation="portrait"
        android:label="@string/app_name" >
    </activity>
     <activity
        android:name=".atm.TowerDetailInformation"
        android:screenOrientation="portrait"
        android:label="@string/app_name" >
    </activity>




    <activity
        android:name=".hotel.About"
        android:screenOrientation="portrait"
        android:label="about aplikasi" >
    </activity>
     <activity
        android:name=".rs.About"
        android:screenOrientation="portrait"
        android:label="about aplikasi" >
    </activity>
    <activity
        android:name=".polisi.About"
        android:screenOrientation="portrait"
        android:label="about aplikasi" >
    </activity>
    <activity
        android:name=".kuliner.About"
        android:screenOrientation="portrait"
        android:label="about aplikasi" >
    </activity>
     <activity
        android:name=".wisata.About"
        android:screenOrientation="portrait"
        android:label="about aplikasi" >
    </activity>
     <activity
        android:name=".fo.About"
        android:screenOrientation="portrait"
        android:label="about aplikasi" >
    </activity>
    <activity
        android:name=".atm.About"
        android:screenOrientation="portrait"
        android:label="about aplikasi" >
    </activity>




    <activity
        android:name=".hotel.MapRoute"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".rs.MapRoute"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".polisi.MapRoute"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".kuliner.MapRoute"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".wisata.MapRoute"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".fo.MapRoute"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".atm.MapRoute"
        android:screenOrientation="portrait" >
    </activity>




    <activity
        android:name=".hotel.Map"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".rs.Map"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".polisi.Map"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".kuliner.Map"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".wisata.Map"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".fo.Map"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".atm.Map"
        android:screenOrientation="portrait" >
    </activity>




     <activity
        android:name=".hotel.MapDetail"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".rs.MapDetail"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".polisi.MapDetail"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".kuliner.MapDetail"
        android:screenOrientation="portrait" >
    </activity>
     <activity
        android:name=".wisata.MapDetail"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".fo.MapDetail"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".atm.MapDetail"
        android:screenOrientation="portrait" >
    </activity>
 <uses-library android:name="com.google.android.maps" />
</application>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CALL_PHONE" >
</uses-permission>
</manifest>
3

There are 3 best solutions below

0
On

As the google Map v1 API is already depricated, So you will no longer able to use it and you have to switch on Google Map v2 and need to develop the maps according to v2 api.

In google map v2 the maps in the layout are inflated using the fragment as below:

So instead of this google map

<com.google.android.maps.MapView
    android:id="@+id/map"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:apiKey="AIzaSyAT5pGvWOLeEuugI8asdasE7as3osTaZjSQ"
    android:clickable="true"
    android:enabled="true" 
    />

Try as below:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.MapFragment"/>

For more details Check out Implementation HERE

1
On

Instead of defining the metadata key in the layout file, declare it in the manifest.xml as follows.

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

3
On

As been already said, you are using objects from API v1 with a key from API V2. So instead of using MapView as you currently do you will have to switch to MapFragment or SupportMapFragment (for supporting older android versions). Instead on MapActivity you will have to switch to FragmentActivity (in case you use SupportMapFragment), or to a simple Activity ( in case you use MapFragment)

Of course as said the key should be move to the Manifest file, and some additional permissions should be defined there.

To get a better idea on how you should do it, you can check this blog post I wrote on integrating Google Maps API V2 in your application:

Google Maps API V2