Android 开发-MongoDB connection error


IOT项目APP开发,需要连接Android Stutio 和 Mongo DB。

单独创建了一个MongoDB_test project 进行测试。在数据库连接上出现了几个Bug。

1.Operation not permitted


<uses-permissionandroid:name="android.permission.INTERNET"/>

 

2.mongoDB 的config文件修改


bind_IP需要修改,以及是否允许外网连接DB。默认的port等等。

 

3.mongoDB JDBC 连接测试(参阅)


MongoDBDao

package com.example.cubigrov.Mongo;

import java.util.ArrayList;
import java.util.List;


import com.example.cubigrov.Mongo.MongoDBUtil;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;


public class MongoDBDao {
    private static MongoDBUtil mongoDb;
    // Init. MongoDBUtil.
    static{
        try {
            mongoDb = new MongoDBUtil("test");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Test Create a blanket collection.
     * @param collName :collection name.
     */
    public void createCollectionTest(String collName)
    {
        mongoDb.createCollection(collName);
    }

    /**
     * Test Insert dbObject into collection.
     * @param collName Collection Name.
     */
    public void insertTest(String collName)
    {
        DBObject dbs = new BasicDBObject();
        dbs.put("name", "gymyung");
        dbs.put("age", 20);
        List<String> books = new ArrayList<String>();
        books.add("EXTJS");
        books.add("MONGDB");
        books.add("JAVA");
        dbs.put("books", books);
        mongoDb.insert(dbs, collName);
    }

    /**
     * Test Insert dbObject list into collection.
     * @param collName Collection Name.
     */
    public void insertBatchTest(String collName)
    {
        List<DBObject> dbObjects = new ArrayList<DBObject>();
        DBObject jim2 = new BasicDBObject("name", "jim2");
        DBObject liuting = new BasicDBObject();
        liuting.put("name", "liuting");
        liuting.put("age", "22");

        dbObjects.add(jim2);
        dbObjects.add(liuting);

        mongoDb.insertBatch(dbObjects, collName);
    }

    /**
     * Test Delete data By Id.
     * @param collName Collection Name.
     * @return Operate Result Code.
     */
    public int deleteByIdTest(String collName)
    {
        int counts = mongoDb.deleteById("54507d19cbbd7a385c129ef5", collName);
        return counts;
    }

    /**
     * Test Delete data By Condition.
     * @param collName Collection Name.
     * @return Operate Result Code.
     */
    public int deleteByDbsTest(String collName)
    {
        DBObject jim2 = new BasicDBObject("name", "jim2");
        int count = mongoDb.deleteByDbs(jim2, collName);
        return count;
    }

    /**
     * Test Update Data.
     * @param collName Collection Name.
     * @return Operate Result Code.
     */
    public int updateTest(String collName)
    {
        DBObject liuting = new BasicDBObject();
        DBObject liuting2 = new BasicDBObject();
        liuting2.put("$set", new BasicDBObject("gender", "female"));

        int count = mongoDb.update(liuting, liuting2, false, true, collName);
        return count;
    }

    /**
     * Test Find Data With Page.
     * @param collName Collection Name.
     * @return String List Result.
     */
    public List<String> findWithPageTest(String collName)
    {
        DBCursor cursor = mongoDb.findWithPage(null, null, 0, 3, collName);
        return convertCursorToList(cursor);
    }

    /**
     * Test Find Data With Condition.
     * @param collName Collection Name.
     * @return String List Result.
     */
    public List<String> findWithConditionTest(String collName)
    {
        DBObject where = new BasicDBObject();
        where.put("age", new BasicDBObject("$lte", 26));
        where.put("gender", "female");

        DBCursor cursor = mongoDb.findNoPage(where, null,collName);
        return convertCursorToList(cursor);
    }


    /**
     * Test Find Data No Page.
     * @param collName Collection Name.
     * @return String List Result.
     */
    public List<String> findNoPageTest(String collName)
    {
        DBObject keys = new BasicDBObject();
        keys.put("_id", false);
        keys.put("name", true);
        keys.put("age", true);

        DBCursor cursor = mongoDb.findNoPage(null, keys, collName);

        return convertCursorToList(cursor);
    }

    /**
     * Convert Cursor To List.
     * @param cursor Required DBCursor.
     * @return String List Result.
     */
    private List<String> convertCursorToList(DBCursor cursor)
    {
        List<String> results = new ArrayList<String>();
        while(cursor.hasNext())
        {
            DBObject dbObject = cursor.next();

            for(String key : dbObject.keySet())
            {
                results.add("{"+key+":"+dbObject.get(key)+"}");
            }
        }

        return results;
    }
}

MongoDBUtil

package com.example.cubigrov.Mongo;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;

import org.bson.types.ObjectId;

import java.util.List;


public class MongoDBUtil {
    static Mongo connection = null;
    static DB db = null;
    public MongoDBUtil(String dbName) throws Exception
    {
        connection = new Mongo("192.168.1.1:27017");
        db = connection.getDB(dbName);
    }
    public static Mongo getConnection() {
        return connection;
    }


    /**
     * Create a blanket collection.
     * @param collName :collection name.
     */
    public void createCollection(String collName)
    {
        DBObject dbs = new BasicDBObject();
        dbs.put("test", "test");
        db.createCollection(collName, dbs);
    }

    /**
     * Insert dbObject into collection.
     * @param dbObject
     * @param collName
     */
    public void insert(DBObject dbObject,String collName)
    {
        DBCollection collection = db.getCollection(collName);
        collection.insert(dbObject);
    }

    /**
     * Insert dbObject list into collection.
     * @param dbObjects
     * @param collName
     */
    public void insertBatch(List<DBObject> dbObjects,String collName)
    {
        DBCollection collection = db.getCollection(collName);
        collection.insert(dbObjects);
    }

    /**
     * Delete data By Id.
     * @param id
     * @param collName
     * @return
     */
    public int deleteById(String id,String collName)
    {
        DBCollection collection = db.getCollection(collName);
        DBObject dbs = new BasicDBObject("_id", new ObjectId(id));
        int counts = collection.remove(dbs).getN();
        return counts;
    }

    /**
     * Delete data By Condition.
     * @param dbObject
     * @param collName
     * @return
     */
    public int deleteByDbs(DBObject dbObject,String collName)
    {
        DBCollection collection = db.getCollection(collName);
        int count = collection.remove(dbObject).getN();
        return count;
    }

    /**
     * Update Data.
     * @param find
     * @param update
     * @param upsert
     * @param multi
     * @param collName
     * @return
     */
    public int update(DBObject find,DBObject update,boolean upsert,boolean multi,String collName)
    {
        DBCollection collection = db.getCollection(collName);
        int count = collection.update(find, update, upsert, multi).getN();
        return count;
    }


    public DBCursor findWithPage(DBObject where,DBObject selection,int start,int limit,String collName)
    {
        DBCursor cursor = findNoPage(where, selection, collName);
        return cursor.limit(limit).skip(start);
    }


    public DBCursor findNoPage(DBObject where,DBObject selection,String collName)
    {
        DBCollection collection = db.getCollection(collName);
        DBCursor cursor = collection.find(where, selection);
        return cursor;
    }
}

mongoDBTest

package com.example.cubigrov;


import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

import com.example.cubigrov.R;
import com.example.cubigrov.Mongo.MongoDBDao;
import com.example.cubigrov.Mongo.MongoDBUtil;

public class mongoDBTest extends Activity implements OnClickListener{
    /************** Component in Layout. ***************/
    private Button mongoTestBtn1;
    private Button mongoTestBtn2;
    private Button mongoTestBtn3;
    private Button mongoTestBtn4;
    private Button mongoTestBtn5;
    private Button mongoTestBtn6;
    private Button mongoTestBtn7;
    private Button mongoTestBtn8;
    // The Object use to MongoDB Operate.
    private MongoDBDao mongoDbDao;
    // The Collection Name in MongoDB.
    private String collName = "androidDB";

    /************** Operate Code ********************/
    private final int CREATE_COLLECTION_TEST = 100;
    private final int INSERT_TEST = 101;
    private final int INSERT_BATCH_TEST = 102;
    private final int DELETE_BY_ID_TEST = 103;
    private final int DELETE_BY_DBS_TEST = 104;
    private final int UPDATE_TEST = 105;
    private final int FIND_WITH_PAGE_TEST = 106;
    private final int FIND_NOPAGE_TEST = 107;

    private ImageView mBackImageView;

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

        findViewAndSetListener();



        mongoDbDao = new MongoDBDao();
    }

    private void findViewAndSetListener() {

        mBackImageView = findViewById(R.id.mongo_back);

        mongoTestBtn1 = (Button) findViewById(R.id.mongodb_btn1);
        mongoTestBtn2 = (Button) findViewById(R.id.mongodb_btn2);
        mongoTestBtn3 = (Button) findViewById(R.id.mongodb_btn3);
        mongoTestBtn4 = (Button) findViewById(R.id.mongodb_btn4);
        mongoTestBtn5 = (Button) findViewById(R.id.mongodb_btn5);
        mongoTestBtn6 = (Button) findViewById(R.id.mongodb_btn6);
        mongoTestBtn7 = (Button) findViewById(R.id.mongodb_btn7);
        mongoTestBtn8 = (Button) findViewById(R.id.mongodb_btn8);

        mongoTestBtn1.setOnClickListener(this);
        mongoTestBtn2.setOnClickListener(this);
        mongoTestBtn3.setOnClickListener(this);
        mongoTestBtn4.setOnClickListener(this);
        mongoTestBtn5.setOnClickListener(this);
        mongoTestBtn6.setOnClickListener(this);
        mongoTestBtn7.setOnClickListener(this);
        mongoTestBtn8.setOnClickListener(this);

        mBackImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }


    @Override
    public void onClick(View v) {


        MyAsyncTast myAsyncTast = new MyAsyncTast();
        switch(v.getId()){
            case R.id.mongodb_btn1:
                myAsyncTast.execute(CREATE_COLLECTION_TEST);
                break;
            case R.id.mongodb_btn2:
                myAsyncTast.execute(INSERT_TEST);
                break;
            case R.id.mongodb_btn3:
                myAsyncTast.execute(INSERT_BATCH_TEST);
                break;
            case R.id.mongodb_btn4:
                myAsyncTast.execute(DELETE_BY_ID_TEST);
                break;
            case R.id.mongodb_btn5:
                myAsyncTast.execute(DELETE_BY_DBS_TEST);
                break;
            case R.id.mongodb_btn6:
                myAsyncTast.execute(UPDATE_TEST);
                break;
            case R.id.mongodb_btn7:
                myAsyncTast.execute(FIND_WITH_PAGE_TEST);
                break;
            case R.id.mongodb_btn8:
                myAsyncTast.execute(FIND_NOPAGE_TEST);
                break;
        }
    }



    class MyAsyncTast extends AsyncTask<Object, Object, Object>{

        @Override
        protected Object doInBackground(Object... params) {
            Object result = null;
            switch(Integer.parseInt(params[0].toString()))
            {
                case CREATE_COLLECTION_TEST:
                    mongoDbDao.createCollectionTest(collName);
                    break;
                case INSERT_TEST:
                    mongoDbDao.insertTest(collName);
                    break;
                case INSERT_BATCH_TEST:
                    mongoDbDao.insertBatchTest(collName);
                    break;
                case DELETE_BY_ID_TEST:
                    result = mongoDbDao.deleteByIdTest(collName);
                    break;
                case DELETE_BY_DBS_TEST:
                    result = mongoDbDao.deleteByDbsTest(collName);
                    break;
                case UPDATE_TEST:
                    result = mongoDbDao.updateTest(collName);
                    break;
                case FIND_WITH_PAGE_TEST:
                    result = mongoDbDao.findWithPageTest(collName);
                    break;
                case FIND_NOPAGE_TEST:
                    result = mongoDbDao.findNoPageTest(collName);
                    break;
            }
            return result;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void onPostExecute(Object result) {
            if(result instanceof Integer)
            {
                showDialogWithText("操作结果码:"+result.toString());
            }else if(result instanceof List)
            {
                String resText = "";
                for(String res : ((List<String>) result))
                {
                    resText += res + "\n";
                }
                showDialogWithText("操作结果\n:"+resText);
            }

            super.onPostExecute(result);
        }
    }


    private void showDialogWithText(String text)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.icon);
        builder.setTitle("MongoDB操作结果");
        builder.setMessage(text);
        builder.setNeutralButton("确定", new DialogInterface.OnClickListener()
        {

            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                dialog.dismiss();
            }
        });

