android - 如何从 Couchbase 数据库中保存和获取数据并将其显示在 ListView 上?

标签 android

我正在了解适用于 Android 应用程序的 CouchBase Lite,目前我只知道如何创建管理器、数据库、文档和 View 。但是我想从文档加载数据并将其显示在应用程序中但是在尝试了几次并遵循了一些教程之后失败了。有没有一种方法可以保存和加载这些数据并在 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());
    }

}

最佳答案

不清楚您遵循了哪些教程以及观察到了哪些错误。无论如何,看看这个 blog讨论了如何使用 Couchbase Lite 作为数据源在 RecyclerView 中加载文档。推荐的模式可以很容易地应用于 ListView 或只在您的应用中使用 RecyclerView 而不是 ListView。

关于android - 如何从 Couchbase 数据库中保存和获取数据并将其显示在 ListView 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715836/

相关文章:

java - 更改背景颜色后如何从无边框按钮中获取反馈?可选项目背景

java - 回收站 View : Disable scrolling caused by change in focus

android - 是否需要任何配置来使用 Android 和 IOS 的 Web Api 服务(为黑莓开发)

android - Android应用程序中的系统可以将静态变量值清零吗?

android - 我怎样才能用加速度计传感器移动一个圆圈?

android - 获取当前位置location android

android - 使用 Kotlin 处理错误 RXJava Android

android - 如何相对于屏幕尺寸缩放图像?

java - 尝试将 Assets 文件夹中找到的数据库复制到应用程序的数据库文件夹中时遇到的问题

android - Google Cloud Storage 存储桶 ID