SQLiteを使用してユーザー名とパスワードを格納するデータベースを設定しようとしていますが、エミュレータのアカウントに登録するとエラーになります。また、私は登録せずにログインしようとするとエラーになります。これは私の2番目の投稿だけですので、もし何かがあれば私は投稿したときに私がもっと良くすることができます私に教えてください!ここでAndroid Studio 2.1を使用してSQLiteデータベースから値を取得できません
public class DbHelper extends SQLiteOpenHelper {
private static String DbName = "SimpleDatabase";
private static int DbVersion = 1;
//Table Names
private static final String TABLE_USER = "User";
//Column Names
private static final String USER_NAME = "UserName";
private static final String PASSWORD = "Password";
//Create statements
// Todo table create statement
private static final String CREATE_TABLE_USER = "CREATE TABLE "
+ TABLE_USER + "(" + USER_NAME + "TEXT PRIMARY KEY,"
+ PASSWORD + "TEXT)" ;
public DbHelper(Context context) {
super(context, DbName, null, DbVersion);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_USER);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXIST "+TABLE_USER);
onCreate(db);
}
public Boolean InsertUser(String userName,String password){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM "+TABLE_USER+" WHERE "+USER_NAME+" == '"+userName+"';";
Cursor c = db.rawQuery(query,null);
if(c != null && c.moveToFirst()) {
c.close();
return false ;
}else{
ContentValues values = new ContentValues();
values.put(USER_NAME, userName);
values.put(PASSWORD, password);
db.insert(TABLE_USER, null, values);
return true;
}
}
public Boolean loginUser(String userName,String password){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM "+TABLE_USER+" WHERE "+USER_NAME+" == '"+userName+"' AND "+PASSWORD+" == '"+password+"';";
Cursor c = db.rawQuery(query,null);
if(c != null && c.moveToFirst()) {
c.close();
return true;
}
return false;
}
}
ここDbHelper
public class Login extends Fragment {
TextInputLayout usernamelayout, passwordLayout;
EditText userName,password;
Button login, goToRegister;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.content_login,container,false);
}
@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
usernamelayout = (TextInputLayout)view.findViewById(R.id.user_name_layout);
passwordLayout = (TextInputLayout)view.findViewById(R.id.password_layout);
userName = (EditText)view.findViewById(R.id.user_name);
password = (EditText)view.findViewById(R.id.password);
login = (Button)view.findViewById(R.id.login_button);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String userText = userName.getText().toString().trim();
String passwordText = password.getText().toString().trim();
if (userText.isEmpty()) {
usernamelayout.setErrorEnabled(true);
usernamelayout.setError("Please Enter User Name");
} else if (passwordText.isEmpty()) {
passwordLayout.setErrorEnabled(true);
passwordLayout.setError("Please Enter Password");
} else {
DbHelper helper = new DbHelper(getActivity());
if (helper.loginUser(userText, passwordText)) {
startActivity(new Intent(getActivity(), MainActivity.class));
} else {
Toast.makeText(getActivity(), "User Name or Password is incorrect", Toast.LENGTH_SHORT).show();
}
}
}
});
goToRegister = (Button)view.findViewById(R.id.go_to_register_button);
goToRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Register fragment = new Register();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_trans));
setExitTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade));
fragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_trans));
fragment.setEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade));
}
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.addSharedElement(view.findViewById(R.id.logo),"LOGO");
transaction.replace(R.id.main_container, fragment);
transaction.commit();
}
});
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getActivity().setTitle("Uhvents Login");
}
}
で行くLOGINクラスはREGISTERクラスです。ここでは、その後
public class Register extends Fragment {
TextInputLayout usernamelayout, passwordLayout;
EditText userName,password;
Button register, goToLogin;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.content_register,container,false);
}
@Override
public void onViewCreated(final View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
usernamelayout = (TextInputLayout) view.findViewById(R.id.user_name_layout);
passwordLayout = (TextInputLayout) view.findViewById(R.id.password_layout);
userName = (EditText) view.findViewById(R.id.user_name);
password = (EditText) view.findViewById(R.id.password);
register = (Button) view.findViewById(R.id.register_button);
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String userText = userName.getText().toString().trim();
String passwordText = password.getText().toString().trim();
if(userText.isEmpty()) {
usernamelayout.setErrorEnabled(true);
usernamelayout.setError("Please Enter User Name");
}
else if (passwordText.isEmpty()){
passwordLayout.setErrorEnabled(true);
passwordLayout.setError("Please Enter Password");
}
else {
DbHelper helper = new DbHelper(getActivity());
if (helper.InsertUser(userText,passwordText)){
Toast.makeText(getActivity(), "Registration Success", Toast.LENGTH_SHORT).show();
if (getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
goToLogin.performClick();
}
}else {
Toast.makeText(getActivity(), "User Name already in use.",Toast.LENGTH_SHORT).show();
}
}
}
});
goToLogin = (Button)view.findViewById(R.id.go_to_login);
goToLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Login fragment = new Login();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_trans));
setExitTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade));
fragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_trans));
fragment.setEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade));
}
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.addSharedElement(view.findViewById(R.id.logo),"LOGO");
transaction.replace(R.id.main_container, fragment);
transaction.commit();
}
});
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getActivity().setTitle("Register for Uhvents");
}
}
そして、私は上記の描かれたシナリオを実行するたびに、私は取得していますエラーログです。
致命的な例外:メインプロセス:com.uhdapt.tutorial4、PID:4807 android.database.sqlite.SQLiteException:そのようなカラム:ユーザー名(コード1)、コンパイル中:SELECT * FROMユーザーのユーザー名== 'alex' ANDパスワード== '1234' android.database.sqlite.SQLiteConnection.nativePrepareStatement(ネイティブメソッド) android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887) android.database.sqlite .SQLiteConnection.prepare(SQLiteConnection.java:498)android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)の android.database.sqliの (SQLiteDirectCursorDriver.java:44) (android.database.sqlite.SQL)。 (SQLiteDatabase.java:1255) at com.uhdapt.tutorial4.database.DbHelper.loginUser(DbHelper.java:SQLiteDatabase.java:1255) 68) at com.uhdapt.tutorial4.fragments.Login $ 1.onClick(Login.java:63) at android.view.View.performClick(View.java:5198) android.view.View $ PerformClick.run (View.java:21147)0 android.os.Looper.loopでandroid.os.Handler.dispatchMessage(Handler.java:95) でandroid.os.Handler.handleCallback(Handler.java:739) (Looper.java:148) ででandroid.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) ) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
は 'プライベート静的最終文字列USER_NAME =「ユーザー名」のように列名とデータ型の間にスペースを追加します。 プライベートstatic final String PASSWORD = "パスワード"; ' –