Eclipse + Android SDK + MongoDB 2.6.6 + mongo-java-driver 2.13.0-rc2。
代碼中使用 `new Mongo("localhost")` 等構造函數,編碼提示 **Deprecated (棄用)**,模擬器運行報錯。
Driver 3.0 (2018 年發布) 完全重寫 API,舊 `Mongo`、`DB`、`DBCollection` 類被標記 `@Deprecated`,新 API 為:
| 舊 API (Deprecated) | 新 API (3.0+) |
|---|---|
| `new Mongo()` / `new Mongo(host)` | `MongoClients.create("mongodb://host:port")` |
| `mongo.getDB("name")` | `client.getDatabase("name")` |
| `db.getCollection("name")` | `database.getCollection("name")` |
| `DBObject` / `BasicDBObject` | `Document` (org.bson.Document) |
| `WriteConcern.SAFE` | `WriteConcern.ACKNOWLEDGED` |
Android 模擬器網絡隔離:localhost (127.0.0.1) 指向模擬器自身,而非宿主機 (開發電腦)。
解決:使用特殊 IP 10.0.2.2 映射到宿主機回環地址。
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
import com.mongodb.WriteConcern;
public class MainActivity extends AppCompatActivity {
// ... UI 初始化 ...
@SuppressLint("SetTextI18n")
public void SaveButton_Click(View view) {
// 1. 使用新 API 創建客戶端 (連接宿主機 MongoDB)
// 注意:10.0.2.2 是模擬器訪問宿主機的特殊 IP
String uri = "mongodb://10.0.2.2:27017";
// 建議使用單例模式管理 MongoClient,避免頻繁創建連接
MongoClient mongoClient = MongoClients.create(uri);
try {
// 2. 獲取數據庫和集合
MongoDatabase database = mongoClient.getDatabase("grade");
MongoCollection collection = database.getCollection("Student");
// 3. 構建文檔 (使用新 Document 類)
Document doc = new Document()
.append("name", ((EditText)findViewById(R.id.nameEditText)).getText().toString())
.append("num", ((EditText)findViewById(R.id.numEditText)).getText().toString())
.append("age", ((EditText)findViewById(R.id.ageEditText)).getText().toString())
.append("sexual", ((EditText)findViewById(R.id.sexualEditText)).getText().toString());
// 4. 寫入 (默認 ACKNOWLEDGED)
collection.insertOne(doc);
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "保存失敗: " + e.getMessage(), Toast.LENGTH_LONG).show();
} finally {
// 實際應用中 MongoClient 應為長連接單例,此處演示關閉
// mongoClient.close();
}
}
}
implementation 'org.mongodb:mongodb-driver-sync:4.8.0' // 或更新版本