Fragment – InstantiationException: kein leerer Konstruktor -> Google Maps v2?

Ich erhalte diese Fehlermeldung, wenn ich eine geschlossene App über App-Change-Taste eröffne:

Caused by: java.lang.InstantiationException: can't instantiate class com.*.FragmentContact$1; no empty constructor 

Ich habe mehrere Tipps über Inner-Klassen gefunden und sie statisch etc. gemacht. Aber dieser FragmentKontakt ist eine öffentliche Klasse in einer * .java-Datei und hat einen öffentlichen leeren Konstruktor . Ich benutze Google Maps Api v2 in diesem Projekt und mache einen Trick irgendwo aus dem Internet, um mein MapView einzurichten. Schau hier:

  • Wie bekomme ich Multicast-Pakete auf Android
  • Tablayout nur mit Icons
  • Ändern Sie die Eingabemethode des Android-Programms programmatisch android
  • Kann keine Push-Benachrichtigung in Android mit Parse erhalten
  • Wie kann ich ein Apk an mehrere angeschlossene Geräte installieren?
  • Android ListView: Hebt nicht auf Berührung, sondern funktioniert, wenn ich den Trackball verwende
  •  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_contact, null); try { MapsInitializer.initialize(this.getActivity().getApplicationContext()); } catch (GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } fragment = new SupportMapFragment() { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mMap = fragment.getMap(); if (mMap != null) { setupMap(); } } }; getFragmentManager().beginTransaction().replace(R.id.fragment_orte_map_parent, fragment).commit(); return v; } 

    Wenn ich dieses MapView-Ding schneide, geht alles gut. Vielleicht kann jemand erklären, was ich falsch mache.

    Meine komplette Stacktrace:

     04-17 16:15:22.115: E/AndroidRuntime(22182): FATAL EXCEPTION: main 04-17 16:15:22.115: E/AndroidRuntime(22182): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.*/com.*.MainActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.*.FragmentContact$1: make sure class name exists, is public, and has an empty constructor that is public 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2357) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.app.ActivityThread.access$600(ActivityThread.java:153) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.os.Handler.dispatchMessage(Handler.java:99) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.os.Looper.loop(Looper.java:137) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.app.ActivityThread.main(ActivityThread.java:5226) 04-17 16:15:22.115: E/AndroidRuntime(22182): at java.lang.reflect.Method.invokeNative(Native Method) 04-17 16:15:22.115: E/AndroidRuntime(22182): at java.lang.reflect.Method.invoke(Method.java:511) 04-17 16:15:22.115: E/AndroidRuntime(22182): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 04-17 16:15:22.115: E/AndroidRuntime(22182): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 04-17 16:15:22.115: E/AndroidRuntime(22182): at dalvik.system.NativeStart.main(Native Method) 04-17 16:15:22.115: E/AndroidRuntime(22182): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.*.FragmentContact$1: make sure class name exists, is public, and has an empty constructor that is public 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.support.v4.app.Fragment.instantiate(Fragment.java:405) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.support.v4.app.FragmentState.instantiate(Fragment.java:97) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1767) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:208) 04-17 16:15:22.115: E/AndroidRuntime(22182): at com.*.MainActivity.onCreate(MainActivity.java:20) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.app.Activity.performCreate(Activity.java:5104) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261) 04-17 16:15:22.115: E/AndroidRuntime(22182): ... 11 more 04-17 16:15:22.115: E/AndroidRuntime(22182): Caused by: java.lang.InstantiationException: can't instantiate class com.*.FragmentContact$1; no empty constructor 04-17 16:15:22.115: E/AndroidRuntime(22182): at java.lang.Class.newInstanceImpl(Native Method) 04-17 16:15:22.115: E/AndroidRuntime(22182): at java.lang.Class.newInstance(Class.java:1319) 04-17 16:15:22.115: E/AndroidRuntime(22182): at android.support.v4.app.Fragment.instantiate(Fragment.java:394) 04-17 16:15:22.115: E/AndroidRuntime(22182): ... 18 more 

  • Android Wie man Hotspot in Android einschalten Programmatically
  • Wo finden Sie Benutzer installierte Zertifikat Android 4.0 und up
  • Wie finde ich die Verwendung von Strings.xml in Android Studio?
  • Android Widget: VorschauImage Größe
  • Verbinden von MySql mit Android ohne PHP
  • Wie benutzt man Smart-Lock-API in meiner Anwendung, um den Patter-Modus zu entsperren?
  • 3 Solutions collect form web for “Fragment – InstantiationException: kein leerer Konstruktor -> Google Maps v2?”

    Aber diese FragmentKontakt ist eine öffentliche Klasse in einer * .java-Datei und hat einen öffentlichen leeren Konstruktor.

    Der Fehler beschwert sich nicht über FragmentContact . Es klagt über die erste innere Klasse von FragmentContact ( FragmentContact$1 ). Sie können kein Fragment als innere Klasse von irgendetwas implementieren, da es nicht von außerhalb der äußeren Klasse instanziiert werden kann. Eine static innere Klasse ist in Ordnung.

    Ich habe dieses Thema seit Ewigkeiten und schließlich die Kommentare hier haben es für mich gelöst. Nizza Informationen über die Bedeutung von $1 Bedeutung anonyme innere Klasse.

    Verschieben Sie Ihre Karteninitialisierung in eine neue Public Class, zB MyMapFragment.java . Dies ermöglicht es, das Fragment ohne die Instanz zu instanziieren

    Für die noch nicht sicher, wie man es beheben Schreiben Sie den Code wie folgt (mit dem Beispielcode aus der ursprünglichen Frage):

     //Existing code to instantiate map @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_contact, null); try { MapsInitializer.initialize(this.getActivity().getApplicationContext()); } catch (GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } fragment = new MyMapFragment(); //added callback for catching when the map has finished loading mapFragment.setLoadedCallback(new MapLoadedCallback() { @Override public void onLoaded(GoogleMap map) { mMap = map; } }); getFragmentManager().beginTransaction().replace(R.id.fragment_orte_map_parent, fragment).commit(); return v; } .... 

    Erstellen Sie neue MyMapFragment.java so dass es nicht mehr eine innere Klasse ist. Damit kann das Fragment ohne äußere Klasse erstellt werden.

     public class MyMapFragment extends SupportMapFragment { GoogleMap mMap; public MyMapFragment() { } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mMap = fragment.getMap(); if (mMap != null) { mCallback.onLoaded(mMap); } } } 

    Erstellen Sie MapLoadedCallback.java , damit Sie verarbeiten können, wann die Karte fertig geladen wurde, und eine Instanz des geladenen Kartenobjekts abzurufen

     public interface MapLoadedCallback { void onLoaded(GoogleMap map); } 
      private Entity mEntity; public YourFragment() {} public static YourFragment getInstance(Entity mEntity) { YourFragment fragment = new YourFragment(); fragment.mEntity = mEntity; return fragment; } 

    Wenn Sie dieses Fragment verwenden, rufen Sie einfach die statische Methode getInstance .

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.