В Android, я пытаюсь переопределить ToString() в ParseUser для использования в моем ListView, используяандроид Java Как переопределить ToString из ParseUser в вложенном классе
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), он отлично работает.
Есть ли причина, по которой он не работает в моем классе фрагментов? Кажется, что нет необходимости создавать свой собственный подкласс только для переопределения одной функции.
UPDATE: Если я удаляю часть цикла for, это не ошибка, но она по-прежнему не вызывает мою переопределенную toString(), поскольку listview возвращает [email protected]
MyFragment.User может быть переведен в ParseUser, но наоборот нет. Каждый пользователь всегда является ParseUser ... Но не все ParseUser - это пользователь ... Вот почему литье прекращается ... Возможно, в вашем фрагменте вы определили переменную как «ParseUser». Однако вы должны использовать его как «Пользователь» ... – W0rmH0le
Просьба поделиться кодовой строкой, в которой вы определяете объект User/ParseUser. – W0rmH0le
Опубликовать соответствующие классы. Отправьте код, в котором вы действительно получаете эту ошибку. Я уверен, что вы ошибаетесь, это не должно быть так. – Vucko