gpt4 book ai didi

Android OREO 中的 java.lang.IllegalArgumentException : at android. graphics.Outline.setConvexPath

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:05 25 4
gpt4 key购买 nike

我在 Playstore 中的应用程序中有一个错误。它只发生在 OREO 设备中。跟踪在下面。你能帮我找出它发生的原因吗?

java.lang.IllegalArgumentException: 
at android.graphics.Outline.setConvexPath (Outline.java:284)
at android.graphics.drawable.AdaptiveIconDrawable.getOutline (AdaptiveIconDrawable.java:387)
at android.view.ViewOutlineProvider$1.getOutline (ViewOutlineProvider.java:38)
at android.view.View.rebuildOutline (View.java:14960)
at android.view.View.setBackgroundBounds (View.java:19416)
at android.view.View.drawBackground (View.java:19381)
at android.view.View.draw (View.java:19183)
at android.view.View.draw (View.java:19062)
at android.view.ViewGroup.drawChild (ViewGroup.java:4236)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4022)
at android.view.View.draw (View.java:19060)
at android.view.ViewGroup.drawChild (ViewGroup.java:4236)
at android.widget.ListView.drawChild (ListView.java:3590)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4022)
at android.widget.AbsListView.dispatchDraw (AbsListView.java:2638)
at android.widget.ListView.dispatchDraw (ListView.java:3585)
at android.view.View.draw (View.java:19195)
at android.widget.AbsListView.draw (AbsListView.java:4310)
at android.view.View.draw (View.java:19062)
at android.view.ViewGroup.drawChild (ViewGroup.java:4236)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4022)
at android.view.View.draw (View.java:19195)
at android.view.View.buildDrawingCacheImpl (View.java:18440)
at android.view.View.buildDrawingCache (View.java:18300)
at android.view.View.draw (View.java:18912)
at android.view.ViewGroup.drawChild (ViewGroup.java:4236)
at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4022)
at android.view.View.draw (View.java:19195)
at android.view.ViewRootImpl.drawSoftware (ViewRootImpl.java:3105)
at android.view.ViewRootImpl.draw (ViewRootImpl.java:3019)
at android.view.ViewRootImpl.performDraw (ViewRootImpl.java:2806)
at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2359)
at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1392)
at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:6752)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:911)
at android.view.Choreographer.doCallbacks (Choreographer.java:723)
at android.view.Choreographer.doFrame (Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:897)
at android.os.Handler.handleCallback (Handler.java:790)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:164)
at android.app.ActivityThread.main (ActivityThread.java:6494)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:440)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)

顺便说一句,我有一个像下面这样的方法。它返回已安装应用程序的列表。列表的元素是“MainActivity_App”。在方法中,首先我一个一个获取应用程序的图标、包名和名称,然后使用它们创建 MainActivity_App。这段代码会出现错误吗?
  private List<MainActivity_App> getInstalledApps() {
List<MainActivity_App> temp = new ArrayList<>();

List<ApplicationInfo> packs = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
ArrayList<ApplicationInfo> applistTemp = new ArrayList<>();
for (ApplicationInfo info : packs) {
try {
if (packageManager.getLaunchIntentForPackage(info.packageName) != null) {
applistTemp.add(info);
}
} catch (Exception e) {
e.printStackTrace();
}
}

chosenAppsList=new ArrayList<>();
String s=settings.getString("chosenApps","");
for (int i = 0; i < applistTemp.size(); i++) {
ApplicationInfo info = applistTemp.get(i);

String appPackageName = info.packageName;
String appName="";
Drawable icon=null;
boolean select=false;
if (s.contains(appPackageName)) {
appName = info.loadLabel(getPackageManager()).toString();
icon = info.loadIcon(getPackageManager());
select = true;
}
MainActivity_App newApp=new MainActivity_App(appPackageName, appName, icon, 0, select);
temp.add(newApp);
}

return temp;
}

最佳答案

我找到了这个异常的原因。然后,我为异常生成了一个解决方案。

原因:加载图标时,在OREO及更高版本有可能返回bitmap drawable。所以,如果你使用;

   imageView.setBackground(info.loadIcon(getPackageManager());

方法 当 info.loadIcon() 方法返回 bitmapDrawable 时,你会得到 java.lang.IllegalArgumentException。您可以使用以下方法来处理此问题。
   X = info.loadIcon(getPackageManager();
if (X instanceOf Bitmap)
imageView_appIcon.setImageBitmap(X);
else
imageView_appIcon.setBackground(X);

希望能帮助到你。

关于Android OREO 中的 java.lang.IllegalArgumentException : at android. graphics.Outline.setConvexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52312947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com