2015-05-11 163 views
1

我想设置一个Android应用程序内的MongoDB的直接连接,但我不明白为什么我得到这个错误:java.net.SocketException:套接字失败:EACCES(权限被拒绝)MongoDB连接

Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)

我的代码: 数据库连接()

import com.mongodb.DB; 
import com.mongodb.MongoClient; 
import com.mongodb.MongoCredential; 
import com.mongodb.ServerAddress; 

import java.util.Arrays; 

public class DBConnect { 

    public static DB MongoConnect(){ 

     MongoCredential credential = MongoCredential.createCredential("user", "database", "password".toCharArray()); 
     MongoClient mongoClient = new MongoClient(new ServerAddress(), Arrays.asList(credential)); 


     //MongoClient mongoClient = null; 
     try { 
      mongoClient = new MongoClient("xxx.xxx.xxx.xxx", 27017); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     DB database = mongoClient.getDB("RotterdamHaven"); 

     return database; 
    } 

} 

DBCollections()

import com.mongodb.DB; 
import com.mongodb.DBCollection; 


public class DBCollections { 

    public static DBCollection connectToMongoCollection(String collectionName){ 
     DB database = DBConnect.MongoConnect(); 
     DBCollection mongoCollection = database.getCollection(collectionName); 

     return mongoCollection; 
    } 

} 

我的清单文件:

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
</application> 

MainActivity文件

package com.example.bebo.connection; 

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 


public class MainActivity extends ActionBarActivity { 

    DBCollection collection = DBCollections.connectToMongoCollection("BolderBedrijfsnaam"); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

我加入了蒙戈的Java驱动程序 - 3.0.0.jar文件到这个项目。 请帮忙。我只需要一个简单的连接。

编辑1: 我改变了清单文件,并把权限放在外面。我得到另一个错误:

Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 27017) after 20000ms: isConnected failed: ECONNREFUSED (Connection refused) 

05-11 22:50:45.493 3465-3484/com.example.bebo.connection W/EGL_emulation﹕ eglSurfaceAttrib not implemented 
05-11 22:50:45.493 3465-3484/com.example.bebo.connection W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa6ccf760, error=EGL_SUCCESS 
05-11 22:51:05.216 3465-3482/com.example.bebo.connection I/cluster﹕ Exception in monitor thread while connecting to server 145.24.222.221:27017 
    com.mongodb.MongoSocketOpenException: Exception opening socket 
Caused by: java.net.SocketTimeoutException: failed to connect to /145.24.222.221 (port 27017) after 20000ms 

编辑2:

05-12 09:44:33.434 24339-24339/? V/Zygote﹕ Switching descriptor 32 to /dev/null 
05-12 09:44:33.434 24339-24339/? V/Zygote﹕ Switching descriptor 9 to /dev/null 
05-12 09:44:33.439 24339-24339/com.example.bebo.connection D/dalvikvm﹕ Late-enabling CheckJNI 
05-12 09:44:33.479 24339-24339/com.example.bebo.connection D/ActivityThread﹕ handleBindApplication:com.example.bebo.connection 
05-12 09:44:33.479 24339-24339/com.example.bebo.connection D/ActivityThread﹕ setTargetHeapUtilization:0.75 
05-12 09:44:33.479 24339-24339/com.example.bebo.connection D/ActivityThread﹕ setTargetHeapMinFree:2097152 
05-12 09:44:33.524 24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method javax.management.ObjectName.quote, referenced from method com.mongodb.management.JMXConnectionPoolListener.ensureValidValue 
05-12 09:44:33.524 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve static method 19259: Ljavax/management/ObjectName;.quote (Ljava/lang/String;)Ljava/lang/String; 
05-12 09:44:33.524 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0006 
05-12 09:44:33.524 24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method java.lang.management.ManagementFactory.getRuntimeMXBean, referenced from method org.bson.types.ObjectId.createProcessIdentifier 
05-12 09:44:33.524 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve static method 18843: Ljava/lang/management/ManagementFactory;.getRuntimeMXBean()Ljava/lang/management/RuntimeMXBean; 
05-12 09:44:33.524 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0000 
05-12 09:44:33.549 24339-24339/com.example.bebo.connection W/org.bson.ObjectId﹕ Failed to get process identifier from JMX, using random number instead 
    java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory 
      at org.bson.types.ObjectId.createProcessIdentifier(ObjectId.java:510) 
      at org.bson.types.ObjectId.<clinit>(ObjectId.java:468) 
      at com.mongodb.connection.ClusterId.<init>(ClusterId.java:47) 
      at com.mongodb.connection.DefaultClusterFactory.create(DefaultClusterFactory.java:40) 
      at com.mongodb.Mongo.createCluster(Mongo.java:658) 
      at com.mongodb.Mongo.createCluster(Mongo.java:644) 
      at com.mongodb.Mongo.<init>(Mongo.java:275) 
      at com.mongodb.MongoClient.<init>(MongoClient.java:184) 
      at com.mongodb.MongoClient.<init>(MongoClient.java:160) 
      at com.example.bebo.connection.DBConnect.MongoConnect(DBConnect.java:19) 
      at com.example.bebo.connection.DBCollections.connectToMongoCollection(DBCollections.java:14) 
      at com.example.bebo.connection.MainActivity.<init>(MainActivity.java:13) 
      at java.lang.Class.newInstanceImpl(Native Method) 
      at java.lang.Class.newInstance(Class.java:1208) 
      at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2122) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271) 
      at android.app.ActivityThread.access$800(ActivityThread.java:144) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5146) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 
      at dalvik.system.NativeStart.main(Native Method) 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection I/cluster﹕ Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method java.lang.management.ManagementFactory.getPlatformMBeanServer, referenced from method com.mongodb.internal.management.jmx.JMXMBeanServer.<init> 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve static method 18842: Ljava/lang/management/ManagementFactory;.getPlatformMBeanServer()Ljavax/management/MBeanServer; 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0003 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection E/dalvikvm﹕ Could not find class 'javax.management.ObjectName', referenced from method com.mongodb.internal.management.jmx.JMXMBeanServer.registerMBean 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve new-instance 2540 (Ljavax/management/ObjectName;) in Lcom/mongodb/internal/management/jmx/JMXMBeanServer; 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0002 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection E/dalvikvm﹕ Could not find class 'javax.management.ObjectName', referenced from method com.mongodb.internal.management.jmx.JMXMBeanServer.unregisterMBean 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve new-instance 2540 (Ljavax/management/ObjectName;) in Lcom/mongodb/internal/management/jmx/JMXMBeanServer; 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0000 
