![](/img/trans.png)
[英]What is the solution "com.mongodb.MongoSocketReadException" and "com.mongodb.MongoTimeoutException"
[英]com.mongodb.MongoTimeoutException on deleting from MongoDB
我已經在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: 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}}]
它告訴你有一個非法的端口參數: java.lang.IllegalArgumentException:port = -1
在MongoClient
構造函數中,您使用requestUrl.getPort()
作為port參數,但URL的文檔清楚地說明了getPort()
:
返回此URL的端口號,如果此URL沒有顯式端口,則返回-1
您的requestUrl
字符串沒有端口值,因此getPort()
返回-1。 MongoDB
實例不接受-1作為端口號,因此最終超時並為您提供您所看到的異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.