0
CreateOne
をクラスから呼び出すと、CreateOne
メソッドはTask
の実行後にObject
を返す必要があります。だから私はタスクを呼び出した後、以下の行を追加しました。非アクティビティのAndroidアプリで待機する前にオブジェクトがスレッドによってロックされていない
task.wait();
しかし、それはここで
object not locked by thread before wait()
のようなエラーを返すには、私の完全なコードです:
public class MyStitchHelper
{
public Object CreateOne(Map<String, Object> map) throws InterruptedException
{
Object returnObject = null;
Document mapDoc = new Document(map);
ArrayList<Document> list = new ArrayList<>();
list.add(mapDoc);
Document itemsDocument = new Document("items", list);
PipelineStage itemsStage = new PipelineStage("literal", "", itemsDocument);
Document AuthDocument = new Document();
AuthDocument.append("database","my_db");
AuthDocument.append("collection", _collectionName);
PipelineStage AuthStage = new PipelineStage("insert", "mongodb-atlas", AuthDocument);
Task<List<Object>> task = _client.executePipeline(itemsStage, AuthStage);
task.wait();
if(task.isSuccessful())
{
Log.e("UserDAL", task.getResult().toString());
returnObject = task.getResult();
}
else
{
Log.e("UserDAL", "Error Adding Collectionsss");
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e("UserDAL", "" + e.getMessage());
}
});
}
return returnObject;
}
}
メソッドの呼び出し:すべての
public void AddUser()
{
MyStitchHelper DBHelper = new MyStitchHelper();
Map<String, Object> map = new HashMap<>();
map.put(User.Columns.EMAIL,user.get_userName());
map.put(User.Columns.PASSWORD, user.get_password());
map.put(User.BaseColumns.CREATED_DATE, Calendar.getInstance().getTime());
Document doc = (Document) DBHelper.CreateOne(map);
}
まず、実装するかどうか私が勉強しているものが正しい新しいユーザーを作成し、作成後にDocument Objectを返すだけです。
なぜエラーがスローされますか?
すべてのアイデア?
おかげしかし、この例では、見て、両方の方法は、内部にあります同じクラスとロックオブジェクトが使用されていますが、私の場合は両方とも異なるクラスのものです。 –