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>