【问题标题】:Crash when clicking on list item.单击列表项时崩溃。
【发布时间】:2014-12-17 23:07:28
【问题描述】:

我在哪里运行以下代码:

@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)

任何关于为什么会发生的想法/帮助以及可能的修复将不胜感激,感谢您的阅读。

【问题讨论】:

    标签: java android listview casting onclick


    【解决方案1】:

    您不能将项目同时投射到 StringArt。在您的情况下,适配器有一个字符串列表,这就是它抛出 ClassCastException 的原因。

    【讨论】:

      【解决方案2】:

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

      getItem 正在返回一个字符串,而您正在将其转换为艺术。您的列表适配器正在保存字符串而不是 Arts。

      【讨论】:

        【解决方案3】:

        像这样的类转换: 子子 = new Child();
        父父=(父)子;

        如果 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";
            }
        }
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-26
          • 2015-06-18
          • 1970-01-01
          • 1970-01-01
          • 2018-04-22
          • 2017-09-27
          • 1970-01-01
          • 2013-09-23
          相关资源
          最近更新 更多