GVKun编程网logo

我不明白为什么发生此类ClassCastException

10

这篇文章主要围绕我不明白为什么发生此类ClassCastException展开,旨在为您提供一份详细的参考资料。我们将全面介绍我不明白为什么发生此类ClassCastException,同时也会为您带

这篇文章主要围绕我不明白为什么发生此类ClassCastException展开,旨在为您提供一份详细的参考资料。我们将全面介绍我不明白为什么发生此类ClassCastException,同时也会为您带来Android – 首选项 – ClassCastException、android-从另一个活动绑定到本地服务时发生ClassCastException、android的ClassCastException、Caused by: java.lang.ClassCastException的实用方法。

本文目录一览:

我不明白为什么发生此类ClassCastException

我不明白为什么发生此类ClassCastException

// Application ...Intent i = new Intent();i.putExtra(EXTRA_FILE_UPLOAD_URIS, mGalleryAdapter.getItems());Uri[] getItems() { return mItems; }// Service ...intent.getParcelableArrayExtra(EXTRA_FILE_UPLOAD_URIS); //works, returns Parcelable[]Uri[] uris = (Uri[])intent.getParcelableArrayExtra(EXTRA_FILE_UPLOAD_URIS);// ... Breaks with ClassCastException

为什么投给Uri[]打破,当UriParcelable

答案1

小编典典

不幸的是,没有办法对中的数组进行这样的转换Java。您将必须迭代数组并分别转换每个对象。

原因是安全类型,JVM根本无法确保无需迭代遍历数组的内容就可以将其转换为Uri,这就是为什么必须对其进行迭代并分别进行转换的原因。

基本上因为Parcelable可以被其他对象继承,所以不能保证数组仅包含Uri对象。但是强制转换为超类型将是可行的,因为那样的话,类型安全就可以了。

Android – 首选项 – ClassCastException

Android – 首选项 – ClassCastException

我测试了一个标准的Preference教程,没有任何问题..但是在本教程中(在所有类似的例子中),Preferences活动意图从主活动中开始…

我试图在我的应用程序中复制简单的测试代码,但是Preferences活动意图是从List活动中启动的…(来自菜单栏)

public class TrainingListActivity extends FragmentActivity implements
        TrainingListFragment.Callbacks {

    // .....
    public void settingsActivity() {
        Intent settingsActivity = new Intent(this,Preferences.class);
        startActivity(settingsActivity);
    }
}

所以我将它添加到manifest.xml中,表明TrainingListActivity为父活动

<activity
    android:name="com.swimtechtest.swimmer.TrainingListActivity"
    android:label="@string/app_name" >
    android:theme="@android:style/Theme.Black.NoTitleBar" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name="com.swimtechtest.swimmer.Preferences"
    android:label="@string/title_preferences"
    android:parentActivityName=".Preferences" >
    <Meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".TrainingListActivity" />
</activity>

但是在运行它时,我收到运行时错误:

android.preference.Preference cannot be cast to android.preference.GenericInflater$Parent

这似乎是在Preferences onCreate()方法结束时,在setDefaultValues上提出的……任何线索?

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction()
        .replace(android.R.id.content,new PrefsFragment()).commit();
    PreferenceManager.setDefaultValues(Preferences.this,R.xml.preferences,false);
}

的preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="My list of Preferences" >
    <CheckBoxPreference
        android:defaultValue="false"
        android:key="checkBoxPref"
        android:summary="This preference can be true or false"
        android:title="CheckBox Preference" />
    <ListPreference
        android:defaultValue="digiGreen"
        android:entries="@array/listArray"
        android:entryValues="@array/listValues"
        android:key="listPref"
        android:summary="This preference allows to select an item in a array"
        android:title="Your favorite Pet" />
    <EditTextPreference
        android:name="EditText Preference"
        android:defaultValue="nothing"
        android:key="editTextPref"
        android:summary="This allows you to enter a string"
        android:title="Edit This Text" />
    <ringtonePreference
        android:name="ringtone Preference"
        android:key="ringtonePref"
        android:summary="Select a ringtone"
        android:title="ringtones" />
    <PreferenceScreen
        android:key="SecondPrefScreen"
        android:summary="This is a sub PreferenceScreen"
        android:title="Secondary Level" >
        <intent
            android:action="android.intent.action.VIEW"
            android:targetandroid:targetPackage="com.example.preferencesexample" />
    </PreferenceScreen>
    <Preference
        android:key="customPref"
        android:summary="This works almost like a button"
        android:title="Custom Preference" />
