Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法获取GoogleMap对象_Java_Android_Google Maps - Fatal编程技术网

Java 无法获取GoogleMap对象

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

奇怪的map=frag.getMap();不会抛出nullpointerexception,但映射始终为null

无论是否运行处理程序,都会出现相同的情况

我看到地图(世界地图),但无法对地图对象执行任何操作

使用项目属性打印屏幕:

请看一下代码,并告诉我哪里错了

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();