2016-08-25 1 views
0

Wie behebe ich das?Android Navigation Drawer Google Kartenfragmentfehler Wie behebe ich es?

GmapFragment.java

Diese Linie Ich bin Fehler immer

fragment.getMapAsync (this)

java.lang.NullPointerException

I logcat

I angeschlossen haben habe diesen Code für 2 Tage bearbeitet

konnte keine Lösung finden.

Mein Quellcode ist, dass Google Karte ausführen, wenn Benutzer auf Navigationsleiste klicken.

wenn ich auf Schubladenmenü klicke.

ich Fehler java.lang.NullPointerException

MainActivity.java

package youtube.demo.youtubedemo; 

import android.app.FragmentManager; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 

import youtube.demo.youtubedemo.Fragments.GmapFragment; 
import youtube.demo.youtubedemo.Fragments.ImportFragment; 
import youtube.demo.youtubedemo.Fragments.MainFragment; 

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     FragmentManager fm = getFragmentManager(); 
     fm.beginTransaction().replace(R.id.content_frame, new MainFragment()).commit(); 

} 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

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

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
     public boolean onNavigationItemSelected(MenuItem item) { 
     FragmentManager fm = getFragmentManager(); 

     int id = item.getItemId(); 

     if (id == R.id.nav_camara) { 
      fm.beginTransaction().replace(R.id.content_frame, new ImportFragment()).commit(); 
     } else if (id == R.id.nav_gallery) { 
      fm.beginTransaction().replace(R.id.content_frame, new GmapFragment()).commit(); 
     } else if (id == R.id.nav_slideshow) { 

     } else if (id == R.id.nav_manage) { 

     } else if (id == R.id.nav_share) { 

     } else if (id == R.id.nav_send) { 

     } 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

    } 

MainFragment.java

package youtube.demo.youtubedemo.Fragments; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import youtube.demo.youtubedemo.R; 

public class MainFragment extends Fragment { 

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

ImportFragment.java

package youtube.demo.youtubedemo.Fragments; 

import android.app.Fragment; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


import youtube.demo.youtubedemo.R; 

public class ImportFragment extends Fragment { 

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

     @Override 
     public void onViewCreated(View view, Bundle savedInstanceState) { 
      super.onViewCreated(view, savedInstanceState); 
    } 

} 

Gmap Fragment.java

package youtube.demo.youtubedemo.Fragments; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.FragmentActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

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

import youtube.demo.youtubedemo.R; 

public class GmapFragment extends Fragment implements OnMapReadyCallback { 


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

     @Override 
     public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     MapFragment fragment = (MapFragment)this.getChildFragmentManager().findFragmentById(R.id.map); 
     fragment.getMapAsync(this); 
} 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 

     LatLng marker = new LatLng(-33.867, 151.206); 

     googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 13)); 

     googleMap.addMarker(new MarkerOptions().title("Hello Google Maps!").position(marker)); 
    } 
} 

fragment_main.xml

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

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Main Fragment" 
     android:id="@+id/textView2" 
     android:layout_gravity="center" /> 
</FrameLayout> 

fragment_import.xml

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

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Import Fragment" 
     android:id="@+id/textView2" 
     android:layout_gravity="center" /> 
</FrameLayout> 

fragment_gmaps.xml

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

    <fragment android:id="@+id/map" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.MapFragment"></fragment> 

</FrameLayout> 







08-25 09:38:01.621 22053-22053/youtube.demo.youtubedemo E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: youtube.demo.youtubedemo, PID: 22053 
                     java.lang.NullPointerException 
                      at youtube.demo.youtubedemo.Fragments.GmapFragment.onViewCreated(GmapFragment.java:35) 
                      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:904) 
                      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
                      at android.app.BackStackRecord.run(BackStackRecord.java:684) 
                      at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1453) 
                      at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
                      at android.os.Handler.handleCallback(Handler.java:733) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:146) 
                      at android.app.ActivityThread.main(ActivityThread.java:5602) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:515) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
                      at dalvik.system.NativeStart.main(Native Method) 
08-25 09:38:03.596 22053-22161/youtube.demo.youtubedemo W/DynamiteModule: Local module descriptor class for com.google.android.gms.googlecertificates not found. 
08-25 09:38:03.601 22053-22161/youtube.demo.youtubedemo I/DynamiteModule: Considering local module com.google.android.gms.googlecertificates:0 and remote module com.google.android.gms.googlecertificates:1 
08-25 09:38:03.601 22053-22161/youtube.demo.youtubedemo I/DynamiteModule: Selected remote version of com.google.android.gms.googlecertificates, version >= 1 
08-25 09:38:03.601 22053-22161/youtube.demo.youtubedemo D/ChimeraFileApk: Primary ABI of requesting process is armeabi-v7a 
08-25 09:38:03.601 22053-22161/youtube.demo.youtubedemo D/ChimeraFileApk: Classloading successful. Optimized code found. 
08-25 09:38:03.606 22053-22161/youtube.demo.youtubedemo D/GoogleCertificates: com.google.android.gms.googlecertificates module is loaded 
08-25 09:38:03.636 22053-22161/youtube.demo.youtubedemo D/GoogleCertificatesImpl: Fetched 163 Google release certificates 
08-25 09:38:03.666 22053-22161/youtube.demo.youtubedemo D/GoogleCertificatesImpl: Fetched 318 Google certificates 
+0

bitte meine Antwort akzeptieren, wenn es Ihr Problem –

+0

leider Mina Fawzy lösen. Wo soll ich klicken? Ich klickte upvote. und wo soll ich klicken, um es zu beantworten? – user3662974

Antwort

1

Es gibt Schritt, den Sie sicher, dass Sie getan machen müssen Start erhalten Karten, wie erhalten gültig google maps api schlüssel fließen diese tutorial.

nach Ihrem Code müssen Sie onCreateView

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View mView = inflater.inflate(R.layout.fragment_gmaps, container, false); 
    MapFragment fragment = (MapFragment)this.getChildFragmentManager().findFragmentById‌​‌​(R.id.map); 
    fragment.getMapAsync(this); 
    return mView ; 

Hoffnung bewegen diese Hilfe aus

+0

Entschuldigung Mina Fawzy. MapFragment-Fragment = (MapFragment) this.getChildFragmentManager(). FindFragmentById (R.id.map); fragment.getMapAsync (this); diesen Code in OnCreateView verschieben? Ich wechselte zu onCreateView über Code. passiert nichts. Könntest du mir ein Beispiel geben? – user3662974

+0

und ich benutze Zertifizierung Google Map API-Schlüssel. und registrierte Projektname auch. – user3662974

+0

mir zeigen, wie es aus wie nach innen oncreateview –

Verwandte Themen