2016-11-05 56 views
0
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数据库中保存值,我的数据库肯定是在后台运行。但是,当我尝试插入文档对象时,它抛出一个异常,如:即使使用AsyncTask,Android也无法连接到MongoDB

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

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

+0

我的天哪,真的没有想到这一点。由于我能够在我的计算机上调试代码,因此我忘记了localhost意味着电话而不是计算机。谢谢。 – Nagendra555

相关问题