2014-01-31 3 views
0

Я хотел бы начать с того, что я знаю, что эта ошибка была опубликована около 2000 раз, но после просмотра страниц и страниц людей с одинаковой проблемой и попыток всех их исправлений , никто из них не работал, поэтому я решил задать новый вопрос. Я прошу прощения, если есть поток с решением для моей конкретной проблемы, я не смог его найти.java.lang.NullPointerException Google Maps API Android V2

С этой целью я считаю, что ошибка заключается в том, что в строке 41 MainActivity.Java имеется исключение NullPointerException, поскольку карта Google является нулевой и не инициализируется.

линии 41 выглядит следующим образом:

map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapU)).getMap(); 

Если удалить все из моего кода из MainActivity.Java, оставив только код, сгенерированный Android Studio, приложение запускается нормально и будет отображать Google Карту в мире, поэтому я не думаю, что это имеет какое-либо отношение к моему API-интерфейсу или Google Play Services не обновляется.

Некоторые вещи я попытался это:

модуляции добротности от FragmentManager к SupportFragmentManager на линии 41 (Когда я сделал это, я изменил карту от FragmentMap до SupportMapFragment)
-Добавление разрешений на файл манифеста, вы можете увидеть все, что у меня получилось. -Разные устройства (Не работает на Samsung Galaxy S2 или Galaxy S4)
-I был первоначально на minSDK 12, решил изменить до 16 раз, чтобы увидеть, если это поможет, ничего

ПРИМЕЧАНИЕ: Когда Сначала я создал этот проект, по какой-то причине MainActivity.Java сказал, что расширяет ActionBarActivity вместо FragmentActivity, поэтому я изменил его, чтобы сказать FragmentActivity, но у меня была эта проблема как до, так и после.

manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.hasan.maps" > 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
<uses-permission android:name="com.google.android.providers.gsf.permission.MAPS_RECIEVE"></uses-permission> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 


<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="com.hasan.maps.MainActivity" 
     android:label="@string/app_name" 
     > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="APIKEY_IS_INSERTED_HERE"/> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
</application> 

</manifest> 

MainActivity.Java

package com.hasan.maps; 

import android.support.v4.app.FragmentActivity; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBar; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.os.Build; 

import com.google.android.gms.maps.CameraUpdate; 
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.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 

public class MainActivity extends FragmentActivity { 

private GoogleMap map; 
private final LatLng Location_NJIT = new LatLng(40.7406517, -74.1792757); 
private final LatLng Location_Stevens = new LatLng(40.7469309, -74.0258336); 

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



    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()) 
       .commit(); 

       } 
     map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapU)).getMap(); 


} 



@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; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

public void onClick_city (View v){ 

} 
public void onClick_njit (View v){ 
    CameraUpdate update = CameraUpdateFactory.newLatLng(Location_NJIT); 
    map.animateCamera(update); 
} 
public void onClick_stevens (View v){ 

} 


/** 
* A placeholder fragment containing a simple view. 
*/ 
public static class PlaceholderFragment extends Fragment { 

    public PlaceholderFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
     return rootView; 
    } 
} 

} 

Logcat

Logcat 

01-31 00:08:42.050 14353-14353/com.hasan.maps E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hasan.maps/com.hasan.maps.MainActivity}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
     at android.app.ActivityThread.access$700(ActivityThread.java:140) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4938) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
     at dalvik.system.NativeStart.main(Native Method) 


Caused by: java.lang.NullPointerException 
      at com.hasan.maps.MainActivity.onCreate(MainActivity.java:41) 
      at android.app.Activity.performCreate(Activity.java:5188) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
            at android.app.ActivityThread.access$700(ActivityThread.java:140) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:4938) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 

Fragment_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" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="com.hasan.maps.MainActivity$PlaceholderFragment"> 



    <fragment 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/mapU" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_below="@+id/stevens" /> 

    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="City" 
     android:id="@+id/city" 
     android:layout_above="@+id/map" 
     android:layout_toRightOf="@+id/header" 
     android:onClick="onClick_city" /> 

    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="NJIT" 
     android:id="@+id/njit" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/city" 
     android:onClick="onClick_njit" /> 

    <Button 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Stevens" 
     android:id="@+id/stevens" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/njit" 
     android:onClick="onClick_stevens" /> 


</RelativeLayout> 

Спасибо заранее!

+0

Что имеется на MainActivity.java номер строки 41? –

+0

Извините, я должен был указать map = ((SupportMapFragment) getSupportFragmentManager(). FindFragmentById (R.id.mapU)). GetMap(); – user2828960

ответ

1

// На самом деле вы объявили frafment идентификатора android:id="@+id/mapU" в макете Fragment_Main.xml

но ваш вызывают в MainActivity.java с макетом activity_main.xml

убедитесь, что вы объявлены картой фрагмент в activity_mail.xml.

или позвоните по карте в своем

PlaceholderFragment 

map = ((SupportMapFragment) getSupportFragmentManager()rootView.findFragmentById(R.id.mapU)).getMap(); 
+0

В Fragment_Main.xml я назвал его mapU, потому что я думал, что, возможно, возникла проблема с наложением моей карты переменных, а также с указанием карты фрагмента. – user2828960

+0

нет его фрагмента я могу показать карту, когда я вырезал код, но когда я пытаюсь отобразить несколько мест, то эта ошибка появляется –

0

ОТВЕТ:

Я выяснил, наконец, после того, как я разорвал свои волосы. Код должен был быть перемещен в классе класса фрагментов.