2016-05-15 3 views
1

Я создал базу данных MongoDB по адресу https://mlab.com/, и теперь я пытаюсь удалить документ из этой базы данных через приложение для Android, но получаю исключение com.mongodb.MongoTimeoutException. Так что, пожалуйста, помогите.com.mongodb.MongoTimeoutException при удалении из MongoDB

Код

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 documentation] (http://api.mongodb.com/java/2.10.0/com/mongodb/MongoClient.html) для некоторых примеров. – adelphus

Смежные вопросы