java - 糖ORM : Class cast exception when trying to cast a context from getApplicationContext()

标签 java android classcastexception sugarorm

我尝试将上下文转换为 Activity 。我需要这样做来调用该 Activity 的方法之一。为了获取我需要的上下文,我使用了 getApplicationContext()。我现在正在开发的应用程序使用 Sugar ORM 作为数据库框架。这是我得到的代码和异常。

ContentResolver.requestSync(((MainActivity) getApplicationContext()).getAccount(), AccountHelper.AUTHORITY, settingsBundle);

java.lang.ClassCastException: com.orm.SugarApp cannot be cast to id.ac.ui.presentronik.activity.MainActivity
        at id.ac.ui.presentronik.activity.SessionActivity.onOptionsItemSelected(SessionActivity.java:173)
        at android.app.Activity.onMenuItemSelected(Activity.java:2885)
        at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:350)
        at android.support.v7.app.ActionBarActivity.onMenuItemSelected(ActionBarActivity.java:155)
        at android.support.v7.app.ActionBarActivityDelegate$1.onMenuItemSelected(ActionBarActivityDelegate.java:74)
        at android.support.v7.widget.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:44)
        at android.support.v7.internal.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:77)
        at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:163)
        at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:738)
        at android.support.v7.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:802)
        at android.support.v7.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153)
        at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:949)
        at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:939)
        at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:596)
        at android.support.v7.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:145)
        at android.view.View.performClick(View.java:4856)
        at android.view.View$PerformClick.run(View.java:19956)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:211)
        at android.app.ActivityThread.main(ActivityThread.java:5371)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:945)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740)

看来我遇到的问题和这个问题中的一个是一样的:SugarORM in AndroidManifest 。但该解决方案仅适用于 Fragment。有没有其他方法可以从 Activity 获取正确的上下文?

最佳答案

com.orm.SugarApp cannot be cast to id.ac.ui.presentronik.activity.MainActivity

传入 getActivity() 作为上下文:

ContentResolver.requestSync(getActivity().getAccount(), AccountHelper.AUTHORITY, settingsBundle);

ContentResolver.requestSync(((com.orm.SugarApp) getApplicationContext()).getAccount(), AccountHelper.AUTHORITY, settingsBundle);

请记住,您在 list 中设置了如下内容:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" 
    tools:replace="android:icon"
    android:name="com.orm.SugarApp">

您还需要使用这些权限:

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

关于java - 糖ORM : Class cast exception when trying to cast a context from getApplicationContext(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33255842/

相关文章:

java - 如何比较非常大的 csv 文件中的差异

java - 如何防止客户端发送文件后服务器接收到空输出(多线程java套接字)

java - 如何关闭用户 session /身份验证。在 Spring OAuth2 中为用户/客户端发送访问 token 后的上下文

android - 如何更改AppCompat中工具栏的菜单图标

android - Nexus 5/10 有时只被亚行识别

java - 引用 ImageView 子类获取 ClassCastException

java - 如何从Activemq向消费者推送消息

android - 请帮助闪烁在android上实现

android - java.lang.ClassCastException : android. app.Application 无法转换为 greendroid.app.GDApplication

java - LinkedHashMap$Entry 无法转换为 java.util.LinkedHashMap