Я создаю приложение для обмена сообщениями, используя android и mon go -db, и пытаюсь инициализировать пользовательский объект чата, который я создал в методе chatActivities oncreate.
В этой инициализации я также инициализирую пользовательский объект dbhelperclass, который выполняет всю аутентификацию для текущего зарегистрированного пользователя на стороне mon go.
Моя проблема в том, что после того, как я инициализирую этот объект чата и затем вызываю chat.getDBHelper. (Выполните любую операцию crud), я получаю ошибку при компиляции, говоря, что эта операция требует аутентификации.
Вот код инициализации chatActivity для создания.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_room);
ListView messageView = (ListView) findViewById(R.id.messages_view);
currChat = new Chat(messageView, this);
// this is a big problem I cant initialise messages here
currChat.getMessages(currChat.getChatRoomId(),currChat.getUserId());
}
Вот мой код конструктора чата
private String chatRoomId;
private String userId;
private String[] members;
public DbHelperClass dbHelperClass =new DbHelperClass();
public MessageAdapter chatPipe;
ListView messageList;
public Chat(ListView messageView, Context use){
//test
setUserId(dbHelperClass.getCurrUser().getId());
setChatRoomId("5e7ea2831c9d440000cb1961");
this.messageList = messageView;
chatPipe = new MessageAdapter(use, chatRoomId, this);
messageView.setAdapter(chatPipe);
}
}
И, наконец, мой класс DbHelper код конструктора, который выполняет всю аутентификацию на стороне сервера
public class DbHelperClass {
RemoteMongoClient mongoClient;
StitchUser currUser;
StitchAppClient client;
public DbHelperClass() {
try {
// test for development
UserPasswordCredential credential = new UserPasswordCredential("xxxxxxx", "xxxxxx");
client = Stitch.initializeDefaultAppClient("xxxxxx");
client.getAuth().loginWithCredential(credential);
System.out.println(client.getAuth().getUser().getId());
currUser = client.getAuth().getUser();
//mongodb-stitch-atlas
} catch (Exception e) {
e.printStackTrace();
}
mongoClient = client.getServiceClient(RemoteMongoClient.factory, "mongodb-atlas");
}
}
Вот исключение, которое происходит, когда я запускаю свое приложение на эмуляторе
2020 -04-10 17: 31: 59.757 19790-19790 / com.zach.gamemessageapp D / chat: не удалось получить сообщения com.mongodb.stitch.core.StitchClientException (MUST_AUTHENTICATE_FIRST): вызываемый метод требует аутентификации на com.mongodb.stitch .core.auth.internal.CoreStitchAuth.prepareAuthRequest (CoreStitchAuth. java: 295) на com.mongodb.stitch.core.auth.internal.CoreStitchAuth.doAuthenticatedRequest (CoreStitchAuth. * 103 7 *: 157) в com.mongodb.stitch.core.auth.internal.CoreStitchAuth.doAuthenticatedRequest (CoreStitchAuth. java: 172) в com.mongodb.stitch.core.services.internal.CoreStitchServiceClientImpl.callFunction. 1039 *: 113) на com.mongodb.stitch.core.services.mongodb.remote.internal.FindOperation.execute (FindOperation. java: 107) на com.mongodb.stitch.core.services.mongodb.remote.internal .FindOperation.execute (FindOperation. java: 31) на com.mongodb.stitch.core.services.mongodb.remote.internal.CoreRemoteMongoIterableImpl.iterator (CoreRemoteMongoIterableImpl. java: 62) на com.mongodb.stitchc. .services.mongodb.remote.internal.CoreRemoteMongoIterableImpl.forEach
Я не понимаю, что здесь происходит. Я инициализировал переменную dbhelper в объекте chat, который затем инициализируется в методе oncreate для chatActivity. Разве я не могу вызывать операции crud для этого объекта чата после его создания?
В любом случае, с моей стороны стоит отметить, что я могу выполнять операции crud с этим объектом чата в методе вне метода oncreate () для chatActivity, вызов crud аутентифицирован то.