我正在创建一个Android应用程序,我正在尝试使用PreferenceActivity.
当它到达这一行时,我收到java.lang.ClassCastException:java.lang.String错误return PreferenceManager.getDefaultSharedPreferences(context).getInt(USER_TERM, USER_TERM_DEF);
我认为这可能是因为我没有正确地将它从EditText框中的字符串值转换为我需要的int,但我无法弄清楚如何解决这个问题,或者甚至是原因?我很沮丧.
这是我的偏好活动类:
public class UserPrefs extends PreferenceActivity {
//option names and default vals
private static final String USER_TERM = "term_length";
private static final String USER_YEAR = "year_length";
private static final int USER_TERM_DEF = 12;
private static final int USER_YEAR_DEF = 34;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
public static int getTermLength(Context context){
try{
return PreferenceManager.getDefaultSharedPreferences(context).getInt(USER_TERM, USER_TERM_DEF);
}catch (ClassCastException e){Log.v("getTermLength", "error::: " + e); }
//return 1;//temporary, needed to catch the error …Run Code Online (Sandbox Code Playgroud) java android preferences classcastexception preferenceactivity
这是我的代码:
public void Login() {
try{
DocumentBuilderFactory builderfactory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = builderfactory.newDocumentBuilder();
File path = new File("src/dataPengguna/dataPengguna.xml");
Document doc = db.parse(path);
Element pengguna = (Element) doc.getElementsByTagName("pengguna");
NodeList list = pengguna.getElementsByTagName("user");
for (int i = 0; i < list.getLength(); i++) {
Element user = (Element) list.item(i);
Node username = user.getElementsByTagName("username").item(i);
Node password = user.getElementsByTagName("password").item(i);
if(loginuser.getText().equals(username.getTextContent())
&& loginpass.getText().equals(password.getTextContent())){
JOptionPane.showMessageDialog(rootPane, "welcome");
}
}
}catch(Exception e){
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的xml:
<?xml version="1.0" encoding="UTF-8"?>
<pengguna>
<user>
<nama>septian</nama>
<username>septiansykes</username>
<password>1234</password>
<status>belumpinjam</status>
</user>
<user>
<nama>koko</nama> …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取XML布局文件中定义的ImageView实例:
<RelativeLayout
android:id="@+id/visual_compass_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/output_container" >
<ImageView
android:id="@+id/visual_compass"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:contentDescription="Compass"
android:scaleType="fitStart"
android:src="@drawable/compass_rose" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
但我总是得到运行时错误:
... java.lang.ClassCastException: android.widget.RelativeLayout cannot be
cast to android.widget.ImageView ... at net.example.MainActivity.onCreate
(MainActivity.java:57)
Run Code Online (Sandbox Code Playgroud)
线"57"是那一个:
compassView = (ImageView) findViewById(R.id.visual_compass);
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么会抛出这个错误; 我没有看到这段代码的问题.还有谁知道吗?
谢谢Felix D.
java android runtime-error classcastexception android-layout
嗨,我在过去的3个小时里一直坚持这个错误,当有人弄清楚什么是错的时候,我可能会打错了.我真的只是想将ArrayList设置为我的TeacherAccount类的实例.在运行最简单的测试时,我一直得到以下错误,我认为我可以在下面.
这是TeacherAccount类
package com.studentOrganizer;
import java.util.List;
public class TeacherAccount {
private String username;
private String password;
private List<String> students;
public TeacherAccount(){
username=null;
password=null;
students = null;
}
public TeacherAccount(String username, String password,List<String> students){
this.username = username;
this.password = password;
this.students = students;
}
public void setUsername(String username){
this.username = username;
}
public void setPassword(String password){
this.password = password;
}
public void setStudents(List<String> students){
this.students = students;
}
public String getUsername(){
return username;
}
public String getPassword(){
return password;
}
public …Run Code Online (Sandbox Code Playgroud) 我在Android中遇到以下异常,点击按钮将我从一个活动带到另一个活动(我是Android开发的新手,所以它可能不是最明亮的问题):
java.lang.ClassCastException:android.widget.RelativeLayout无法强制转换为android.widget.EditText
我已经尝试过多次清理项目了,我已经尝试过Android Tools中的Fix Project Properties选项,我已经检查了我的xml是否有错误,但我似乎无法弄清楚这一点.我必须提一下,该按钮运行良好一段时间,直到发生此异常.
这是我的xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/editCustomerPhone"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_dark"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".CustomerInfoActivity" >
<FrameLayout
android:id="@+id/frameLayout1"
android:layout_width="wrap_content"
android:layout_height="250dp"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/ic_new_delivery" >
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Insert Customer Data:"
android:textColor="@color/light_blue"
android:textSize="20sp"
android:textStyle="italic" />
</FrameLayout>
<EditText
android:id="@+id/editCustomerName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView1"
android:layout_alignBottom="@+id/textView1"
android:layout_alignParentRight="true"
android:ems="10"
android:inputType="textPersonName"
android:textColor="@color/light_blue" />
<Button
android:id="@+id/submitInfoBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/editCustomerName"
android:text="Submit Info"
android:textColor="@color/light_red"
android:onClick="submitCustomerInfo"/>
<EditText
android:id="@+id/editCustomerPhone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editCustomerName"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/TextView01"
android:ems="10"
android:inputType="phone"
android:textColor="@color/light_red" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content" …Run Code Online (Sandbox Code Playgroud) 目前我的代码需要类转换
val dataWriter: BytesDataWriter = createDataWriter
def createDataWriter(p: SomeClass) =
p.create_datawriter().asInstanceOf[BytesDataWriter]
Run Code Online (Sandbox Code Playgroud)
该create_datawriter方法将返回超类DataWriter.asInstanceOf我尝试了这种方法,而不是使用它
val dataWriter: BytesDataWriter = createDataWriter(p) match {
case writer: BytesDataWriter => writer
case _ => throw new ClassCastException
}
Run Code Online (Sandbox Code Playgroud)
这太冗长了,如果情况不起作用.是否有更好的替代类铸造?
给定以下代码,我有一个问题:
class A{}
class B extends A {}
class C extends B{}
public class Test {
public static void main(String[] args) {
A a = new A();
A a1=new A();
B b = new B();
// a=b;// ok
// b=(B)a;// ClassCastException
// a=(A)a1; // ok
// a=a1; // ok
a=(B)a1; // compiles ok, ClassCastException
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是粗体字。我的理解是,对于要编译的代码,只需要满足这些类在相同的层次结构中,并因此可以工作(在树上进行隐式强制转换,在树上进行显式强制转换)即可。每当我遇到ClassCastException时,是因为引用指向树上的一个对象,例如,指向B类型的对象的B类型的引用。
问题所在的行似乎是指向类型A的对象的类型A的引用。强制转换为(B)显然是导致ClassCastException的原因。有人可以解释一下如何做到这一点吗?
注意:如果a1指向B类型的对象,则它将起作用(刚刚对其进行了测试)。因此,对于编译器,向下转换是合法的,并且如果引用指向正确类型的对象,则可以毫无例外地执行该向下转换。
通过将A ref a1强制转换为B并将其分配给a,看来A ref a不再期望引用类型A的对象,而是B?
谢谢,肖恩。
PS我知道这有点不寻常,正在准备Java认证。通常,我们向下转换为左侧的类型,例如b =(B)a; (并且我可以看到为什么给出了ClassCastException)。
我按照Branch.io上的所有说明进行操作
https://start.branch.io/#/ <<遵循此链接中的所有步骤.(我应该使用哪个键.. test_branch_key或live_branch_key两者有什么区别)
这是我的MainActivity.java文件
package absdevelopers.com.finalbranchtest;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import org.json.JSONObject;
import io.branch.referral.Branch;
import io.branch.referral.BranchError;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onStart() {
super.onStart();
Branch branch = Branch.getInstance();
branch.initSession(new Branch.BranchReferralInitListener() {
@Override
public void onInitFinished(JSONObject referringParams, BranchError error) {
if (error == null) {
// params are the deep linked params associated with the link that the user clicked before showing up …Run Code Online (Sandbox Code Playgroud) 假设我有一个方法
@SuppressWarnings("unchecked")
public <T extends Number> T getNumber() {
try {
return (T)number;
} catch (ClassCastException e) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
假设number是一个实例Integer,调用类似的方法
Float f = getNumber();
Run Code Online (Sandbox Code Playgroud)
结果成了一个ClassCastException.
我知道(不知何故)这是因为类型擦除,但有人可以提供更深刻的解释为什么异常升级到赋值级别并且不能在方法内捕获?
注意:我确实有public <T extends Number> T getNumber(Class<T> classT)从classT检查类型的版本,但希望摆脱传递classT并停止想知道上述问题.
我找到了一个奇怪的案例,到目前为止我无法解释.
public static void main(String[] args) {
LinkedList<Integer> a = new LinkedList<>();
a.add(2);
a.add(3);
a.add(4);
for (ArrayList ax : getBatches(a)){
System.out.println(ax);
}
}
private static ArrayList<ArrayList<Integer>> getBatches(List<Integer> optionIds) {
return new ArrayList(Arrays.asList(optionIds));
}
Run Code Online (Sandbox Code Playgroud)
执行结果是:
线程"main"中的异常java.lang.ClassCastException:java.util.LinkedList无法强制转换为java.util.ArrayList
for循环中的异常.
问题是:如何?返回类型ArrayList <ArrayList <Integer >>的方法如何返回LinkedList?
java ×8
android ×4
arraylist ×2
casting ×2
branch.io ×1
collections ×1
downcast ×1
factory ×1
generics ×1
inheritance ×1
nodelist ×1
preferences ×1
scala ×1
type-erasure ×1
xml ×1