尝试使用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)
我可能只是在做一些愚蠢的事情.你们有什么想法吗?谢谢你的帮助!
当我尝试从列表中对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
你能告诉我如何摆脱这个错误..
我被包裹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) 我正在尝试执行一个简单的 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) 我正在尝试将其切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 返回?
我有一个带有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
我有一个扩展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
Run Code Online (Sandbox Code Playgroud)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 …
虽然已经问过这个问题,但我有一个具体的实施问题。
我正在尝试打印二叉树的顶视图,以下是它的完整代码:
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) 在下面,我有一个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) 我目前正在使用 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