2016-11-05 53 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

相關問題