public class StartNewActivity extends Activity{
public static final String TEST_SKETCH_APP = "testSketchApp";
public static final String SKETCH_COLLECTION = "sketchCollection";
private EditText editText;
private EditText editText2;
private EditText editText3;
private EditText editText4;
private String name;
private String password;
private String email;
private String phoneNumber;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
editText = (EditText) findViewById(R.id.editText);
editText2 = (EditText) findViewById(R.id.editText2);
editText3 = (EditText) findViewById(R.id.editText3);
editText4 = (EditText) findViewById(R.id.editText4);
}
@Override
public void onBackPressed() {
Intent mainActivityIntent = new Intent(StartNewActivity.this, MainActivity.class);
startActivity(mainActivityIntent);
super.onBackPressed();
}
public void onSubmitButton(View view){
name = editText.getText().toString();
password = editText2.getText().toString();
email = editText3.getText().toString();
phoneNumber = editText4.getText().toString();
// Gets the URL from the UI's text field.
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
new MakeDataBaseConnection().execute(name, password, email, phoneNumber);
} else {
final Toast toast = Toast.makeText(getApplicationContext(), "No Network available", Toast.LENGTH_SHORT);
toast.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
toast.cancel();
}
}, 500);
}
}
private class MakeDataBaseConnection extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
// params comes from the execute() call: params[0] is the url.
return saveValues(urls);
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
final Toast toast = Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT);
toast.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
toast.cancel();
}
}, 500);
}
}
private String saveValues(String[] url) {
try {
MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017");
MongoClient instance = MongoDatabaseConnection.getInstance(uri);
DB db = instance.getDB(TEST_SKETCH_APP);
DBCollection collection = db.getCollection(SKETCH_COLLECTION);
BasicDBObject dbObject = new BasicDBObject();
dbObject.put("name", url[0]);
dbObject.put("password", url[1]);
dbObject.put("email", url[2]);
dbObject.put("phoneNumber", url[3]);
collection.insert(dbObject);
return "Values Saved";
}catch (Exception e){
return "Not Saved, "+e.getMessage();
}
}
}
我正在尝试在MongoDB数据库中保存值,我的数据库肯定是在后台运行。但是当我尝试插入Document对象时,它会抛出一个异常:
com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting for a server that matches AnyServerSelector{}. Client view of
cluster state is {type=Unknown, servers=[{address=localhost:27017, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {java.net.ConnectException: failed
to connect to localhost/127.0.0.1 (port 27017) after 20000ms: isConnected failed: ECONNREFUSED (Connection refused)}, caused by {android.system.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused)}}]
我正在使用WorkerThread按照建议保存操作,并使用AsyncTask进行数据库操作,但数据库套接字没有打开。 你能告诉我我错过了什么吗?或者展示如何通过网络连接到数据库的示例。
答案 0 :(得分:0)
我不认为MongoDB在您的Android设备上运行,与localhost的连接将超时,因为127.0.0.1上没有运行MongoDB服务器。