Как сохранить и получить данные из базы данных Couchbase и отобразить их в ListView?

avatar
Sarat
8 апреля 2018 в 08:13
71
1
2

Я нахожусь в процессе понимания приложения CouchBase Lite для Android, поскольку я знаю только, как создать менеджер, базу данных, документ и представление. Однако я хочу загрузить данные из документов и показать их в приложении. но потерпел неудачу после нескольких попыток и выполнения некоторых руководств. Есть ли способ сохранить и загрузить эти данные и управлять ими в Listview? Код, который я использовал до сих пор, следующий:

public class MainActivity extends AppCompatActivity {

final String dbname = "userdils";
private String docId = "2";
private Manager manager;
private Database couchDb;

private TextView tvLogWindow;
private EditText u_id;
private EditText pwd;
Button btn_login,btn_login1;
TextView version;
private String TAG = "CouchBaseLiteLoginPage";
String email;
String password;
private UserDetails ud,udd;
private ArrayList<UserDetails> ud1;
String doc_id;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //tvLogWindow = (TextView) findViewById(R.id.tv_log_window);
    u_id = (EditText) findViewById(R.id.user_id);
    pwd = (EditText) findViewById(R.id.password);
    btn_login = (Button) findViewById(R.id.btn_login);
    btn_login1 = (Button) findViewById(R.id.btn_login1);

    /*tvLogWindow.setText(tvLogWindow.getText().toString() + "\n\nStart Couchbase App!");
    if (!Manager.isValidDatabaseName(dbname)) {
        tvLogWindow.setText(tvLogWindow.getText().toString() + "\n\nBad couchbase db name!");
        return;
    }*/

    createManager();
    createCouchdb();

    btn_login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v)
        {
            Log.d(TAG, "Create: " + 1);
            login();

        }
    });

    btn_login1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v)
        {
            Log.d(TAG, "View: " + 2);
            docView();
           // retrieveMovie(manager,couchDb,docId);

        }
    });


    //createDocument(docId);

    //Document retrievedDocument = retrieveDocument();
    /*updateDocument(retrievedDocument);
    deleteDocument(retrievedDocument);*/

    //tvLogWindow.setText(tvLogWindow.getText().toString() + "\n\nEnd the App!");
}


public void createManager() {
    try {
        manager = new Manager(new AndroidContext(getApplicationContext()), Manager.DEFAULT_OPTIONS);

    } catch (IOException e) {

        return;
    }
}

public void createCouchdb() {
    try {
        couchDb = manager.getDatabase(dbname);

    } catch (CouchbaseLiteException e) {

        return;
    }
}



public Document retrieveDocument(String docId) {
        Document retrievedDocument = couchDb.getDocument(docId);
    Log.d(TAG, "Retrieved Data:- " + String.valueOf(retrievedDocument.getProperties()));
    // Let's find the documents that have conflicts so we can resolve them:
        Query query = couchDb.createAllDocumentsQuery();
        query.setAllDocsMode(Query.AllDocsMode.ALL_DOCS);
    try {
        QueryEnumerator result = query.run();
        for (Iterator<QueryRow> it = result;
             it.hasNext(); ) {
            QueryRow row = it.next();
            Object movieObj = row.getDocument().getProperties().get("user_det");
            Gson gson = new Gson();
            String jsonString = gson.toJson(movieObj, Map.class); //Convert the object to json string using Gson
            UserDetails movie = gson.fromJson(jsonString, UserDetails.class); //convert the json string to Movie object
            if(movie.getUser_pwd().equals("000000")) {
                Log.i("getMovieFromDocument", "movie>>>" + movie.getUser_nm());
            }

            Log.d(TAG, "Document Data ID:- " + row.getDocumentId());

        }
    }
    catch (CouchbaseLiteException e) {

    }


       // Log.d(TAG, "User Name:- " +(String)retrievedDocument.getProperty("user_det"));
        return retrievedDocument;
}



public void login() {


    Log.d(TAG, "validate: " + 4);
    email = u_id.getText().toString().trim();
    password = pwd.getText().toString().trim();

    Log.d(TAG, "login: " + 5);

    btn_login.setEnabled(false);

    ud = new UserDetails();
    udd = new UserDetails();

    ud1 = new ArrayList<UserDetails>();


    ud.setUser_nm(email);
    ud.setUser_pwd(password);

    udd.setUser_nm("NAME_007");
    udd.setUser_pwd("PWD_007");

    ud1.add(ud);
    ud1.add(udd);

    createDocument(docId,ud1);


}

public void createDocument(String docId,ArrayList<UserDetails> ud) {
    // create some dummy data
    SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    Calendar calendar = GregorianCalendar.getInstance();
    String currentTimeString = dateFormatter.format(calendar.getTime());
    //Movie movie = new Movie("Star War", "The force awakens!", 120);

    // put those dummy data together
    Map<String, Object> docContent = new HashMap<String, Object>();
    docContent.put("message", "Hey Couchbase Lite");
    docContent.put("creationDate", currentTimeString);
    docContent.put("user_det", ud);
    //docContent.put("movie", movie);

    Log.d(TAG, "userDetails: " + String.valueOf(docContent));

      // create an empty document, add content and write it to the couchDb
      //Document document = new Document(couchDb,docId);
      //Document document = couchDb.createDocument();
    Document document = new Document(couchDb,docId);

    try {
        document.putProperties(docContent);
        //doc_id = document.getId();
       // Document retrieveDoc = retrieveDocument(docId);

        Log.d(TAG, "Document Count couchDb : " + couchDb.getDocumentCount());

    } catch (CouchbaseLiteException e) {

    }
}

public void docView() {


   // Document retrievedDocument = retrieveDocument(docId);
    Document retrievedDocument = retrieveDocument(docId);

}

private void retrieveMovie(Manager manager, Database couchDb, String docId) {
    Document retrievedDocument = couchDb.getDocument(docId); // Retrieve the document by id
    Object movieObj = retrievedDocument.getProperties().get("user_det");
    Gson gson = new Gson();
    String jsonString = gson.toJson(movieObj, Map.class); //Convert the object to json string using Gson
    UserDetails movie = gson.fromJson(jsonString, UserDetails.class); //convert the json string to Movie object
    Log.i("getMovieFromDocument", "jsonString>>>" + jsonString);
    Log.i("getMovieFromDocument", "movie>>>" + movie.getUser_nm());
    }

}
Источник

Ответы (1)

avatar
rajagp
9 апреля 2018 в 13:55
0

Непонятно, каким руководствам вы следовали и какие ошибки наблюдали. В любом случае, посмотрите этот блог, в котором обсуждается, как вы можете загружать документы в RecyclerView с Couchbase Lite в качестве источника данных. Рекомендуемый шаблон можно легко применить к ListView или просто использовать RecyclerView вместо ListView в своем приложении.