Android android.view.InflateException Binary XML 文件第 16 行:膨胀类片段时出错

Posted

技术标签:

【中文标题】Android android.view.InflateException Binary XML 文件第 16 行:膨胀类片段时出错【英文标题】:Android android.view.InflateException Binary XML file line #16: Error inflating class fragment 【发布时间】:2014-04-03 12:51:34 【问题描述】:

这里是 MainActivity 类

导入 java.io.BufferedReader; 导入 java.io.IOException; 导入 java.io.InputStream; 导入 java.io.InputStreamReader; 导入 java.net.HttpURLConnection; 导入 java.net.URL; 导入 java.util.ArrayList; 导入 java.util.HashMap; 导入 java.util.List; 导入 org.json.JSONObject; 导入android.graphics.Color; 导入android.os.AsyncTask; 导入android.os.Bundle; 导入android.support.v4.app.FragmentActivity; 导入android.util.Log; 导入 android.view.Menu; 导入android.view.View; 导入 android.view.View.OnClickListener; 导入android.widget.Button; 导入 com.google.android.gms.maps.GoogleMap; 导入 com.google.android.gms.maps.GoogleMap.OnMapClickListener; 导入 com.google.android.gms.maps.GoogleMap.OnMapLongClickListener; 导入 com.google.android.gms.maps.SupportMapFragment; 导入 com.google.android.gms.maps.model.BitmapDescriptorFactory; 导入 com.google.android.gms.maps.model.LatLng; 导入 com.google.android.gms.maps.model.MarkerOptions; 导入 com.google.android.gms.maps.model.PolylineOptions; 公共类 MainActivity 扩展 FragmentActivity 谷歌地图; ArrayList 标记点; @覆盖 protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化 markerPoints = new ArrayList(); // 获取activity_main的SupportMapFragment的引用 SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map); // 获取 Button 的引用 按钮 btnDraw = (Button)findViewById(R.id.btn_draw); // 获取 SupportMapFragment 的地图 地图 = fm.getMap(); // 在地图中启用 MyLocation 按钮 map.setMyLocationEnabled(true); // 为地图设置 onclick 事件监听器 map.setOnMapClickListener(new OnMapClickListener() @覆盖 公共无效 onMapClick(LatLng 点) // 已经有 10 个位置,有 8 个航路点和 1 个起始位置和 1 个结束位置。 // 非业务用户的查询中最多允许 8 个航点 if(markerPoints.size()>=10) 返回; // 将新项目添加到 ArrayList markerPoints.add(point); // 创建 MarkerOptions MarkerOptions 选项 = new MarkerOptions(); // 设置标记的位置 选项.位置(点); /** * 对于起始位置,标记的颜色为绿色,并且 * 对于结束位置,标记的颜色为红色,并且 * 其余标记的颜色为天蓝色 */ if(markerPoints.size()==1) options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); 否则如果(markerPoints.size()==2) options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); 别的 options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)); // 向 Google Map Android API V2 添加新标记 map.addMarker(选项); ); // 长按会清空地图 map.setOnMapLongClickListener(新 OnMapLongClickListener() @覆盖 公共无效 onMapLongClick(LatLng 点) // 从谷歌地图中删除所有点 map.clear(); // 删除 ArrayList 中的所有点 markerPoints.clear(); ); // 按钮 btn_draw 的单击事件处理程序 btnDraw.setOnClickListener(new OnClickListener() @覆盖 公共无效 onClick(查看 v) // 检查是否捕获了开始和结束位置 if(markerPoints.size() >= 2) LatLng 原点 = markerPoints.get(0); LatLng dest = markerPoints.get(1); // 获取 Google Directions API 的 URL 字符串 url = getDirectionsUrl(origin, dest); 下载任务 downloadTask = new DownloadTask(); // 开始从 Google Directions API 下载 json 数据 下载任务.execute(url); ); 私人字符串 getDirectionsUrl(LatLng 来源,LatLng dest) // 路由的起点 字符串 str_origin = "origin="+origin.latitude+","+origin.longitude; // 路由目的地 字符串 str_dest = "destination="+dest.latitude+","+dest.longitude; // 传感器启用 字符串传感器=“传感器=假”; // 航点 字符串航点 = ""; for(int i=2;i // 在非ui线程中下载数据 @覆盖 受保护的字符串doInBackground(字符串... url) // 用于存储来自 Web 服务的数据 字符串数据 = ""; 尝试 // 从 Web 服务获取数据 数据 = downloadUrl(url[0]); catch(异常 e) Log.d("后台任务",e.toString()); 返回数据; // 在 UI 线程中执行,在执行之后 // doInBackground() @覆盖 受保护的无效onPostExecute(字符串结果) super.onPostExecute(结果); ParserTask parserTask = new ParserTask(); // 调用解析JSON数据的线程 parserTask.execute(结果); /** 以 JSON 格式解析 Google Places 的类 */ 私有类 ParserTask 扩展 AsyncTask>> > // 在非ui线程中解析数据 @覆盖 受保护的列表>> doInBackground(字符串... jsonData) JSONObject jObject; 列表>>路线=空; 尝试 jObject = new JSONObject(jsonData[0]); DirectionsJSONParser 解析器 = new DirectionsJSONParser(); // 开始解析数据 路线 = parser.parse(jObject); catch(异常 e) e.printStackTrace(); 回程路线; // 在解析过程之后在 UI 线程中执行 @覆盖 受保护的无效onPostExecute(列表>>结果) ArrayList 点 = 空; 折线选项 lineOptions = null; //遍历所有路由 for(int i=0;i(); lineOptions = new PolylineOptions(); // 获取第 i 个路由 列表> 路径 = 结果.get(i); // 获取第 i 条路线中的所有点 for(int j=0;j 点 = path.get(j); 双纬度 = Double.parseDouble(point.get("lat")); 双 lng = Double.parseDouble(point.get("lng")); LatLng 位置 = 新 LatLng(lat, lng); 点。添加(位置); // 将路线中的所有点添加到 LineOptions lineOptions.addAll(点); lineOptions.width(2); lineOptions.color(Color.RED); // 在谷歌地图中为第 i 条路线绘制折线 map.addPolyline(lineOptions); @覆盖 公共布尔 onCreateOptionsMenu(菜单菜单) // 膨胀菜单;如果存在,这会将项目添加到操作栏。 getMenuInflater().inflate(R.menu.main, menu); 返回真;

