当前位置: 首页 > 知识库问答 >
问题:

API28中的MapFragment在Fragment中崩溃

邢财
2023-03-14

我正试图添加一个映射到片段中,我在IDE中没有错误的迹象,但应用程序只是在设备中崩溃了。我不知道发生了什么。我已经在控制台中为Android启用了地图SDK,我所做的只是将Android Studio生成的MapsActivity修改为MapsFragment。

import android.support.v7.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val fragmentTransaction = supportFragmentManager.beginTransaction()
        fragmentTransaction.add(R.id.fragment_container, MapsFragment.newInstance()).commit()
    }
}

mapsfragment.kt

import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.google.android.gms.maps.*

import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MarkerOptions

class MapsFragment : Fragment(), OnMapReadyCallback {

    private lateinit var mMap: GoogleMap

    companion object {
        fun newInstance() = MapsFragment()
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_maps, container, false)

        val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
        mapFragment.getMapAsync(this)
    }

    override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap

        // Add a marker in Sydney and move the camera
        val sydney = LatLng(3.0414067, 101.5901829)
        mMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
    }
}

fragment_maps.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
tools:context=".MapsFragment">

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

</FrameLayout>

我得到的只是这个错误。

E/AndroidRuntime: FATAL EXCEPTION: Thread-7
    java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
        at ep.b(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):3)
        at eo.a(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):4)
        at eq.a(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):55)
        at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):11)
        at dx.a(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):17)
        at dx.run(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):65)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.ProtocolVersion" on path: DexPathList[[zip file "/system/priv-app/PrebuiltGmsCore/app_chimera/m/MapsDynamite.apk"],nativeLibraryDirectories=[/data/user_de/0/com.google.android.gms/app_chimera/m/00000006/n/x86_64, /system/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at ad.loadClass(:com.google.android.gms.dynamite_dynamiteloader@13280056@13.2.80 (040800-211705629):25)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at ep.b(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):3) 
        at eo.a(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):4) 
        at eq.a(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):55) 
        at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):11) 
        at dx.a(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):17) 
        at dx.run(:com.google.android.gms.dynamite_mapsdynamite@13280056@13.2.80 (040800-211705629):65) 

共有1个答案

解高昂
2023-03-14

如果您的目标是api级别28或以上,您必须在清单中包括:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

您的参考资料:https://issueTracker.google.com/issues/79478779

 类似资料:
  • 当我尝试使用基于本教程的MapFragment时,并且我使用以下布局:

  • 我有一个受支持的片段活动,它将加载差异片段。片段有一些,带有我想得到它的句柄,但score的

  • 我一直在使用AppCompatv7 lib的最新工具栏。我在工具栏视图组中放置了一个文本视图,我想从我的活动片段中为这个文本视图设置一个标题。如果是自定义操作栏((ActionBarActivity)getActivity)。setcustomView(…)会完成任务的。但由于使用了这个工具栏,我无法使用它。此外,我在BaseActivity中实现了一个由所有活动继承的方法。此BaseActivi

  • 我正在开发一个使用Zomato Api获取附近餐馆的应用程序。我有一个片段,它向用户显示了所单击餐厅的详细信息。我的目标是在地图上显示餐厅的位置,但我很难做到这一点,因为我会出错。它只在活动中起作用吗?我是否必须将层次结构更改为FragmentActivity? 我得到的错误是:

  • 本文向大家介绍Android 中 Fragment 嵌套 Fragment使用存在的bug附完美解决方案,包括了Android 中 Fragment 嵌套 Fragment使用存在的bug附完美解决方案的使用技巧和注意事项,需要的朋友参考一下 自从Android3.0引入了Fragment之后,使用Activity去嵌套一些Fragment的做法也变得更加流行,这确实是Fragment带来的一些优

  • 问题内容: 通常,在CSS中,当父级和最后一个子级具有边距时,这些边距会折叠以创建单个边距。例如 如您所见,即使在和标记上都指定了的边距,您也只能在最后 一篇文章 和 页脚 之间得到一个边距。 但是,当使用 flexbox 时,我们在上一个 文章 和 页脚 之间 留有 边距- 从文章到main 的全边距为x,从main到 footer的 边距为全x 。 有没有一种方法可以使 flexbox的页 边