我正在尝试在Android应用程序中设置与MongoDB的直接连接,但我无法弄清楚为什么会出现此错误:
Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
我的代码: DBCONNECT()
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);
}
}
我在这个项目中添加了mongo-java-driver-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: android.os.BinderProxy@41caee28 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)
答案 0 :(得分:2)
<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>