Direction Parser Class 是这样的

包在.wptrafficanalyzer.locationwaypointmapv2; 导入 java.util.ArrayList; 导入 java.util.HashMap; 导入 java.util.List; 导入 org.json.JSONArray; 导入 org.json.JSONException; 导入 org.json.JSONObject; 导入 com.google.android.gms.maps.model.LatLng; 公共类DirectionsJSONParser /** 接收一个 JSONObject 并返回一个包含经纬度的列表 */ 公共列表>>解析(JSONObject jObject) 列表>> 路线 = 新的 ArrayList>>(); JSONArray jRoutes = null; JSONArray jLegs = null; JSONArray jSteps = null; 尝试 jRoutes = jObject.getJSONArray("路由"); /** 遍历所有路由 */ for(int i=0;i>(); /** 遍历所有腿 */ for(int j=0;j list = decodePoly(折线); /** 遍历所有点 */ for(int l=0;l hm = new HashMap(); hm.put("lat", Double.toString(((LatLng)list.get(l)).latitude) ); hm.put("lng", Double.toString(((LatLng)list.get(l)).longitude) ); path.add(hm); 路线。添加(路径); 捕捉(JSONException e) e.printStackTrace(); catch (异常 e) 回程路线; /** * 解码折线点的方法 * 礼貌:jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java * */ 私有列表decodePoly(字符串编码) 列表 poly = new ArrayList(); int index = 0, len = encoded.length(); 国际纬度 = 0, lng = 0; 而(索引= 0x20); int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 纬度 += 纬度; 班次 = 0; 结果 = 0; 做 b = 编码.charAt(index++) - 63; 结果 |= (b & 0x1f) = 0x20); int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lng += dlng; LatLng p = new LatLng((((双) lat / 1E5)), (((双)液化天然气/1E5))); poly.add(p); 返回聚;

Android Manifest.xml 是

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<uses-permission android:name="android.permission.INTERNET"/>

 <permission
      android:name="in.wptrafficanalyzer.locationwaypointmapv2.permission.MAPS_RECEIVE"
      android:protectionLevel="signature" />

<uses-permission android:name="in.wptrafficanalyzer.locationwaypointmapv2.permission.MAPS_RECEIVE" />

<uses-permission android:name="android.permission.INTERNET"/>
<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-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="in.wptrafficanalyzer.locationwaypointmapv2.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="AIzaSyC6TVk6gtR_i_.......**************"/>    

</application>

而布局activity_main.xml 是

<Button 
    android:id="@+id/btn_draw"
    android:layout_
    android:layout_
    android:text="@string/str_btn_draw" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" />


<fragment 
    android:id="@+id/map"
    android:layout_
    android:layout_        
    class="com.google.android.gms.maps.SupportMapFragment" 
    android:layout_above="@id/btn_draw" />

我的 LogCat 文件是

03-02 21:35:25.157: D/dalvikvm(25733): 后期启用 CheckJNI 03-02 21:35:25.758: D/AndroidRuntime(25733): 关闭 VM 03-02 21:35:25.758: W/dalvikvm(25733): threadid=1: 线程以未捕获的异常退出 (group=0x40ddd2a0) 03-02 21:35:25.768:E/AndroidRuntime(25733):致命异常:主要 03-02 21:35:25.768:E/AndroidRuntime(25733):java.lang.RuntimeException:无法启动活动 ComponentInfoin.wptrafficanalyzer.locationwaypointmapv2/in.wptrafficanalyzer.locationwaypointmapv2.MainActivity:android.view.InflateException:二进制XML 文件第 16 行:膨胀类片段时出错 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.app.ActivityThread.access$700(ActivityThread.java:140) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.os.Handler.dispatchMessage(Handler.java:99) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.os.Looper.loop(Looper.java:137) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.app.ActivityThread.main(ActivityThread.java:4935) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 java.lang.reflect.Method.invokeNative(Native Method) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 java.lang.reflect.Method.invoke(Method.java:511) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 03-02 21:35:25.768: E/AndroidRuntime(25733): at dalvik.system.NativeStart.main(Native Method) 03-02 21:35:25.768:E/AndroidRuntime(25733):原因:android.view.InflateException:二进制 XML 文件第 16 行:膨胀类片段时出错 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:752) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:495) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:397) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:353) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:316) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.app.Activity.setContentView(Activity.java:1924) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 in.wptrafficanalyzer.locationwaypointmapv2.MainActivity.onCreate(MainActivity.java:43) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.app.Activity.performCreate(Activity.java:5206) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 03-02 21:35:25.768: E/AndroidRuntime(25733): ... 11 更多 03-02 21:35:25.768: E/AndroidRuntime(25733): Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml 没有正确的值。预期为 4242000,但发现为 0。您必须在元素中具有以下声明: 03-02 21:35:25.768: E/AndroidRuntime(25733): at com.google.android.gms.common.GooglePlayServicesUtil.n(未知来源) 03-02 21:35:25.768: E/AndroidRuntime(25733): at com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(未知来源) 03-02 21:35:25.768: E/AndroidRuntime(25733): at com.google.android.gms.maps.internal.q.v(未知来源) 03-02 21:35:25.768: E/AndroidRuntime(25733): at com.google.android.gms.maps.internal.q.u(未知来源) 03-02 21:35:25.768:E/AndroidRuntime(25733):在 com.google.android.gms.maps.MapsInitializer.initialize(未知来源) 03-02 21:35:25.768:E/AndroidRuntime(25733):在 com.google.android.gms.maps.SupportMapFragment$b.ex(未知来源) 03-02 21:35:25.768: E/AndroidRuntime(25733): at com.google.android.gms.maps.SupportMapFragment$b.a(未知来源) 03-02 21:35:25.768:E/AndroidRuntime(25733):在 com.google.android.gms.dynamic.a.a(未知来源) 03-02 21:35:25.768:E/AndroidRuntime(25733):在 com.google.android.gms.dynamic.a.onInflate(未知来源) 03-02 21:35:25.768:E/AndroidRuntime(25733):在 com.google.android.gms.maps.SupportMapFragment.onInflate(未知来源) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:279) 03-02 21:35:25.768: E/AndroidRuntime(25733): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:682) 03-02 21:35:25.768: E/AndroidRuntime(25733): ... 21 更多

请帮忙

【问题讨论】:

【参考方案1】:

问题出在这里:

<meta-data
   android:name="com.google.android.maps.v2.API_KEY"
    android:value="AIzaSyC6TVk6gtR_i_.......**************"/> 

meta-data 标记在此处需要 integer,因此您必须在此处包含您正在使用的 com.google.android.maps 库的版本。您可能会在项目中包含的库中找到它,然后定义:

<meta-data
   android:name="com.google.android.maps.v2.API_KEY"
   android:value="@integer/your_google_maps_version" />

【讨论】:

如何在片段中将其更改为 MapView,因为我想嵌入包含一些操作的应用程序的此布局主容器 我认为您应该对此提出另一个问题,因为它与前一个问题无关,这样可能会有更多用户能够更好地帮助您。 何乐而不为呢,请看一下,谢谢***.com/questions/22130915/…【参考方案2】:
<meta-data
   android:name="com.google.android.maps.v2.API_KEY"
    android:value="AIzaSyC6TVk6gtR_i_.......**************"/> 

在 manifest.xml 中,只需在 application> 标记之后和您的第一个活动之前添加它

【讨论】:

以上是关于Android android.view.InflateException Binary XML 文件第 16 行:膨胀类片段时出错的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录