        builder.create().show();
    }


    @Override
    protected void onDestroy() {
        // Close MongoDB Connection If It is Not Null.
        if(MongoDBUtil.getConnection() != null)
        {
            MongoDBUtil.getConnection().close();
        }
        super.onDestroy();
    }
}

mongodb_test 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:fitsSystemWindows="true"
    android:background="@color/white_background"
    tools:context=".mongoDBTest">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="72dp"
        android:layout_alignParentTop="true"
        android:background="#8000FF">

        <ImageView
            android:id="@+id/mongo_back"
            android:layout_width="40dp"
            android:layout_height="match_parent"
            android:padding="8dp"
            android:src="@drawable/ic_left"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:textColor="#FFFFFF"
            android:textSize="16sp"
            android:text=""/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:textColor="#FFFFFF"
            android:textSize="40sp"
            android:text="Mongo Test"/>

    </RelativeLayout>

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <Button
                android:id="@+id/mongodb_btn1"
                android:layout_width="250dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="55dp"
                android:text="button1" />


            <Button
                android:id="@+id/mongodb_btn2"
                android:layout_width="250dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:text="button2" />

            <Button
                android:id="@+id/mongodb_btn3"
                android:layout_width="250dp"
                android:layout_height="wrap_content"
                android:text="button3"
                android:layout_gravity="center_horizontal"
                />

            <Button
                android:id="@+id/mongodb_btn4"
                android:layout_width="250dp"
                android:layout_height="wrap_content"
                android:text="button4"
                android:layout_gravity="center_horizontal" />

            <Button
                android:id="@+id/mongodb_btn5"
                android:layout_width="250dp"
                android:layout_height="wrap_content"
                android:text="button4"
                android:layout_gravity="center_horizontal"
                />

            <Button
                android:id="@+id/mongodb_btn6"
                android:layout_width="250dp"
                android:layout_height="wrap_content"
                android:text="button4"
                android:layout_gravity="center_horizontal" />

            <Button
                android:id="@+id/mongodb_btn7"
                android:layout_width="250dp"
                android:layout_height="wrap_content"
                android:text="button4"
                android:layout_gravity="center_horizontal" />

            <Button
                android:id="@+id/mongodb_btn8"
                android:layout_width="250dp"
                android:layout_height="wrap_content"
                android:text="button4"
                android:layout_gravity="center_horizontal" />



        </LinearLayout>
    </androidx.core.widget.NestedScrollView>
</LinearLayout>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值