即使使用AsyncTask,Android也无法连接到MongoDB

时间:2016-11-05 06:13:43

标签: android mongodb android-asynctask

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进行数据库操作,但数据库套接字没有打开。 你能告诉我我错过了什么吗?或者展示如何通过网络连接到数据库的示例。

1 个答案:

答案 0 :(得分:0)

我不认为MongoDB在您的Android设备上运行,与localhost的连接将超时,因为127.0.0.1上没有运行MongoDB服务器。