单击列表项时崩溃。

时间:2014-12-17 23:07:28

标签: java android listview casting onclick

我正在运行以下代码:

@Override
    protected void onListItemClick(ListView listView, View view, int position,
            long id) {
        String item = (String) getListAdapter().getItem(position);
        Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();
        Art art = (Art) getListAdapter().getItem(position);
        /*Intent intent = new Intent(this,X.class);
        intent.putExtra("art", art);
        this.startActivity(intent);*/
    }

我的艺术班是这样的:

import java.io.Serializable;
import java.util.List;

import com.google.gson.annotations.SerializedName;

public class Art implements Serializable{

    private static final long serialVersionUID = 8359220892008313080L;

    @SerializedName("body")
    private String body;
    @SerializedName("title")
    private String title;
    @SerializedName("images")
    private List<Images> images;


    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public List<Images> getImages() {
        return images ;
    }

    public void setImages(List<Images> images) {
        this.images = images;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("***** Art  *****\n");
        sb.append("BODY=" + getBody() + "\n");
        sb.append("TITLE=" + getTitle() + "\n");
        sb.append("IMAGES=" + getImages() + "\n");
        sb.append("*****************************");

        return sb.toString();
    }

}

这是我的日志,它在此特定行崩溃:Art art =(Art)getListAdapter()。getItem(position);

E/AndroidRuntime(912): FATAL EXCEPTION: main
E/AndroidRuntime(912): java.lang.ClassCastException: java.lang.String cannot be cast to com.Art
E/AndroidRuntime(912):  at com.ArtListActivity.onListItemClick(ArtListActivity.java:118)
E/AndroidRuntime(912):  at android.app.ListActivity$2.onItemClick(ListActivity.java:319)

感谢您的阅读,我们将非常感谢任何想法/帮助,了解其发生的原因和可能的解决方案。

3 个答案:

答案 0 :(得分:1)

Art art = (Art) getListAdapter().getItem(position);

getItem返回一个String,你将它转换为Art。你的列表适配器是字符串,而不是艺术。

答案 1 :(得分:1)

您无法将这些项目投放到StringArt。在你的情况下,适配器有一个字符串列表,这就是它抛出ClassCastException的原因。

答案 2 :(得分:0)

类投射如下:         儿童=新儿童();
        父母=(父)子;

如果Parent是Child的超类,

将起作用。

由于Art类不是类类型String的超类,因此转换将失败。

以下示例:

公共类CastExample {

public static void main(String[] args) {

    Child child = new Child();      
    Parent parent = (Parent) child;

    System.out.println(parent.whoami());
    // Output: I am a Parent

}

private static class Parent {

    public String whoami() {
        return "I am a Parent";
    }
}

private static class Child extends Parent {

    public String whoami() {
        return "I am a Child";
    }
}

}