2014-04-08 30 views
0

我試圖連接到mogoDB數據庫,我安裝的MongoDB在代碼連接到MongoDB的錯誤,進口罐子不承認

http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian/

解釋和蒙戈通過mongoshell在Ubuntu終端播放,一切都精明,然後我試圖在android應用程序中實現它。我稱爲本教程

http://www.mkyong.com/mongodb/java-mongodb-insert-a-document/

和編輯以創建下面

包com.example.test1我的代碼中列出;

import java.net.UnknownHostException; 
import java.text.MessageFormat; 
import java.util.Set; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ProgressBar; 
import android.widget.TextView; 

import com.mongodb.DB; 
import com.mongodb.MongoClient; 

public class InsertDocumentApp extends ActionBarActivity { 
private Button btnRestart; 
private Button btnCancel = null; 
private TextView txtMessage = null; 
private TextView txt=null; 
private ProgressBar mProgressBar = null; 
private HugeWork task = null; 
private static final int MAX_PROGRESS = 10; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.showdata); 

    btnRestart = (Button) findViewById(R.id.btnRestart); 
    btnCancel = (Button) findViewById(R.id.btnCancel); 
    txtMessage = (TextView) findViewById(R.id.txtMessage); 
    mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
    txt = (TextView) findViewById(R.id.textViewname); 
    // set an arbitrary max value for the progress bar 
    mProgressBar.setMax(MAX_PROGRESS); 
    // start the async task 
    start(); 
} 


public void cancelOnclick(View v) { 
    task.cancel(true); 
    btnCancel.setEnabled(false); 
    btnRestart.setEnabled(true); 
} 

// Restart the process execution. This is the listener to the Restart button. 
public void restartOnclick(View v) { 
    start(); 
} 


private void start() { 

    task = new HugeWork(); 

    task.execute(0); 

    mProgressBar.setProgress(0); 

    btnCancel.setEnabled(true); 
    btnRestart.setEnabled(false); 
} 


private void executeHardWork() 
{ 
    MongoClient mongoClient; 
    DB db; 
    try { 
     try 
     { 
     mongoClient = new MongoClient(); //connects to mongo server locally (seems to work) 
     // mongoClient = new MongoClient("localhost",27017); //connects to mongo server locally (seems to work) 
     mongoClient = new MongoClient("localhost",27017); // connects to mongo server locally 
     db = mongoClient.getDB("mydb"); // connect to a database --implicitly creates database if none exists 
     Set<String> colls = db.getCollectionNames(); 
     for (String s : colls) 
      System.out.println(s); 

     mongoClient.close(); 

     } catch (UnknownHostException ex) { 
     ex.printStackTrace(); 
     } 
    } 
    catch(Exception e) 
    { 
     System.out.println(e); 
    } 
} 

     @Override 
    protected void onPreExecute() { 
     txtMessage.setText("Executing async task..."); 
     super.onPreExecute(); 
    } 


    @Override 
    protected Integer doInBackground(Integer... params) { 


     int progress = ((Integer[])params)[0]; 

     do { 

          if (!this.isCancelled()) { 
       // execute hard work - sleep 
       executeHardWork(); 
      } 
      else { 
            break; 
      } 


      progress++; 
      publishProgress(progress); 
     } while (progress <= MAX_PROGRESS); 

     return progress; 
    } 


    @Override 
    protected void onProgressUpdate(Integer... values) { 
     int progress = ((Integer[])values)[0]; 
     mProgressBar.setProgress(progress); 
     super.onProgressUpdate(values); 
    } 


    @Override 
    protected void onCancelled(Integer result) { 
     txtMessage.setText(MessageFormat.format 
     ("Async task has been cancelled at {0} seconds.", result - 1)); 
     super.onCancelled(result); 
    } 


    @Override 
    protected void onPostExecute(Integer result) { 
     txtMessage.setText(MessageFormat.format 
     ("Async task execution finished in {0} seconds.", result - 1)); 
     btnCancel.setEnabled(false); 
     btnRestart.setEnabled(true); 
     super.onPostExecute(result); 
    } 
} 

}