</PreferenceCategory>
</PreferenceScreen>

consolelog

FATAL EXCEPTION: main
 Process: com.swimtechtest.swimmer,PID: 9690
 java.lang.RuntimeException: Unable to start activity    
  ComponentInfo{com.swimtechtest.swimmer/com.swimtechtest.swimmer.Preferences}:  
  java.lang.classCastException: android.preference.Preference cannot be cast to 
   android.preference.GenericInflater$Parent
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
     ....
     Caused by: java.lang.classCastException: android.preference.Preference cannot be cast to android.preference.GenericInflater$Parent
at android.preference.GenericInflater.inflate(GenericInflater.java:320)
at android.preference.GenericInflater.inflate(GenericInflater.java:263)
at android.preference.PreferenceManager.inflateFromresource(PreferenceManager.java:272)
at android.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:485)
at android.preference.PreferenceManager.setDefaultValues(PreferenceManager.java:444)
at com.swimtechtest.swimmer.Preferences.onCreate(Preferences.java:19)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2159)

解决方法

你的意思是 :

<activity
    android:name="com.swimtechtest.swimmer.Preferences"
    android:label="@string/title_preferences"
    android:parentActivityName="com.swimtechtest.swimmer.TrainingListActivity" >
    <Meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".TrainingListActivity" />
</activity>

android-从另一个活动绑定到本地服务时发生ClassCastException

android-从另一个活动绑定到本地服务时发生ClassCastException

在我的应用程序中,我有两个分离的APK.第一个APK中的活动(A1)启动本地服务,并且能够调用此服务提供的方法.稍后,活动A1从第二个APK开始另一个活动(A2). A2活动尝试连接到由A1启动的本地服务.这两个活动都使用相同的SharedUserID在同一进程中运行.如LocalService的API示例所示,提供了服务接口.服务的onBind方法返回具有方法getService()的LocalBinder实例.
当调用A2的onServiceConnected时,当我尝试从IBinder投射到MyService.LocalBinder时遇到ClassCastException.

在调试器中,我可以看到A2活动的onServiceConnected服务参数是MyService.LocalBinder的正确实例.我什至可以在调试器中观看MyService的所有属性,但是当我尝试将IBinder服务投射到MyService.LocalBinder时,我得到了ClassCastException异常吗?有什么办法解决还是我必须使用AIDL?

public void onServiceConnected(ComponentName className, IBinder service)
{

  try
  {
       MyService.LocalBinder binder = (MyService.LocalBinder)service;
       m_IService = binder.getService();
  }
  catch(ClassCastException e)
  {

  }


 }

解决方法:

对此不确定,但我猜测您已将MyService.LocalBinder编译为A1和A2 APK.这将产生这种异常,因为尽管它们具有相同的名称和相同的代码,但它们仍然是两个单独的类文件.我认为您需要将类移到共享库中才能完成此工作.

更新(回应评论):我看不到使用界面会有什么不同;与该类一样,该接口将在客户端和服务器上以不同的方式实例化,因此导致强制转换异常.您也许可以使用reflection来解决此问题,但是我不建议您使用这种方法-AndroidOS或DalvikVM可能都不支持该方法.

我认为最好的方法是尝试创建AIDL接口,看看它是否能完成工作.它可能比尝试执行Android故意阻止的操作要容易10倍.

但是,如果您想继续使用当前的方法,一种可能的途径是使用ClassLoader将客户端类加载到服务器中.我不确定是否可以使它正常工作.

android的ClassCastException

android的ClassCastException

format一下xml文件或者在预览窗口拖动一下组件

Caused by: java.lang.ClassCastException

Caused by: java.lang.ClassCastException

