标签: classcastexception

检索自定义视图时出现Android ClassCastException

尝试使用findViewById()获取自定义View时,我遇到了一个问题.否则,自定义视图将正确显示和运行.不幸的是,我需要能够随意更改它显示的一些数据,因此必须完成.

我的XML看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <com.TheProject.TheApp.Chart 
    android:id="@+id/chart"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
  />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我知道有时问题是人们不小心在XML中命名组件"View"而不是它们的子类.

在我的Activity的onCreate()方法中,我有这个:

myChart=(Chart)findViewById(R.id.chart); //where myChart is an object of type Chart
Run Code Online (Sandbox Code Playgroud)

抛出ClassCastException.

我决定尝试一下,然后将行更改为此,以查看是否仍然收到ClassCastException:

View chart=(View)findViewById(R.id.chart);
Run Code Online (Sandbox Code Playgroud)

这很好用,告诉我findViewById给我一个View没有问题.但它不想给我一张图表.

就Chart类而言,它是View的一个非常简单的子类,看起来可以正常工作.

public class Chart extends View{
    public Chart(Context context) {
    super(context);     
    init();
}

public Chart(Context context, AttributeSet attrs) {
    super(context, attrs);      
    init();
}

public Chart(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);        
    init();     
}
    /* More stuff below like onDraw, onMeasure, setData, etc. */
}
Run Code Online (Sandbox Code Playgroud)

我可能只是在做一些愚蠢的事情.你们有什么想法吗?谢谢你的帮助!

java android view classcastexception

5
推荐指数
1
解决办法
1624
查看次数

com.google.gson.JsonPrimitive无法转换为com.google.gson.JsonObject错误

当我尝试从列表中对json对象进行parjse时,我收到错误com.google.gson.JsonPrimitive无法强制转换为com.google.gson.JsonObject

输入:

