2011-04-12 6 views
4

Je crée une application android qui stocke des données dans CouchDB, et j'ai besoin de créer une base de données à partir de l'application android. J'ai besoin d'exécuter la commande "curl-X PUT http://user:[email protected]:5984/myDataBase" avec les méthodes java.Comment créer une base de données dans CouchDB en indiquant le nom d'utilisateur et mot de passe

J'ai mis en œuvre les fonctions suivantes:

public static boolean createDatabase(String hostUrl, String databaseName) { 
    try { 
     HttpPut httpPutRequest = new HttpPut(hostUrl + databaseName); 
     JSONObject jsonResult = sendCouchRequest(httpPutRequest); 

     return jsonResult.getBoolean("ok"); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

private static JSONObject sendCouchRequest(HttpUriRequest request) { 
    try { 
     HttpResponse httpResponse = (HttpResponse) new DefaultHttpClient().execute(request); 
     HttpEntity entity = httpResponse.getEntity(); 
     if (entity != null) { 
      InputStream instream = entity.getContent(); 
      String resultString = convertStreamToString(instream); 
      instream.close(); 
      JSONObject jsonResult = new JSONObject(resultString); 

      return jsonResult; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

J'appelle la fonction par:

createDatabase("http://user:[email protected]/","myDataBase"); 

mais il n'y a aucun résultat. Je pense que le problème est à l'utilisateur: passwd car en mode « partie admin » l'funcion fonctionne très bien appel par:

createDatabase("http://127.0.0.1/","myDataBase"); 
+0

Pas trop familier avec l'environnement de l'application android, mais juste pour être paranoïaque avez-vous essayé la commande curl réelle à partir d'un terminal, pour être sûr à 100% que l'utilisateur: passwd que vous utilisez sont corrects? – rossdavidh

Répondre

4

J'ai eu le même problème -> vous devez utiliser l'authentification HTTP dans l'en-tête. Donc, il suffit d'ajouter cette ligne d'en-tête à votre demande:

private static void setHeader(HttpRequestBase request) { 
    request.setHeader("Accept", "application/json"); 
    request.setHeader("Content-type", "application/json"); 
    request.setHeader("Authorization", "Basic base64(username:password)"); 
} 

garder à l'esprit que vous devez coder l'expression « nom d'utilisateur: mot de passe » avec base64. cela ressemble à quelque chose comme ceci:

request.setHeader("Authorization", "Basic 39jdlf9udflkjJKDKeuoijdfoier"); 
0

Vous pouvez jeter un oeil à this blogpost on libcouch-android. Il a quelques fonctionnalités intéressantes qui prennent en charge le développement Android avec CouchDB. Par exemple, créer automatiquement des bases de données et des mots de passe pour les applications, de sorte que les utilisateurs aient une utilisation transparente de CouchDB (si vous le souhaitez). En outre, il offre un accès aux méthodes RPC de CouchDB, ce qui vous permet de démarrer et d'arrêter la base de données à partir des cycles de vie de votre application.

En ce qui concerne la sécurité, je l'ai juste résumée ici en this thread.

Questions connexes