无法在 Parse 数据库中使用 'put' 方法添加列
cannot add column with 'put' method in Parse database
我正在使用 Parse 开发实时消息应用程序,并希望在 ListView 中显示所有用户。所以我也想参考用户是在线还是离线,我尝试了 'put' 方法来添加名为 "online" 的列并放置有关它的信息。出错的时候,我自己加了那一栏,还是不行。这是我在 UserList class 中完全尝试过的内容:
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseUser;
import java.util.ArrayList;
import java.util.List;
public class UserList extends AppCompatActivity {
public static ArrayList<ParseUser> userList;
public static String TAG = "UserList";
public static ParseUser user = new ParseUser();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_list);
updateUserStatus(true);
}
@Override
protected void onDestroy() {
super.onDestroy();
updateUserStatus(false);
}
@Override
protected void onResume() {
super.onResume();
loadUserList();
}
private void updateUserStatus(boolean isOnline) {
user.put("online", isOnline);
user.saveEventually();
//System.out.println("getBoolean's result : " + user.getBoolean("online"));
}
private void loadUserList() {
ParseUser.getQuery().whereNotEqualTo("username", user.getUsername()).findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> objects, ParseException e) {
if (objects != null) {
if (objects.size() == 0) System.out.println("No user found");
userList = new ArrayList<>(objects);
ListView list = (ListView) findViewById(R.id.userList);
list.setAdapter(new UserAdapter(UserList.this));
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
startActivity(new Intent(UserList.this, MainActivity.class));
finish();
}
});
}
else {
System.out.println("exception detected while loading user list");
e.printStackTrace();
}
}
});
}
}
用户适配器class:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.parse.ParseUser;
public class UserAdapter extends BaseAdapter {
public static String TAG = "UserAdapter";
public TextView labelname;
LayoutInflater layoutInflater;
public UserAdapter(Context context){
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return UserList.userList.size();
}
@Override
public ParseUser getItem(int index) {
return UserList.userList.get(index);
}
@Override
public long getItemId(int index) {
return index;
}
@Override
public View getView(int pos, View v, ViewGroup group) {
ParseUser c = getItem(pos);
if (v == null) {
v = layoutInflater.inflate(R.layout.chat_item, null);
}
labelname = (TextView) v;
labelname.setText(c.getUsername());
labelname.setCompoundDrawablesWithIntrinsicBounds(c.getBoolean("online") ? R.drawable.ic_online
: R.drawable.ic_offline, 0, R.drawable.arrow, 0);
return v;
}
}
我尝试使用 SaveCallback 进行 saveInBackground,但它抛出了名为:
的异常
Caused by: java.lang.IllegalArgumentException: Cannot save a ParseUser until it has been signed up. Call signUp first
但我比 1 小时前更困惑。我在另一个 class 中授权我的用户,这似乎不是问题。
这是 Parse
的开放性错误。可能还没有解决。 look at this and this 也是。
而不是 saveEventually()
使用 saveInBackground()
和
你不能那样做
ParseUser user = new ParseUser();
如果你想要登录用户而不是像这样
ParseUser user = ParseUser.getCurrentUser();
在获得登录用户之前,您必须先注册
我正在使用 Parse 开发实时消息应用程序,并希望在 ListView 中显示所有用户。所以我也想参考用户是在线还是离线,我尝试了 'put' 方法来添加名为 "online" 的列并放置有关它的信息。出错的时候,我自己加了那一栏,还是不行。这是我在 UserList class 中完全尝试过的内容:
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseUser;
import java.util.ArrayList;
import java.util.List;
public class UserList extends AppCompatActivity {
public static ArrayList<ParseUser> userList;
public static String TAG = "UserList";
public static ParseUser user = new ParseUser();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_list);
updateUserStatus(true);
}
@Override
protected void onDestroy() {
super.onDestroy();
updateUserStatus(false);
}
@Override
protected void onResume() {
super.onResume();
loadUserList();
}
private void updateUserStatus(boolean isOnline) {
user.put("online", isOnline);
user.saveEventually();
//System.out.println("getBoolean's result : " + user.getBoolean("online"));
}
private void loadUserList() {
ParseUser.getQuery().whereNotEqualTo("username", user.getUsername()).findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> objects, ParseException e) {
if (objects != null) {
if (objects.size() == 0) System.out.println("No user found");
userList = new ArrayList<>(objects);
ListView list = (ListView) findViewById(R.id.userList);
list.setAdapter(new UserAdapter(UserList.this));
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
startActivity(new Intent(UserList.this, MainActivity.class));
finish();
}
});
}
else {
System.out.println("exception detected while loading user list");
e.printStackTrace();
}
}
});
}
}
用户适配器class:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.parse.ParseUser;
public class UserAdapter extends BaseAdapter {
public static String TAG = "UserAdapter";
public TextView labelname;
LayoutInflater layoutInflater;
public UserAdapter(Context context){
layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return UserList.userList.size();
}
@Override
public ParseUser getItem(int index) {
return UserList.userList.get(index);
}
@Override
public long getItemId(int index) {
return index;
}
@Override
public View getView(int pos, View v, ViewGroup group) {
ParseUser c = getItem(pos);
if (v == null) {
v = layoutInflater.inflate(R.layout.chat_item, null);
}
labelname = (TextView) v;
labelname.setText(c.getUsername());
labelname.setCompoundDrawablesWithIntrinsicBounds(c.getBoolean("online") ? R.drawable.ic_online
: R.drawable.ic_offline, 0, R.drawable.arrow, 0);
return v;
}
}
我尝试使用 SaveCallback 进行 saveInBackground,但它抛出了名为:
的异常Caused by: java.lang.IllegalArgumentException: Cannot save a ParseUser until it has been signed up. Call signUp first
但我比 1 小时前更困惑。我在另一个 class 中授权我的用户,这似乎不是问题。
这是 Parse
的开放性错误。可能还没有解决。 look at this and this 也是。
而不是 saveEventually()
使用 saveInBackground()
和
你不能那样做
ParseUser user = new ParseUser();
如果你想要登录用户而不是像这样
ParseUser user = ParseUser.getCurrentUser();
在获得登录用户之前,您必须先注册