{
    "r$contentRatings": [
        {
            "r$scheme": "urn:rt",
            "r$rating": "criticSummaryScore=-1,criticSummaryCount=0,criticSummaryCertified=false,criticSummaryRotten=false,fanSummaryScore=75,fanSummaryCount=4"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

码:

JsonElement elem = null;
elem = jsonObject.get("r$contentRatings");

if(elem != null) {
    JsonArray contentRatingsList = elem.getAsJsonArray();
    if(contentRatingsList != null) {                                                                                                    
        for(int i=0; i< contentRatingsList.size(); i++) {
            JsonObject scheme =contentRatingsList.get(i).getAsJsonObject().getAsJsonObject("r$scheme");
            JsonObject rating =contentRatingsList.get(i).getAsJsonObject().getAsJsonObject("r$rating");
            JsonArray subRatings = contentRatingsList.get(i).getAsJsonObject().getAsJsonObject("r$subRatings").getAsJsonArray();
Run Code Online (Sandbox Code Playgroud)

错误:

在for循环中,当我尝试jsonobject从列表中访问时,r$scheme我收到一个错误

com.google.gson.JsonPrimitive无法强制转换为com.google.gson.JsonObject

你能告诉我如何摆脱这个错误..

exception classcastexception gson

5
推荐指数
1
解决办法
2万
查看次数

LinkedHashMap$Entry 不能转换为 java.util.LinkedHashMap

我被包裹LinkedHashMap<String, LinkedHashMap<Date, Double>>在一个列表中;

List<LinkedHashMap<String, LinkedHashMap<Date, Double>>> list = new ArrayList(mainCodesMap.entrySet());
Run Code Online (Sandbox Code Playgroud)

mainCodeMap是类型Map<String, Map<Date, Double>>

问题是列表没有问题,但是,当我尝试在 for 循环中按索引获取列表元素时;

for (int i = 0; i < correMatrix.length; i++) {

    LinkedHashMap<String, LinkedHashMap<Date, Double>> entryRow = list.get(i);
    LinkedHashMap<Date, Double> entryRowData = (LinkedHashMap<Date, Double>) entryRow.values();
    ..
    ..
}
Run Code Online (Sandbox Code Playgroud)

jvm throwsClassCastException说;

java.lang.ClassCastException: java.util.LinkedHashMap$Entry cannot be cast to java.util.LinkedHashMap
Run Code Online (Sandbox Code Playgroud)

java list map classcastexception linkedhashmap

5
推荐指数
1
解决办法
2万
查看次数

在运行简单的 MapReduce 程序时获取 java.lang.ClassCastException: class java.lang.String

我正在尝试执行一个简单的 MapReduce 程序,其中 Map 接受输入,将其分为两部分(键=>字符串和值=>整数)。reducer 总结了我每次都会收到 ClassCastException 的相应键的值。我无法理解代码中的什么导致了这个错误

我的代码:

import java.io.IOException;
import java.util.Iterator;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;

public class Test {
public static class Map extends MapReduceBase implements
        Mapper<LongWritable, Text, String, Integer> {

    @Override
    public void map(LongWritable key, Text value,
            OutputCollector<String, Integer> output, Reporter reporter)
            throws IOException {
        String line = value.toString();
        String[] lineParts = line.split(","); …
Run Code Online (Sandbox Code Playgroud)

java hadoop mapreduce classcastexception

5
推荐指数
1
解决办法
4138
查看次数

List.sublist(n,m) 的观点是什么?

我正在尝试将其切ArrayList<String>成两半。

ArrayList<String> in = new ArrayList<>(), out1, out2;
out1 = (ArrayList<String>) in.subList(0,2); //will cause an ClassCastException: List cannot be casted to ArrayList
out2 = (ArrayList<String>) in.subList(2,5); // either here
Run Code Online (Sandbox Code Playgroud)

为什么?视图代表什么,哪个 subList 返回?

java arraylist classcastexception java-8

5
推荐指数
1
解决办法
844
查看次数

java.lang.ClassCastException:android.widget.LinearLayout $ LayoutParams无法转换为android.support.v7.widget.RecyclerView $ LayoutParams

我有一个带有LinearLayout的RecyclerView。LinearLayout由9个按钮组成。在进行一些更改之前,我可以单击按钮,并且它没有崩溃。但是在我在下面添加此代码后,它给出了错误,并且没有显示它的来源:

java.lang.ClassCastException:android.widget.LinearLayout $ LayoutParams无法转换为android.support.v7.widget.RecyclerView $ LayoutParams

适配器中的导入:

    import android.content.Context;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.widget.LinearLayout.LayoutParams;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
Run Code Online (Sandbox Code Playgroud)

在onClickListener中添加了以下内容:

tempTag = (int) v.getTag();
mAdapter.grayButton(tempTag / 9, tempTag % 9);
zahl1 = Integer.parseInt(mAdapter.getText(tempTag).toString());
Run Code Online (Sandbox Code Playgroud)

在RecyclerView.Adapter中添加了以下方法:

    public void grayButton(int row, int element){
    recycleViewDatas.get(row).setGray(element);
    notifyItemChanged(row);
}
Run Code Online (Sandbox Code Playgroud)

将此代码添加到onBindViewHolder中:

LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
viewHolder.ll.setLayoutParams(lp);
lp.height = viewHolder.ll.getLayoutParams().height - (int) (viewHolder.buttons.get(j).getLayoutParams().height - recycleViewDatas.get(i).getSize()) + 30;
viewHolder.ll.setLayoutParams(lp);
if(recycleViewDatas.get(i).getGray() == j)
     viewHolder.buttons.get(j).setTextColor(Color.GRAY);
else if(recycleViewDatas.get(i).getGray() == -1) …
Run Code Online (Sandbox Code Playgroud)

java android classcastexception android-layout android-recyclerview

5
推荐指数
1
解决办法
6825
查看次数

java.lang.ClassCastException 当我尝试将 Application 从 Fragment 转换为 MyApplication 时(Android 6+)

我有一个扩展android.app.Fragment的片段。在某些情况下,在 onCreateView 内部,当我尝试将 Application 强制转换为我的 Application 实现时,我会遇到java.lang.ClassCastException

public class SketchFragment extends android.app.Fragment{
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View inflate = inflater.inflate(R.layout.layout, container, false);
        ButterKnife.bind(this,inflate);

        MyApplication application = (MyApplication)  getActivity().getApplicationContext();

        //Previously, I tried to
        //MyApplication application = (MyApplication) getActivity().getApplication()

        }
    }
Run Code Online (Sandbox Code Playgroud)

实际上,只有在Android 6 中,我才在 <5% 的所有用户中出现此错误(我的 Crashlytics 日志说)。我的 Crashlytics 日志如下:

致命异常:java.lang.ClassCastException:android.app.Application 无法转换为 com.example.app.MyApplication

   at com.example.app.ui.activity.main.MyFragment.onCreateView(MyFragment.java:95)
   at android.app.Fragment.performCreateView(Fragment.java:2281)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:983)
   at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1163)
   at android.app.BackStackRecord.run(BackStackRecord.java:793)
   at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1552)
   at android.app.FragmentManagerImpl$1.run(FragmentManager.java:487)
   at …
Run Code Online (Sandbox Code Playgroud)

java android classcastexception android-application-class

5
推荐指数
0
解决办法
865
查看次数

无法转换为 java.lang.Comparable

虽然已经问过这个问题,但我有一个具体的实施问题。

我正在尝试打印二叉树的顶视图,以下是它的完整代码:

import java.util.*;

class Node{
    int data;
    Node right;
    Node left;
    Node(int data){
        this.data = data;
    }
}

class Pair<F,S>{
    private F first;
    private S second;
    public Pair(F first, S second){
        this.first = first;
        this.second = second;
    }
    
    public F getFirst(){return first;}
    public S getSecond(){return second;}
}

class BinaryTreeTopView{

    public static void printTopView(Node root){

        if(root == null)
            return;

    Queue <Pair<Node,Integer>> q = new Queue<>();
    Map <Integer,Node> map = new HashMap<>();
    Pair<Node,Integer> p = new Pair<>(root, 0);
    q.add(p);
    
    /*
    I …
Run Code Online (Sandbox Code Playgroud)

java binary-tree classcastexception tree-traversal

5
推荐指数
2
解决办法
2万
查看次数

为什么可以从 Double 转换为 &lt;T : Number&gt;,但不能从 Double 转换为 Int?

在下面,我有一个fun <T : Number> sum(list : List<T>) : T带有类型参数的泛型函数T : Number

在函数中,我将列表的数字总结为 asum : Double并将总和最后转换为return sum as T

例如,如果Int传递了一个列表,我也会返回一个Int- 并且这有效。

fun <T : Number> sum(list : List<T>) : T {
    var sum = 0.0
    for(x in list)
        sum += x.toDouble()
    return sum as T
}
fun main() { println(sum(listOf(1,2,3))) } // prints 6
Run Code Online (Sandbox Code Playgroud)

然而,以下内容不起作用,我想知道为什么上面的通用函数有效,但直接将 a 转换Double为 anInt却不起作用。

fun main() {        
    val d : Double …
Run Code Online (Sandbox Code Playgroud)

generics casting classcastexception kotlin

5
推荐指数
1
解决办法
499
查看次数

将 Koin 升级到 3.1.3 时,使用共享视图模型的 Android 测试失败,并出现 java.lang.ClassCastException androidx.lifecycle.SavedStateHandleController

我目前正在使用 Koin 版本 3.1.0 并想升级到最新版本(当前为 3.1.4),但是一旦我将 Koin 升级到 3.1.3 以上,我在运行测试时会出现以下异常:

class java.lang.Object cannot be cast to class androidx.lifecycle.SavedStateHandleController (java.lang.Object is in module java.base of loader 'bootstrap'; androidx.lifecycle.SavedStateHandleController is in unnamed module of loader org.robolectric.internal.AndroidSandbox$SdkSandboxClassLoader @5c2a3b10)
java.lang.ClassCastException: class java.lang.Object cannot be cast to class androidx.lifecycle.SavedStateHandleController (java.lang.Object is in module java.base of loader 'bootstrap'; androidx.lifecycle.SavedStateHandleController is in unnamed module of loader org.robolectric.internal.AndroidSandbox$SdkSandboxClassLoader @5c2a3b10)
    at androidx.lifecycle.SavedStateHandleController.attachHandleIfNeeded(SavedStateHandleController.java:98)
    at androidx.lifecycle.AbstractSavedStateViewModelFactory.onRequery(AbstractSavedStateViewModelFactory.java:103)
    at androidx.lifecycle.StateViewModelFactory.onRequery(StateViewModelFactory.kt:37)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:160)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.kt:139)
    at org.koin.androidx.viewmodel.ViewModelResolverKt.resolveInstance(ViewModelResolver.kt:15)
    at org.koin.androidx.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExt.kt:67)
    at org.koin.androidx.viewmodel.scope.ScopeExtKt.getViewModel(ScopeExt.kt:53)
    at org.koin.androidx.viewmodel.scope.ScopeExtKt.getViewModel$default(ScopeExt.kt:45)
    at …
Run Code Online (Sandbox Code Playgroud)

android classcastexception robolectric android-viewmodel koin

5
推荐指数
1
解决办法
549
查看次数