2016-05-11 3 views
1

В 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]

+0

MyFragment.User может быть переведен в ParseUser, но наоборот нет. Каждый пользователь всегда является ParseUser ... Но не все ParseUser - это пользователь ... Вот почему литье прекращается ... Возможно, в вашем фрагменте вы определили переменную как «ParseUser». Однако вы должны использовать его как «Пользователь» ... – W0rmH0le

+0

Просьба поделиться кодовой строкой, в которой вы определяете объект User/ParseUser. – W0rmH0le

+0

Опубликовать соответствующие классы. Отправьте код, в котором вы действительно получаете эту ошибку. Я уверен, что вы ошибаетесь, это не должно быть так. – Vucko

ответ

1

убедитесь, что вы делаете эти 2 вещей

класса 1.register перед тем Parse.initialize

ParseObject.registerSubclass(User.class); 

2.Use аннотации к указанному отображению класса в WAHT класса

@ParseClassName("_User") 
public class User extends ParseUser { 
    ... 
} 

вот ссылка. https://parse.com/docs/android/guide#objects-subclassing-parseobject

+0

Спасибо. Я только что попробовал, используя ParseUser.registerSubclass (ExampleFragment.User.class); как моя инициализация в другой части. В настоящее время возникает ошибка: java.lang.RuntimeException: не удается создать приложение com.android.tools.fd.runtime.BootstrapApplication: java.lang.IllegalArgumentException: не удается зарегистрировать тип, который не реализует конструктор по умолчанию! – James

+0

добавить эту аннотацию? @ParseClassName ("_ User") – ChunTingLin

+0

Привет Да, я добавил @ParseClassName ("_ User") и все тот же вопрос – James

Смежные вопросы