- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在运行 Android Studio 2.0 版的新稳定版本。当我禁用即时运行时,我的应用程序运行良好,但当我打开它时,它会给我这个错误:
Caused by: java.lang.ClassCastException: com.android.tools.fd.runtime.BootstrapApplication cannot be cast to com.my.app.CustomApplication
CustomApplication 是我通过上下文获得的应用程序类。但我似乎无法得到它。当即时运行打开时,我的类被转换为 BootstrapApplication 然后失败。
我的应用是一个 float 服务,就像 FB 聊天头。
我有最新的 gradle 构建:
classpath 'com.android.tools.build:gradle:2.0.0'
这里的其他答案说即时运行试图对代码进行热交换;这会导致应用程序类被移动。
那么我该如何解决这个问题呢?
最佳答案
解决方案 #1- 禁用 Instant run在设置中
解决方案 #2 - 使用反射从 BootstrapApplication 获取真正的应用程序
public static CustomApplication getRealApplication (Context applicationContext)
{
CustomApplication application = null;
if (applicationContext instanceof CustomApplication)
{
application = (CustomApplication) applicationContext;
}
else
{
Application realApplication = null;
Field magicField = null;
try
{
magicField = applicationContext.getClass().getDeclaredField("realApplication");
magicField.setAccessible(true);
realApplication = (Application) magicField.get(applicationContext);
}
catch (NoSuchFieldException e)
{
Log.e(TAG, e.getMessage());
}
catch (IllegalAccessException e)
{
Log.e(TAG, e.getMessage());
}
application = (CustomApplication) realApplication;
}
return application;
}
在某处使用:
Context applicationContext = getContext().getApplicationContext();
CustomApplication application = getRealApplication(applicationContext);
使用示例:
public class MyProvider extends OrmLiteProvider<OrmLiteSqliteOpenHelper, OrmLiteUriMatcher<OrmLiteMatcherEntry>>
{
@Override
protected OrmLiteSqliteOpenHelper createHelper ()
{
Context applicationContext = getContext().getApplicationContext();
CustomApplication application = CustomApplication.getRealApplication(applicationContext);
return application.getComponent().databaseHelper();
}
...
}
关于android - BootstrapApplication 无法转换为 ApplicationClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36495954/
我正在使用应用程序类,因此我必须创建 list 文件,如下所示: 我在测试时必须正常工作,没有问题,经常出现在Google Play商店错误报告中的错误。但错误报告是在Android 4.4版本
我正在运行 Android Studio 2.0 版的新稳定版本。当我禁用即时运行时,我的应用程序运行良好,但当我打开它时,它会给我这个错误: Caused by: java.lang.ClassCa
我在 Word VSTO 加载项项目中有一行代码,它曾经可以工作但突然不再工作了: Microsoft.Office.Interop.Word.Document doc = Globals.ThisA
我正在尝试从 C# 类代码打开 ReqPro 项目。遵循的步骤是: 添加对 ReqPro.dll(可扩展性 COM dll)的引用 创建一个 ReqPro40.Application 类型并拥有一个
我正在使用 Interop word ApplicationClass.Documents.Open 方法打开一个 word 文档。在我的应用程序中,当我使用以下语句时它挂起:IE 显示它仍在加载,但
当我这样做的时候 type RExcel() = let xlApp = new ApplicationClass() 我有这个错误: Retrieving the COM class fac
我正在使用 (Excel.Application)Marshal.GetActiveObject("Excel.Application") 它返回一个 _ComObject 类型,但我想知道我如何才能
考虑这段代码: using Microsoft.Office.Interop.Word; ApplicationClass _application = new ApplicationClass();
我试着关注 How to open an Excel file in C# 教程,即在 Com 选项卡上添加对 Microsoft Office 14.0 Object Library 的引用并尝试编
我最近需要将我的项目从 .net 3.5 升级到 .net 4 并连接到新的 SQL Server 2008 R2。在我升级和编译后,它抛出这两个错误: 无法嵌入互操作类型“Microsoft.Sql
我在从 ASP.NET 站点打开 word 文档时遇到问题。该解决方案在 Windows 2003 Server 上运行良好,但不适用于 Windows 2008 服务器 x64 和 Windows
我正在尝试从 C# 控制台应用程序中的 Excel 中捕获一些数据。 我得到了错误 Unable to cast COM object of type 'microsoft.Office.Intero
我收到一个错误: Unable to cast COM object of type 'Microsoft.Office.Interop.Excel.ApplicationClass' to inte
我在使用一段非常简单的 C# .NET 代码时遇到问题,该代码(目前)应该只是检索运行 WinForms 应用程序的计算机上安装的 Office 的版本号: var oApp = new Outloo
我是一名优秀的程序员,十分优秀!