报错信息如下: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs (LauncherImpl.java:389) at com.sun.javafx.application.LauncherImpl.launchApplication (LauncherImpl.java:328) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at sun.launcher.LauncherHelper$FXHelper.main (LauncherHelper.java:767) Caused by: java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1 (LauncherImpl.java:917) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155 (LauncherImpl.java:182) at java.lang.Thread.run (Thread.java:745) Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to javafx.beans.value.ObservableValue at ruiyi.gui.controller.special.AbstractSpecificAnalysisView.lambda$bindDataToJFXTreeTableColumnDT$1 (AbstractSpecificAnalysisView.java:106) at javafx.scene.control.TreeTableColumn.getCellObservableValue (TreeTableColumn.java:563) at javafx.scene.control.TreeTableColumn.getCellObservableValue (TreeTableColumn.java:548) at javafx.scene.control.TreeTableCell.updateItem (TreeTableCell.java:635) at javafx.scene.control.TreeTableCell.indexChanged (TreeTableCell.java:457) at javafx.scene.control.IndexedCell.updateIndex (IndexedCell.java:116) at com.sun.javafx.scene.control.skin.TableRowSkinBase.updateCells (TableRowSkinBase.java:533) at com.sun.javafx.scene.control.skin.TreeTableRowSkin.updateCells (TreeTableRowSkin.java:220) at com.sun.javafx.scene.control.skin.TableRowSkinBase.init (TableRowSkinBase.java:147) at com.sun.javafx.scene.control.skin.TreeTableRowSkin.(TreeTableRowSkin.java:89) at com.jfoenix.skins.JFXTreeTableRowSkin.(JFXTreeTableRowSkin.java:59) at com.jfoenix.controls.JFXTreeTableRow.createDefaultSkin (JFXTreeTableRow.java:45) at javafx.scene.control.Control.impl_processCSS (Control.java:872) at javafx.scene.Node.processCSS (Node.java:9056) at javafx.scene.Node.applyCss (Node.java:9153) at com.sun.javafx.scene.control.skin.VirtualFlow.setCellIndex (VirtualFlow.java:1964) at com.sun.javafx.scene.control.skin.VirtualFlow.getCell (VirtualFlow.java:1797) at com.sun.javafx.scene.control.skin.VirtualFlow.getCellLength (VirtualFlow.java:1879) at com.sun.javafx.scene.control.skin.VirtualFlow.computeViewportOffset (VirtualFlow.java:2528) at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren (VirtualFlow.java:1189) at javafx.scene.Parent.layout (Parent.java:1087) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Parent.layout (Parent.java:1093) at javafx.scene.Scene.doLayoutPass (Scene.java:552) at javafx.scene.Scene.preferredSize (Scene.java:1646) at javafx.scene.Scene.impl_preferredSize (Scene.java:1720) at javafx.stage.Window$9.invalidated (Window.java:846) at javafx.beans.property.BooleanPropertyBase.markInvalid (BooleanPropertyBase.java:109) at javafx.beans.property.BooleanPropertyBase.set (BooleanPropertyBase.java:144) at javafx.stage.Window.setShowing (Window.java:922) at javafx.stage.Window.show (Window.java:937) at javafx.stage.Stage.show (Stage.java:259) at application.Main.start (Main.java:80) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162 (LauncherImpl.java:863) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175 (PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda$null$173 (PlatformImpl.java:295) at java.security.AccessController.doPrivileged (Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$174 (PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run (InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop (Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$148 (WinApplication.java:191) 这里的 ObservableValue 是 javafx.beans.value 包下的 interface 我的代码是这样的: protected void bindDataToJFXTreeTableColumnDT (JFXTreeTableColumn column, String key) { // 数据查找绑定到 table view column.setCellValueFactory ((TreeTableColumn.CellDataFeatures param) -> { if (column.validateValue (param)) return param.getValue ().getValue ().getValue (key); else return column.getComputedValue (param); }); } 我同事写的代码是这样的 protected void bindDataToJFXTreeTableColumn (JFXTreeTableColumn column, String key) { // 数据查找绑定到 table view column.setCellValueFactory ((TreeTableColumn.CellDataFeatures param) -> { if (column.validateValue (param)) return param.getValue ().getValue ().getValue (key); else return column.getComputedValue (param); }); } 同事的代码执行不报错,我的报错。

今天的关于我不明白为什么发生此类ClassCastException的分享已经结束,谢谢您的关注,如果想了解更多关于Android – 首选项 – ClassCastException、android-从另一个活动绑定到本地服务时发生ClassCastException、android的ClassCastException、Caused by: java.lang.ClassCastException的相关知识,请在本站进行查询。

本文标签: