Android Studio:使用Mongo Java Driver连接到MongoDB服务器 [英] Android Studio: connecting to MongoDB server with Mongo Java Driver

查看:1598
本文介绍了Android Studio:使用Mongo Java Driver连接到MongoDB服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有很多关于这个问题的帖子,但似乎没有人工作,所以maby有些事情发生了变化。

There's a lot of posts about this problem, but noone seems to work, so maby some things have changed.

我正在尝试将我的Android应用程序连接到MongoDB服务器位于mLab上。我正在使用Mongo Java Drived并且当然已将库添加到android studio。

I am trying to connect my android application to a MongoDB server located on mLab. I'm using Mongo Java Drived and have off course added the library to android studio.

可以启动应用程序,但是当我点击注册按钮时应用程序包。

It is possible to start the app, but when I click on the register button the application craches.

这是我的代码:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MainActivity extends AppCompatActivity {

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

    final EditText username = (EditText)findViewById(R.id.username);
    final Button bRegister = (Button) findViewById(R.id.bRegister);

    bRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String stringUsername = username.toString();
            try {
                addToDatabase(stringUsername);
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    });
}

private static void addToDatabase(String username){
    MongoClientURI uri  = new MongoClientURI("mongodb:///*mLab database URL */");
    MongoClient client = new MongoClient(uri);
    MongoDatabase db = client.getDatabase(uri.getDatabase());
    MongoCollection<Document> coll = db.getCollection("newDB");

    Document doc = new Document("username", username);
    coll.insertOne(doc);
    client.close();
}
}

我在清单文件中也有permision.INTERNET。

I also have permision.INTERNET in the manifest file.

非常感谢任何帮助!