05-12 09:44:33.554 24339-24339/com.example.bebo.connection D/dalvikvm﹕ DexOpt: unable to opt direct call 0x4b3a at 0x04 in Lcom/mongodb/internal/management/jmx/JMXMBeanServer;.registerMBean 
05-12 09:44:33.559 24339-24339/com.example.bebo.connection D/dalvikvm﹕ DexOpt: unable to opt direct call 0x4b3a at 0x02 in Lcom/mongodb/internal/management/jmx/JMXMBeanServer;.unregisterMBean 
05-12 09:44:33.564 24339-24339/com.example.bebo.connection I/cluster﹕ Cluster created with settings {hosts=[145.24.222.221:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 
05-12 09:44:33.564 24339-24352/com.example.bebo.connection I/cluster﹕ Exception in monitor thread while connecting to server 127.0.0.1:27017 
    com.mongodb.MongoSocketOpenException: Exception opening socket 
      at com.mongodb.connection.SocketStream.open(SocketStream.java:63) 
      at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) 
      at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127) 
      at java.lang.Thread.run(Thread.java:841) 
    Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 27017) after 20000ms: isConnected failed: ECONNREFUSED (Connection refused) 
      at libcore.io.IoBridge.isConnected(IoBridge.java:223) 
      at libcore.io.IoBridge.connectErrno(IoBridge.java:161) 
      at libcore.io.IoBridge.connect(IoBridge.java:112) 
      at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
      at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460) 
      at java.net.Socket.connect(Socket.java:833) 
      at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) 
      at com.mongodb.connection.SocketStream.open(SocketStream.java:58) 
            at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) 
            at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127) 
            at java.lang.Thread.run(Thread.java:841) 
    Caused by: libcore.io.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused) 
      at libcore.io.IoBridge.isConnected(IoBridge.java:208) 
            at libcore.io.IoBridge.connectErrno(IoBridge.java:161) 
            at libcore.io.IoBridge.connect(IoBridge.java:112) 
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460) 
            at java.net.Socket.connect(Socket.java:833) 
            at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) 
            at com.mongodb.connection.SocketStream.open(SocketStream.java:58) 
            at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) 
            at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127) 
            at java.lang.Thread.run(Thread.java:841) 
