gpt4 book ai didi

java - 从 MongoDB 删除时出现 com.mongodb.MongoTimeoutException

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:56 25 4
gpt4 key购买 nike

我已经在 https://mlab.com/ 创建了一个 MongoDB 数据库现在我尝试通过 Android 应用程序从该数据库中删除文档,但收到异常 com.mongodb.MongoTimeoutException。所以请帮忙。

代码

package com.example.abc.mongodatabase;

import android.content.Context;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
import java.net.URL;


public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MongoDeletion().execute(MainActivity.this);
}
}



class MongoDeletion extends AsyncTask<Context, Void, Object> {

@Override
protected Object doInBackground(Context... params) {
try {
URL requestUrl = new URL("https://api.mongolab.com/api/1/databases/my_database/collections/my_table/?apiKey=################################");
MongoClient mongoClient = new MongoClient(new ServerAddress(requestUrl.getHost(),requestUrl.getPort()));
DB db = mongoClient.getDB("my_database");
DBCollection table = db.getCollection("my_table");
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "my_name");
table.remove(searchQuery);
Toast.makeText(params[0], "Deleted...", Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
Log.e("ERROR","MongoDB", e);
}
return null;
}
}

我要删除的文档

{
"_id": {
"$oid": "5735d2e50a00b27acd69e10b"
},
"date": "14/5/2016",
"longitude": "72.98868477344513",
"name": "my_name",
"latitude": "33.639541155896275"
}

异常

05-15 11:20:02.122 2651-2680/com.example.mongodatabase.mongo2 E/ERROR: MongoDB
com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting for a server that matches AnyServerSelector{}. Client view of cluster state is {type=Unknown, servers=[{address=api.mongolab.com:-1, type=Unknown, state=Connecting, exception={java.lang.IllegalArgumentException: port=-1}}]
at com.mongodb.BaseCluster.getServer(BaseCluster.java:82)
at com.mongodb.DBTCPConnector.getServer(DBTCPConnector.java:656)
at com.mongodb.DBTCPConnector.access$500(DBTCPConnector.java:40)
at com.mongodb.DBTCPConnector$MyPort.getConnection(DBTCPConnector.java:505)
at com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:448)
at com.mongodb.DBTCPConnector.getPrimaryPort(DBTCPConnector.java:407)
at com.mongodb.DBCollectionImpl.remove(DBCollectionImpl.java:219)
at com.mongodb.DBCollectionImpl.remove(DBCollectionImpl.java:203)
at com.mongodb.DBCollection.remove(DBCollection.java:300)
at com.mongodb.DBCollection.remove(DBCollection.java:327)
at com.example.mongodatabase.mongo2.MongoDeletion.doInBackground(MainActivity.java:43)
at com.example.mongodatabase.mongo2.MongoDeletion.doInBackground(MainActivity.java:32)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:838)

最佳答案

错误消息告诉您出了什么问题:

com.mongodb.MongoTimeoutException:WAITING与 AnyServerSelector{} 匹配的服务器时,10000 毫秒后超时。集群状态的客户端 View 为 {type=Unknown,servers=[{address=api.mongolab.com:-1, type=Unknown,state=Connecting,Exception={java.lang.IllegalArgumentException: port=-1}}]

它告诉您存在非法端口参数:java.lang.IllegalArgumentException: port=-1

在您的 MongoClient 构造函数中,您使用 requestUrl.getPort() 作为端口参数,但 docs for URL明确指出getPort():

返回此 URL 的端口号,如果此 URL 没有显式端口,则返回 -1

您的 requestUrl 字符串没有端口值,因此 getPort() 返回 -1。 MongoDB 实例不接受 -1 作为端口号,因此它最终会超时并给出您所看到的异常。

关于java - 从 MongoDB 删除时出现 com.mongodb.MongoTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37235216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com