java.lang.String 不能转换为
Posted
技术标签:
【中文标题】java.lang.String 不能转换为【英文标题】:java.lang.String cannot be cast to 【发布时间】: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;
【问题讨论】:
【参考方案1】:您需要将ArrayAdapter<String>
更改为自定义适配器ArrayAdapter<SearchInformation>
。然后使用autoComplete.add(sInfo)
你可以得到SearchInformation
的整个对象adapterView.getAdapter().getItem(i)
【讨论】:
但是我不会产生我想要的自动完成建议(建议餐馆名称)。有解决办法吗? @ben 您需要自定义适配器。试试这个***.com/questions/8784249/… 您给我的链接似乎很有用,我计划实施@Carl Anderson 的答案。但是,我对如何实现这一点有点困惑,尤其是使用 Firebase 数据库。你能指导我吗?将不胜感激!【参考方案2】:那是因为它是一个ArrayAdapter<String>
,里面有字符串。您的 getItem()
因此也会给您一个字符串。
【讨论】:
以上是关于java.lang.String 不能转换为的主要内容,如果未能解决你的问题,请参考以下文章
GStringImpl 不能转换为 java.lang.String
为啥显示 java.lang.ClassCastException: android.text.SpannableString 不能转换为 java.lang.String?
java.math.BigDecimal 不能转换为 java.lang.String?
类转换:java.lang.String 不能转换为 org.mozilla.javascript.Scriptable
javax.faces.FacesException: java.lang.ClassCastException: java.lang.String 不能转换为 javax.faces.compone
io.undertow.servlet.util.IteratorEnumeration 不能转换为 java.lang.String