我注意到,在本教程部分進口沒有在ADT未來即使我進口,我從這個鏈接

http://central.maven.org/maven2/org/mongodb/mongo-java-driver/2.11.3/

了jar文件,這是罐子我下載的文件mongo-java-driver-2.11.3.jar 我導入它,項目/ buildpath /添加外部jar 錯誤顯示處處有'mongo items'在那裏。 是否因爲eclipse不能識別我添加到構建路徑的jar文件? 這是正確的jar文件嗎?我需要做更多的事情來讓我的應用程序運行嗎?

這是因爲i型在終端

[email protected]:~$ mongo 
MongoDB shell version: 2.4.10 
connecting to: test 
Server has startup warnings: 
Wed Apr 9 10:03:04.513 [initandlisten] 
Wed Apr 9 10:03:04.513 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary. 
Wed Apr 9 10:03:04.513 [initandlisten] **  32 bit builds are limited to less than 2GB of data (or less with --journal). 
Wed Apr 9 10:03:04.513 [initandlisten] **  Note that journaling defaults to off for 32 bit and is currently off. 
Wed Apr 9 10:03:04.513 [initandlisten] **  See http://dochub.mongodb.org/core/32bit 
Wed Apr 9 10:03:04.513 [initandlisten] 
> 

蒙戈我可以經由終端進入數據庫時​​發生的終端提示,但在現在ADT中示出了以下錯誤。

是使用32位ubuntu的任何問題?

和logcat的是

04-09 10:03:47.175: W/com.mongodb.tcp(2682): Exception executing isMaster command on localhost/127.0.0.1:27017 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 2 7017) after 10000ms: isConnected failed: ECONNREFUSED (Connection refused) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at libcore.io.IoBridge.isConnected(IoBridge.java:223) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at libcore.io.IoBridge.connectErrno(IoBridge.java:161) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at libcore.io.IoBridge.connect(IoBridge.java:112) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at java.net.Socket.connect(Socket.java:843) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DBPort._open(DBPort.java:223) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DBPort.go(DBPort.java:125) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DBPort.go(DBPort.java:106) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DBPort.findOne(DBPort.java:162) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DBPort.runCommand(DBPort.java:170) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at co m.mongodb.DBTCPConnector.initDirectConnection(DBTCPConnector.java:547) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:526) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:236) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:273) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.mongodb.DB.getCollectionNames(DB.java:400) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.example.test1.InsertDocumentApp.executeHardWork(InsertDocumentApp.java:87) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.example.test1.InsertDocumentApp.access$1(InsertDocumentApp.java:76) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.example.test1.InsertDocumentApp$HugeWork.doInBackground(InsertDocumentApp.java:151) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at com.example.test1.InsertDocumentApp$HugeWork.doInBackground(InsertDocumentApp.java:1) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at android.os.AsyncTask$2.call(AsyncTask.java:288) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at java.lang.Thread.run(Thread.java:841) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): Caused by: libcore.io.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): at libcore.io.IoBridge.isConnected(IoBridge.java:208) 
04-09 10:03:47.175: W/com.mongodb.tcp(2682): ... 27 more 
04-09 10:03:47.175: W/com.mongodb(2682): emptying DBPortPool to localhost/127.0.0.1:27017 b/c of error 
04-09 10:03:47.175: W/com.mongodb(2682): java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 27017) after 10000ms: isConnected failed: ECONNREFUSED (Connection refused) 
04-09 10:03:47.175: W/com.mongodb(2682): at libcore.io.IoBridge.isConnected(IoBridge.java:223) 
04-09 10:03:47.175: W/com.mongodb(2682): at libcore.io.IoBridge.connectErrno(IoBridge.java:161) 
04-09 10:03:47.175: W/com.mongodb(2682): at libcore.io.IoBridge.connect(IoBridge.java:112) 
04-09 10:03:47.175: W/com.mongodb(2682): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
04-09 10:03:47.175: W/com.mongodb(2682): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
04-09 10:03:47.175: W/com.mongodb(2682): at java.net.Socket.connect(Socket.java:843) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.mongodb.DBPort._open(DBPort.java:223) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.mongodb.DBPort.go(DBPort.java:125) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.mongodb.DBPort.call(DBPort.java:92) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:244) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:273) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.mongodb.DB.getCollectionNames(DB.java:400) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.example.test1.InsertDocumentApp.executeHardWork(InsertDocumentApp.java:87) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.example.test1.InsertDocumentApp.access$1(InsertDocumentApp.java:76) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.example.test1.InsertDocumentApp$HugeWork.doInBackground(InsertDocumentApp.java:151) 
04-09 10:03:47.175: W/com.mongodb(2682): at com.example.test1.InsertDocumentApp$HugeWork.doInBackground(InsertDocumentApp.java:1) 
04-09 10:03:47.175: W/com.mongodb(2682): at android.os.AsyncTask$2.call(AsyncTask.java:288) 
04-09 10:03:47.175: W/com.mongodb(2682): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
04-09 10:03:47.175: W/com.mongodb(2682): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
04-09 10:03:47.175: W/com.mongodb(2682): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
04-09 10:03:47.175: W/com.mongodb(2682): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
04-09 10:03:47.175: W/com.mongodb(2682): at java.lang.Thread.run(Thread.java:841) 
04-09 10:03:47.175: W/com.mongodb(2682): Caused by: libcore.io.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused) 
04-09 10:03:47.175: W/com.mongodb(2682): at libcore.io.IoBridge.isConnected(IoBridge.java:208) 
04-09 10:03:47.175: W/com.mongodb(2682): ... 23 more 
04-09 10:03:47.255: D/dalvikvm(2682): GC_FOR_ALLOC freed 215K, 1% free 117331K/117612K, paused 36ms, total 36ms 
04-09 10:03:47.315: D/dalvikvm(2682): GC_FOR_ALLOC freed 27K, 1% free 119327K/119424K, paused 32ms, total 32ms 
04-09 10:03:47.375: D/dalvikvm(2682): GC_FOR_ALLOC freed 27K, 1% free 121338K/121432K, paused 34ms, total 34ms 
04-09 10:03:47.375: I/System.out(2682): com.mongodb.MongoException$Network: Read operation to server localhost/127.0.0.1:27017 failed on database mydb 
+0

