【问题标题】:java.lang.String cannot be cast tojava.lang.String 不能转换为
【发布时间】:2018-02-10 15:32:04
【问题描述】:

当我单击自动完成建议的项目时,我正在尝试获取 firebase 数据库值。下面的代码是我尝试实现它的方式。但是,我似乎在这一行收到了 java.lang.String cannot be cast to SearchInformation 错误:

sInfo = (SearchInformation) adapterView.getAdapter().getItem(i);

我正在关注this 示例的第一个答案。

注意:我不知道这是否是使用自动完成从 firebase 数据库中检索信息的正确方法,但要找出答案,我需要先解决这个问题。

代码:

public class Hot extends Fragment {

    private SearchInformation sInfo;
    private DatabaseReference database;


    public Hot() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_hot, container, false);

        database = FirebaseDatabase.getInstance().getReference();

        final ArrayAdapter<String> autoComplete = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1);

        database.child("AutoCompleteOptions").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot suggestionSnapshot : dataSnapshot.getChildren()){

                    sInfo = suggestionSnapshot.getValue(SearchInformation.class);

                    autoComplete.add(sInfo.getEatery_name());
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
        AutoCompleteTextView ACTV= rootView.findViewById(R.id.actv);
        ACTV.setAdapter(autoComplete);
        ACTV.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                sInfo = (SearchInformation) adapterView.getAdapter().getItem(i); // ** ERROR HERE **
                String anID = sInfo.getEatery_id(); 

                Log.i("ID is", anID);

            }
        });
        return rootView;
    }

}

数据模型:

public class SearchInformation {

    private String eatery_name;
    private String eatery_id;

    public SearchInformation() {

    }

    public SearchInformation(String eatery_name, String eatery_id) {
        this.eatery_name = eatery_name;
        this.eatery_id = eatery_id;

    }

    public String getEatery_name() {
        return eatery_name;
    }

    public void setEatery_name(String eatery_name) {
        this.eatery_name = eatery_name;
    }

    public String getEatery_id() {
        return eatery_id;
    }

    public void setEatery_id(String eatery_id) {
        this.eatery_id = eatery_id;
    }

}

【问题讨论】:

    标签: android casting autocomplete onitemclicklistener onitemclick


    【解决方案1】:

    您需要将ArrayAdapter&lt;String&gt; 更改为自定义适配器ArrayAdapter&lt;SearchInformation&gt;。然后使用autoComplete.add(sInfo)你可以得到SearchInformation的整个对象adapterView.getAdapter().getItem(i)

    【讨论】:

    • 但是我不会产生我想要的自动完成建议(建议餐馆名称)。有解决办法吗?
    • @ben 您需要自定义适配器。试试这个stackoverflow.com/questions/8784249/…
    • 您给我的链接似乎很有用,我计划实施@Carl Anderson 的答案。但是,我对如何实现这一点有点困惑,尤其是使用 Firebase 数据库。你能指导我吗?将不胜感激!
    【解决方案2】:

    那是因为它是一个ArrayAdapter&lt;String&gt;,里面有字符串。您的 getItem() 因此也会给您一个字符串。

    【讨论】:

      猜你喜欢
      • 2015-05-18
      • 2011-10-27
      • 2019-10-19
      • 2018-01-23
      • 2011-05-09
      • 2014-06-24
      • 1970-01-01
      • 2013-08-27
      • 2018-05-17
      相关资源
      最近更新 更多