//编辑
Stacktrace: 03/10 02:43:09:启动app
冷交换更改。
$ adb shell am start -ncom.newhdc.pedergb.mongodb_servertester / com.newhdc.pedergb.mongodb_servertester.MainActivity-a android.intent.action.MAIN -c android.intent.category.LAUNCHER
客户尚未准备就绪..等待流程上线
连接到设备模拟器上的流程4752 -5554
D / NetworkSecurityConfig:未指定Network Security配置,使用平台默认
W / org.bson.ObjectId:无法从JMX获取进程标识符,而是使用随机数而不是
java.lang.NoClassDefFoundError:解析失败:Ljava / lang / management / ManagementFactory;
at org.bson.types.ObjectId.createProcessIdentifier(ObjectId.java:533)
at org.bson.types.ObjectId。< clinit>(ObjectId.java:491)
at com.mongodb.connection.ClusterId。< init>(ClusterId.java:47)
at com.mongodb.connection.DefaultClusterFactory.create(DefaultClusterFactory.java:105)
at com.mongodb.Mongo .createCluster(Mongo.java:744)
at com.mongodb.Mongo.createCluster(Mongo.java:728)
at com.mongodb.Mongo.createCluster(Mongo.java:702)
在com.mongodb.Mongo。< init>(Mongo.java:310)
at com.mongodb.Mongo。< init>(Mongo.java:306)
at com.mongodb。 MongoClient。< init>(MongoClient.java:284)
at com.newhdc.pedergb.mongodb_servertester.MainActivity.addToDatabase (MainActivity.java:39)
at com.newhdc.pedergb.mongodb_servertester.MainActivity.access $ 000(MainActivity.java:14)
at com.newhdc.pedergb.mongodb_servertester.MainActivity $ 1.onClick(MainActivity .java:29)
在android.view.View.performClick(View.java:5637)
在android.view.View $ PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
在android.os.Handler.dispatchMessage(Handler.java:95)
在android.os.Looper.loop(Looper.java: 154)
在android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal。 os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)com.android.int上的
ernal.os.ZygoteInit.main(ZygoteInit.java:776)
引起:java.lang.ClassNotFoundException:在路径上找不到类java.lang.management.ManagementFactory:DexPathList [[dex file /data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-support-annotations-25.1.0_11ac1b6ae4b8623fca16868c12f685674e962f99-classes.dex,dex file/data/data/com.newhdc.pedergb。 mongodb_servertester / files / instant-run / dex / slice-slice_9-classes.dex,dex file/data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-slice_8-classes.dex ,dex文件/data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-slice_7-classes.dex,dex文件/data/data/com.newhdc.pedergb.mongodb_servertester /files/instant-run/dex/slice-slice_6-classes.dex,dex file/data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-slice_5-classes.dex ,dex文件/data/data/com.newhdc.pedergb.mongodb_servertester/files/instan t-run / dex / slice-slice_4-classes.dex,dex文件/data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-slice_3-classes.dex,dex文件/data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-slice_2-classes.dex,dex file/data/data/com.newhdc.pedergb.mongodb_servertester/files/instant -run / dex / slice-slice_1-classes.dex,dex file/data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-slice_0-classes.dex,dex file /data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-mongodb-driver-core-3.4.2_cf1ecbf321a58b8bf97e118b2c0ff7614ac982a5-classes.dex,dex file/data/data/com.newhdc。 pedergb.mongodb_servertester / files / instant-run / dex / slice-mongodb-driver-3.4.2_cfefe7ed281d321e57736b38e1e68fc6160680ac-classes.dex,dex file/data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex /slice-com.android.support-support-vector-drawable-25.1.0_3dbe341ffa762dac2cc1137bc6aae1731f3bc1c0-cl asses.dex,dex file/data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-com.android.support-support-v4-25.1.0_c534a46cb17b55c593319a94e0d90e0b75103a24-classes.dex, dex文件/data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-com.android.support-support-media-compat-25.1.0_b58e3876df91b49420cb0766dd6edfdbff0dedbc-classes.dex,dex file /data/data/com.newhdc.pedergb.mongodb_servertester/files/instant-run/dex/slice-com.android.support-support-fragment-25.1.0_d616629f11d994c207dfc4b5d01648e3194bccbc-classes.dex,dex f
I / cluster:使用设置创建的集群{hosts = [ds123080.mlab.com:23080],mode = SINGLE,requiredClusterType = UNKNOWN,serverSelectionTimeout ='30000 ms',maxWaitQueueSize = 500}
D / AndroidRuntime:关闭VM
E / AndroidRuntime:** FATAL EXCEPTION **:main
流程:com.newhdc.pedergb.mongodb_servertester,PID:4752
java.lang.ExceptionInInitializerError
在com.mongodb.connection.InternalStreamConnectionFactory。< init>(InternalStreamConnectionFactory.java:41)
at com.mongodb.connection.DefaultClusterableServerFactory.create(DefaultClusterableServerFactory.java:68)
at com.mongodb。 connection.BaseCluster.createServer(BaseCluster.java:360)
at com.mongodb.connection.SingleServerCluster。< init>(SingleServerCluster.java:54)
at com.mongodb.connection.DefaultClusterFactory.create (DefaultClusterFactory.java:114)
at com.mongodb.Mongo.createCluster(Mongo.java:744)
at com.mongodb.Mongo.createCluster(Mongo.java:728)
at com.mongodb.Mongo.createCluster(Mongo.java:702)
at com.mongodb.Mongo。< init>(Mongo.java:310)
at com.mongodb.Mongo。< init> ;(Mongo.java:306)
在com.mongodb.MongoClient。< init>(MongoClient.java:284)
at com.newhdc.pedergb.mongodb_servertester.MainActivity.addToDatabase(MainActivity.java:39)
at com.newhdc。 pedergb.mongodb_servertester.MainActivity.access $ 000(MainActivity.java:14)
at com.newhdc.pedergb.mongodb_servertester.MainActivity $ 1.onClick(MainActivity.java:29)
at android.view.View。 performClick(View.java:5637)
在android.view.View $ PerformClick.run(View.java:22429)
在android.os.Handler.handleCallback(Handler.java:751)
在android.os.Handler.dispatchMessage(Handler.java:95)
在android.os.Looper.loop(Looper.java:154)
在android.app.ActivityThread.main(ActivityThread .java:6119)
at java.lang.reflect.Method.invoke(Native Method)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
由... :java.lang.NullPointerException:尝试在com.mongodb.connection.ClientMetadataHelper.getDriverVersion(ClientMetadataHelper)上的空对象引用
上调用虚方法'java.security.CodeSource java.security.ProtectionDomain.getCodeSource()'。 java:111)
at com.mongodb.connection.ClientMetadataHelper.getDriverInformation(ClientMetadataHelper.java:201)
at com.mongodb.connection.ClientMetadataHelper.addDriverInformation(ClientMetadataHelper.java:182)
at com.mongodb.connection.ClientMetadataHelper。< clinit>(ClientMetadataHelper.java:64)
at com.mongodb.connection.InternalStreamConnectionFactory。< init>(InternalStreamConnect) ionFactory.java:41)
at com.mongodb.connection.DefaultClusterableServerFactory.create(DefaultClusterableServerFactory.java:68)
at com.mongodb.connection.BaseCluster.createServer(BaseCluster.java:360)
at com.mongodb.connection.SingleServerCluster。< init>(SingleServerCluster.java:54)
at com.mongodb.connection.DefaultClusterFactory.create(DefaultClusterFactory.java:114)
at com。 mongodb.Mongo.createCluster(Mongo.java:744)
at com.mongodb.Mongo.createCluster(Mongo.java:728)
at com.mongodb.Mongo.createCluster(Mongo.java:702)
at com.mongodb.Mongo。< init>(Mongo.java:310)
at com.mongodb.Mongo。< init>(Mongo.java:306)
at com .mongodb.MongoClient。< init>(MongoClient.java:284)
at com.newhdc.pedergb.mongodb_servertester.MainActivity.addToDatabase(MainActivity.java:39)
at com.newhdc.pedergb.mongodb_servertester.MainActivity.access $ 000(MainActivity.java:14)
at com。 newhdc.pedergb.mongodb_servertester.MainActivity $ 1.onClick(MainActivity.java:29)
在android.view.View.performClick(View.java:5637)
在android.view.View $ PerformClick.run (View.java:22429)
在android.os.Handler.handleCallback(Handler.java:751)
在android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
在android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method )com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(Zy)
goteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
申请已终止。

推荐答案

我遇到了同样的问题。
确实问题是你在主线程中调用连接。
将以下内容添加到onCreate方法。

I had the same issue. Indeed problem is that you call the connection in the main thread. add the following to the onCreate method.

@Override
    protected void onCreate(Bundle savedInstanceState) {
 if (android.os.Build.VERSION.SDK_INT > 9)
        {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }

希望有所帮助。

这篇关于Android Studio:使用Mongo Java Driver连接到MongoDB服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