嘗試將jar複製到eclipse項目中的libs文件夾,然後再次添加它 –

+0

嘗試提供您的計算機的ip而不是本地主機。 – Ross

回答

1

我不認爲你可以從裏面的Android使用MongoDB的。參考這個鏈接 MongoDB on Android

你所指的鏈接,即http://www.mkyong.com/mongodb/java-mongodb-insert-a-document/是從一個Java應用程序而不是從android內部工作。

我認爲您的解決方案是,如果你想讓你的Android設備內部的數據庫,或者你可以安裝在一臺服務器MongoDB數據庫(或使用一個類似https://mongolab.com/)要麼使用SQLite或couchbase並稱之爲的MongoDB數據庫從網絡安裝在Web服務器中的服務。所以設計可能看起來像這樣。 你有你的android應用程序 - >調用web服務 - >調用Mongodb

+0

好的,但是,我想知道在我的應用程序中發生錯誤的原因是什麼?如果我導入jar文件至少應用程序應該編譯ri8?這裏的錯誤甚至在應用程序運行之前就已經發生,所以我guz,我下載的java-mongo-driver不支持android? – Mukund

+1

嗯,我認爲你是對的,即MongoDb驅動程序現在支持android,但我不知道如果這是一個好主意。看看這些鏈接。 http://stackoverflow.com/questions/17913641/connecting-to-a-mongodb-with-android-in-eclipse http://stackoverflow.com/questions/11433091/how-connect-mongo-db-with-android -application –

+1

當你把MongoDb導入像import com.mongodb.DBCollection;你在這些進口中看到錯誤嗎? –