java - 如何读取并显示一开始默认设置的用户等级

标签 java android sqlite android-sqlite

我在 SQLite 数据库中添加了一个新列 COL_5,它被称为“rank”。每个注册的用户都以设置为“Australopithecus afarensis”的等级开始,该等级应显示在 UserPanelActivity.java 中。我所做的是设法显示用户的昵称(SignInActivity),但我无法检查当前排名并将其显示在屏幕上。

代码如下所示:

数据库助手:

package com.pracainzynierska.inzynierka;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.TextView;

import androidx.annotation.Nullable;

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME="register.db";
    public static final String TABLE_NAME="registeruser";
    public static final String COL_1 ="ID";
    public static final String COL_2 ="username";
    public static final String COL_3 ="mail_address";
    public static final String COL_4 ="password";
    public static final String COL_5 = "rank";
    //public static final String COL_6 = "dailytip";

    public DatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME,null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE registeruser (ID INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT, mail_address TEXT, password TEXT, rank TEXT DEFAULT 'Australopithecus afarensis')");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public long addUser(String user, String password, String mail_address) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("username", user);
        contentValues.put("password", password);
        contentValues.put("mail_address", mail_address);
        long res = db.insert("registeruser", null, contentValues);
        db.close();
        return res;
    }

        public boolean checkUser(String username, String password)
        {
            String[] columns = {COL_1};
            SQLiteDatabase db = getReadableDatabase();
            String selection = COL_2 + "=?" + " and " + COL_4 + "=?";
            String[] selectionArgs = {username, password};
            Cursor cursor = db.query(TABLE_NAME, columns,selection,selectionArgs,null,null,null);
            int count = cursor.getCount();
            cursor.close();
            db.close();

            if(count>0)
                return true;
            else
                return false;
        }
    }

登录 Activity :

package com.pracainzynierska.inzynierka;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.facebook.CallbackManager;

public class SignInActivity extends AppCompatActivity {
    private TextView register_text;
    public static CallbackManager callbackManager;
    DatabaseHelper db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        db = new DatabaseHelper(this);
        callbackManager = CallbackManager.Factory.create();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_in);

        final EditText usernameEditText = findViewById(R.id.username);
        final EditText passwordEditText = findViewById(R.id.password);
        final Button loginButton = findViewById(R.id.login);
        final ProgressBar loadingProgressBar = findViewById(R.id.loading);
        usernameEditText.requestFocus();
        register_text = findViewById(R.id.register_text);

        register_text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent registerIntent = new Intent(SignInActivity.this, RegisterActivity.class);
                startActivity(registerIntent);
            }
        });

        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String user = usernameEditText.getText().toString().trim();
                String pwd = passwordEditText.getText().toString().trim();
                Boolean res = db.checkUser(user,pwd);
                if(res == true)
                {
                    Intent intent = new Intent(SignInActivity.this,UserPanelActivity.class);
                    Intent intentPopUp = new Intent(SignInActivity.this, PopUpActivity.class);
                    intent.putExtra("username",user);
                    startActivity(intent);
                    startActivity(intentPopUp);
                    Toast.makeText(SignInActivity.this,"Welcome " + user + "!", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    Toast.makeText(SignInActivity.this,"There is a problem with singing in!", Toast.LENGTH_SHORT).show();
                    usernameEditText.setText("");
                    passwordEditText.setText("");
                    usernameEditText.requestFocus();
                }

            }
        });
    }
}

用户面板 Activity :

package com.pracainzynierska.inzynierka;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class UserPanelActivity extends AppCompatActivity {

    private Button settings_btn, progress_btn, dailychallenge_btn, premium_btn, logout_btn, training_btn;
    private TextView NickNameText, rankText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_panel);
        String username = getIntent().getStringExtra("username");
        //String rank = getIntent().getStringExtra("rank");

        NickNameText =  findViewById(R.id.nickname);
        NickNameText.setText(username);

        //here I'd like to display rank
        rankText = findViewById(R.id.rank);
        rankText.setText(rank);


        settings_btn = findViewById(R.id.settings_user_panel_button);
        settings_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Settings();
            }
        });

        progress_btn = findViewById(R.id.progress_button);
        progress_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyProgress();
            }
        });

        dailychallenge_btn = findViewById(R.id.challenge_button);
        dailychallenge_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DailyChallenge();
            }
        });

        premium_btn = findViewById(R.id.premium_button);
        premium_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Premium();
            }
        });

        logout_btn = findViewById(R.id.logout_button);
        logout_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BackToMenu();
                finish();
            }
        });

        training_btn = findViewById(R.id.start_freetraining_button);
        training_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Training();
            }
        });


    }

    private void Training() {
        Intent intent = new Intent(this, FillTheTextActivity.class);
        startActivity(intent);
    }

    private void BackToMenu() {
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }

    private void Premium() {
        Intent intent = new Intent(this,PremiumActivity.class);
        startActivity(intent);
    }

    private void DailyChallenge() {
        Intent intent = new Intent(this,DailyChallengeActivity.class);
        startActivity(intent);
    }

    private void MyProgress() {
        Intent intent = new Intent(this,MyProgressActivity.class);
        startActivity(intent);
    }

    private void Settings() {
        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);
    }

}

欢迎您的每一次帮助,提前致谢:)

最佳答案

在您的 DatabaseHelper 类中创建这样的方法:

public String getRank(int id) {
    String query = "SELECT rank from " + TABLE_NAME + " where ID = " + id;
    SQLiteDatabase db = getReadableDatabase();

    try {
       return db.rawQuery(query, null).getString(cursor.getColumnIndex(rank));
    } catch (Exception e) {
       return "";
    }
}

Source

关于java - 如何读取并显示一开始默认设置的用户等级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58747982/

相关文章:

java - 允许没有 else 的简单 if 语句在代码风格中没有大括号

java - 为程序内功能创建语法

java - 类型不匹配绑定(bind)错误的自定义错误消息

android - 如何从 XML 格式化字符串数组

javascript - 如何在 webview 组件中检索 Javascript 函数值

Android:在 NDEF_DISCOVERED 操作上注册的 Activity 被忽略

Sqlite 按日期分组获取该日期的最新行值

java - null 可以作为 Java 中 HashSet 的元素吗?

sql-server - SQLite 与 SQL Server

ruby-on-rails - 在 windows xp 上为 ruby​​ on rails 安装 sqlite?