2016-05-15 44 views
1

我已經在https://mlab.com/創建了一個MongoDB數據庫,現在我試圖通過我的Android應用程序從該數據庫中刪除一個文檔,但我得到一個異常com.mongodb.MongoTimeoutException。所以請幫助。從MongoDB刪除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) 

回答

0

該錯誤消息告訴你什麼是錯的:

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異常:端口= -1

在你MongoClient構造,您正在使用requestUrl.getPort()作爲端口參數,但docs for URL明確指出:getPort()

返回此URL的端口號或-1如果此URL沒有顯式端口

您的requestUrl字符串沒有端口值,因此getPort()返回-1。 MongoDB實例不接受-1作爲端口號,所以它最終會超時並給出您所看到的例外。

+0

謝謝!但請告訴我該如何擺脫這個問題? –

+0

@SajalAli您的端口號是錯誤的。我建議你做一些搜索來找出正確的端口號碼,然後更新你的代碼來使用它。查看一下[MongoClient文檔](http://api.mongodb.com/java/2.10.0/com/mongodb/MongoClient.html)。 – adelphus