Java 无法获取GoogleMap对象
奇怪的map=frag.getMap();不会抛出nullpointerexception,但映射始终为null 无论是否运行处理程序,都会出现相同的情况 我看到地图(世界地图),但无法对地图对象执行任何操作 使用项目属性打印屏幕: 请看一下代码,并告诉我哪里错了Java 无法获取GoogleMap对象,java,android,google-maps,Java,Android,Google Maps,奇怪的map=frag.getMap();不会抛出nullpointerexception,但映射始终为null 无论是否运行处理程序,都会出现相同的情况 我看到地图(世界地图),但无法对地图对象执行任何操作 使用项目属性打印屏幕: 请看一下代码,并告诉我哪里错了 package com.bestsiteeditor.bestwirelessdeals; import com.google.android.gms.maps.CameraUpdateFactory; import com.goo
package com.bestsiteeditor.bestwirelessdeals;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
public class Settings extends FragmentActivity{
LinearLayout submenu;
GoogleMap map;
LinearLayout mainLayout;
static final LatLng HAMBURG = new LatLng(53.558, 9.927);
static final LatLng KIEL = new LatLng(53.551, 9.993);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
submenu =(LinearLayout) findViewById(R.id.submenu);
SubMenu sm = new SubMenu(this,submenu);
sm.getButtons();
mainLayout =(LinearLayout) findViewById(R.id.temp);
final Handler handler = new Handler();
handler.postDelayed(new Runnable(){
@Override
public void run() {
MapFragment frag = MapFragment.newInstance();
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(mainLayout.getId(), frag);
fragmentTransaction.commit();
map=frag.getMap();
System.out.println("THEMAAP "+map);
if(map != null) {
System.out.println("THEMAAP NOT NULL "+map);
}else{handler.postDelayed(this, 500);}
}
}, 500);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
return ActionBar.HandleMenu(this, item.getItemId());
}
}
下面是舱单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bestsiteeditor.bestwirelessdeals"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="19" />
<permission
android:name="com.suntrainer.suntrainer.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.suntrainer.suntrainer.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
</uses-permission>
<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/MyAppActionBarTheme" >
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyDJuwvAd8Zzqasdasdadasdasd" />
<activity
android:name="com.bestsiteeditor.bestwirelessdeals.MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.bestsiteeditor.bestwirelessdeals.Locations"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" >
<intent-filter>
<action android:name="android.intent.action.LOCATIONS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.bestsiteeditor.bestwirelessdeals.Settings"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" >
<intent-filter>
<action android:name="android.intent.action.SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.bestsiteeditor.bestwirelessdeals.WatchList"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" >
<intent-filter>
<action android:name="android.intent.action.WATCHLIST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.bestsiteeditor.bestwirelessdeals.Profile"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" >
<intent-filter>
<action android:name="android.intent.action.PROFILE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
您有
android:minSdkVersion="12"
所以你需要改变
public class Settings extends FragmentActivity{
到
另外,最好在初始化之前检查google play服务的可用性
谷歌地图对象
从文件中
公开最终GoogleMap getMap()
获取绑定到此包装的视图的基础GoogleMap
碎片
返回谷歌地图。如果片段的视图尚未打开,则为Null
准备好的如果碎片生命周期没有通过,这可能发生
onCreateView(LayoutFlater、ViewGroup、Bundle)还没有。这也可以
如果Google Play服务不可用,则会发生这种情况。如果谷歌播放
之后,服务变得可用,片段也消失了
通过onCreateView(LayoutInflater、ViewGroup、Bundle)调用
方法将再次初始化并返回GoogleMap
编辑:
清单fie的应用标记中缺少元标记
请确保您遵循了所有步骤@
只需在片段事务解决问题后等待500毫秒 也可以实现处理程序而不是线程
fragmentTransaction.commit();
Thread thread= new Thread(){
@Override
public void run(){ try { synchronized(this){wait(500);}}catch(InterruptedException ex){ }
map=frag.getMap();
System.out.println("MAP OK"+frag.getMap());
}
};
thread.start();
@BestSiteEditor在初始化地图对象之前检查google play服务的可用性我看到google play服务旁边的绿色标志,是否有办法进行测试。同一个库在另一个我的project@BestSiteEditor检查google play services的编辑和阅读检查@您应该将google play services库添加到项目中。您将在sdk中找到google play services库。@BestSiteEditor您需要更新google play services。从rev 13开始,您需要建议的meta标签。如果你不想听从这个建议,没问题。但它的建议。我尽力帮你们解决问题,但你们坚持使用旧版本
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
fragmentTransaction.commit();
Thread thread= new Thread(){
@Override
public void run(){ try { synchronized(this){wait(500);}}catch(InterruptedException ex){ }
map=frag.getMap();
System.out.println("MAP OK"+frag.getMap());
}
};
thread.start();