05-12 09:44:33.589 24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.view.ViewGroup.onNestedScrollAccepted, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onNestedScrollAccepted 
05-12 09:44:33.589 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 12208: Landroid/view/ViewGroup;.onNestedScrollAccepted (Landroid/view/View;Landroid/view/View;I)V 
05-12 09:44:33.589 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000 
05-12 09:44:33.589 24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.view.ViewGroup.onStopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onStopNestedScroll 
05-12 09:44:33.589 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 12214: Landroid/view/ViewGroup;.onStopNestedScroll (Landroid/view/View;)V 
05-12 09:44:33.589 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000 
05-12 09:44:33.594 24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.support.v7.internal.widget.ActionBarOverlayLayout.stopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.setHideOnContentScrollEnabled 
05-12 09:44:33.594 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 9779: Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll()V 
05-12 09:44:33.594 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x000e 
05-12 09:44:33.599 24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations 
05-12 09:44:33.599 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 392: Landroid/content/res/TypedArray;.getChangingConfigurations()I 
05-12 09:44:33.599 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
05-12 09:44:33.599 24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType 
05-12 09:44:33.599 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 414: Landroid/content/res/TypedArray;.getType (I)I 
05-12 09:44:33.599 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
05-12 09:44:33.599 24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.content.res.Resources.getDrawable, referenced from method android.support.v7.internal.widget.ResourcesWrapper.getDrawable 
05-12 09:44:33.604 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 355: Landroid/content/res/Resources;.getDrawable (ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; 
05-12 09:44:33.604 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
05-12 09:44:33.604 24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.content.res.Resources.getDrawableForDensity, referenced from method android.support.v7.internal.widget.ResourcesWrapper.getDrawableForDensity 
05-12 09:44:33.604 24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 357: Landroid/content/res/Resources;.getDrawableForDensity (IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; 
05-12 09:44:33.604 24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
05-12 09:44:33.664 24339-24339/com.example.bebo.connection D/libEGL﹕ loaded /system/lib/egl/libEGL_mali.so 
05-12 09:44:33.664 24339-24339/com.example.bebo.connection D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_mali.so 
05-12 09:44:33.669 24339-24339/com.example.bebo.connection D/libEGL﹕ loaded /system/lib/egl/libGLESv2_mali.so 
05-12 09:44:33.679 24339-24339/com.example.bebo.connection E/﹕ Device driver API match 
    Device driver API version: 23 
    User space API version: 23 
05-12 09:44:33.679 24339-24339/com.example.bebo.connection E/﹕ mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Fri Mar 21 13:52:50 KST 2014 
05-12 09:44:33.749 24339-24339/com.example.bebo.connection D/OpenGLRenderer﹕ Enabling debug mode 0 
05-12 09:44:33.869 24339-24339/com.example.bebo.connection I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:61772438 
05-12 09:44:53.574 24339-24354/com.example.bebo.connection I/cluster﹕ Exception in monitor thread while connecting to server 145.24.222.221:27017 
    com.mongodb.MongoSocketOpenException: Exception opening socket 
      at com.mongodb.connection.SocketStream.open(SocketStream.java:63) 
      at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) 
      at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127) 
      at java.lang.Thread.run(Thread.java:841) 
    Caused by: java.net.SocketTimeoutException: failed to connect to /145.24.222.221 (port 27017) after 20000ms 
      at libcore.io.IoBridge.connectErrno(IoBridge.java:159) 
      at libcore.io.IoBridge.connect(IoBridge.java:112) 
      at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
      at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460) 
      at java.net.Socket.connect(Socket.java:833) 
      at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) 
      at com.mongodb.connection.SocketStream.open(SocketStream.java:58) 
            at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) 
            at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127) 
            at java.lang.Thread.run(Thread.java:841) 
+2

你不能得到'ECONNREFUSED'和'SocketTimeoutException'在同一个连接尝试。这里究竟发生了什么? – EJP

+0

我已编辑我的帖子。这是我得到的整个logcat。我还添加了我的主要活动文件。请继续 – Bolino

回答

1
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

把它外面从<application></application>

+0

感谢您的回答。我根据你的回答编辑了我的帖子。请继续。 – Bolino

+1

@ Babycakes247,android中的所有网络连接应该由新线程(而不是UIThread)或从AsyncTask创建。 – Ufkoku

+0

我该如何解决这个问题?你有我的教程/链接/示例代码吗?没有那个经历过Asynctask。请继续。 – Bolino

相关问题