Kyryl Zotov
Kyryl Zotov

Reputation: 1968

Android Parse Object null fileds

I am making POST my user class with parse and see it at my dashboard. When I try to query all of them it returns me exact number of objects but all the fields are null or 0.

 ParseQuery<User> query = ParseQuery.getQuery(PARSE_USER);
            query.findInBackground(new FindCallback<User>() {
                @Override
                public void done(List<User> list, com.parse.ParseException e) {
                    if (e == null) {
                        for (User user : list) {
                            Log.v("user:", user.toString());
                        }
                        //mListView.setAdapter(new LoveBoardAdapter(mCtx, list));
                    } else {
                        Toast.makeText(mCtx, getString(R.string.internet_error), Toast.LENGTH_LONG).show();
                    }
                }
            });

EDIT:

This is constant and my User.class

private final String PARSE_USER = "User";


@ParseClassName("User")
public class User extends ParseObject {

    private int age;
    private String name;
    private String gender;
    private String contact;
    private String bio;
    private String city;
    private int likes;

    public User() {
        super();
    }

    public User(int age, String name, String gender, String contact, String bio, String city, int likes) {
        this.age = age;
        this.name = name;
        this.gender = gender;
        this.contact = contact;
        this.bio = bio;
        this.city = city;
        this.likes = likes;
    }

    public int getLikes() {
        return likes;
    }

    public void setLikes(int likes) {
        this.likes = likes;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getContact() {
        return contact;
    }

    public void setContact(String contact) {
        this.contact = contact;
    }

    public String getBio() {
        return bio;
    }

    public void setBio(String bio) {
        this.bio = bio;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", contact='" + contact + '\'' +
                ", bio='" + bio + '\'' +
                ", city='" + city + '\'' +
                ", likes=" + likes +
                '}';
    }
}

Upvotes: 0

Views: 323

Answers (3)

Arne Sikstr&#246;m
Arne Sikstr&#246;m

Reputation: 36

My notes:

  • The Parse annotation takes care of setting up the data fields so no need for that.
  • The Getters and Setters for a Parse subclass should use the accessors from the ParseObject class.
  • Create constants for your class columns, reduces risk for mispelling and you can use the code completion.
  • In the query you should use the class for better type safety (UserData.class)
  • Consider renaming the custom User class to something else (UserData in this example) as is collides with the builtin User class. (Even if its actually _User)
  • A subclass can be used to store data in the system User(_User) class but that is a different question.
  • Remember to register ParseObject.registerSubclass(UserData.class); in the MainActivity

Tested with the following code, UserData class:

@ParseClassName("UserData")
public class UserData extends ParseObject {

    // Setup the constant for the column names here
    public static final String name = "name";
    public static final String city = "city";
    // :

    public UserData() {
    }

    public String getName() {
        // Get data using ParseObject
        return getString(UserData.name);
    }

    public void setName(String newName) {
        // Store data using ParseObject
        put(UserData.name, newName);
    }

    // More setters and getters
    // :
}

ShowUsers activity:

public class ShowUsers extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_users);

        ParseQuery<UserData> query = ParseQuery.getQuery(UserData.class);
        query.findInBackground(new FindCallback<UserData>() {
            @Override
            public void done(List<UserData> objects, ParseException e) {
                if (e == null) {
                    for (UserData userData : objects) {
                        // Access with getter
                        Log.v("user name:", userData.getName());
                        // Access with type safe constant
                        Log.v("city: ", userData.getString(UserData.city));
                    }
                }
            }
        });
    }
}

Upvotes: 2

vinsce
vinsce

Reputation: 1338

Try to change from

@ParseClassName("User")

to

@ParseClassName("_User")

Upvotes: 0

android_eng
android_eng

Reputation: 1370

Since it is the default user table , change :

 ParseQuery<User> query = ParseQuery.getQuery(PARSE_USER);
        query.findInBackground(new FindCallback<User>() { 
            @Override 
            public void done(List<User> list, com.parse.ParseException e) {
                if (e == null) {
                    for (User user : list) {
                        Log.v("user:", user.toString());
                    } 
                    //mListView.setAdapter(new LoveBoardAdapter(mCtx, list)); 
                } else { 
                    Toast.makeText(mCtx, getString(R.string.internet_error), Toast.LENGTH_LONG).show();
                } 
            } 
        }); 

To

    ParseQuery<ParseUser> query = ParseUser.getQuery();
        query.findInBackground(new FindCallback<User>() { 
            @Override 
             public void done(List<ParseUser> list, ParseException e) {
                if (e == null) {
                    for (User user : list) {
                        Log.v("user:", user.toString());
                    } 
                    //mListView.setAdapter(new LoveBoardAdapter(mCtx, list)); 
                } else { 
                    Toast.makeText(mCtx, getString(R.string.internet_error), Toast.LENGTH_LONG).show();
                } 
            } 
        }); 

Upvotes: 1

Related Questions