【发布时间】:2016-05-11 16:49:43
【问题描述】:
在 Android 中,我试图覆盖 ParseUser 的 toString() 以在我的列表视图中使用,使用
import android.os.Bundle;
import android.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseQuery;
import com.parse.ParseUser;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
*/
public class ExampleFragment extends Fragment {
public ExampleFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_example, container, false);
final ListView listView = (ListView) rootView.findViewById(R.id.exampleListView);
ParseQuery query = User.getQuery();
query.findInBackground(new FindCallback<User>() {
public void done(List<User> objects, ParseException e) {
if (e == null) {
// The query was successful.
listView.setAdapter(new ArrayAdapter<User>(rootView.getContext(), android.R.layout.simple_list_item_1, objects));
for (User user : objects) {
Log.i("AppInfo", "Added " + user.toString());
}
} else {
// Something went wrong.
}
}
});
return rootView;
}
public class User extends ParseUser {
@Override
public String toString() {
Log.i("AppInfo", "Username: " + getUsername());
return getUsername();
}
}
}
看起来很简单。我有这个嵌套在我的片段类中,它崩溃了
java.lang.ClassCastException: com.parse.ParseUser 无法转换为 com.mycompany.myproject.ExampleFragment$User
但是当我将它移动到它自己的子类中(它在 android studio 的资源管理器视图中获得自己的条目)时,它可以完美地工作。
嵌套在我的片段类中是否有原因?创建自己的子类只是为了覆盖一个函数似乎有点不必要。
更新:如果我删除 for 循环部分,它不会出错,但它仍然不会调用我覆盖的 toString(),因为列表视图返回 com.parse.ParseUser@etcetc。
【问题讨论】:
-
MyFragment.User 可以强制转换为 ParseUser 但反之则不行。每个用户始终是 ParseUser ......但并非所有 ParseUser 都是用户......这就是演员失败的原因......可能,在您的片段中,您将变量定义为“ParseUser”。但是,您应该将其用作“用户”...
-
请分享您定义 User/ParseUser 对象的代码行
-
发布相关课程的朋友。将代码发布到您实际遇到该错误的地方。我确定你错了,不应该是这样的
-
谢谢。已更新完整的代码示例。基本上我所做的一切都是在 CreateView 中用 User 替换 ParseUser 的位置,并添加了类位以覆盖 toString()。
-
我怀疑它可能是嵌套类以及嵌套在片段类中的组合。也许与生命周期或其他东西有关
标签: java android parse-platform overriding extends