简体   繁体   English

我想将用户个人资料保存在本地sqlite数据库中,并将用户信息保存

[英]I want to save user profile in local sqlite database and the user information

I've done firebase authentication for login and sign up and now i want to save user profile in local sqlite database. 我已经完成了登录和注册的Firebase身份验证,现在我想将用户个人资料保存在本地sqlite数据库中。 I've fetched the user information from firebase and storing them in a string variable and passing these variables to the Adduser function to save this data in the local database.But data is not getting stored and showing "Error with saving user" ,that is rowid is "-1" always. 我已经从firebase中获取了用户信息,并将其存储在字符串变量中,并将这些变量传递给Adduser函数,以将这些数据保存在本地数据库中。但是数据没有被存储并显示“保存用户时出错”,即rowid始终为“ -1”。 i'm new to android. 我是android新手。 please help me to solve this issue. 请帮助我解决此问题。 thanks in advance 提前致谢


java file Java文件

 package com.example.mansi.busezon;

import android.app.Application;
import android.content.ContentValues;
mport android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.example.mansi.busezon.data.dbContract;
import com.example.mansi.busezon.data.dbHelper;
import com.google.firebase.FirebaseApp;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
i
public class SELL_BUY extends AppCompatActivity {
   // private  dbHelper mDbHelper;
    String name;
    String email ;
    String address ;
    String phoneno ;
    String password ;
    //String userId;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
                // Set the content of the activity to use the activity_main.xml layout file
                setContentView(R.layout.activity_sell__buy);

            check();


        TextView BUY= (TextView) findViewById(R.id.buy);
                BUY.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //create intent to open the activity
                       Intent BUYintent= new Intent(SELL_BUY.this,HomeActivity.class);
                        //start the new activity
                        startActivity(BUYintent);
                    }
                });

                TextView SELL= (TextView) findViewById(R.id.sell);
                SELL.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //create intent to open the activity
                        Intent SELLintent= new Intent(SELL_BUY.this,SellHomepage.class);
                        //start the new activity
                        startActivity(SELLintent);
                    }
                });
            }
    public void sendMessage(View view)
    {
        Intent intent = new Intent(SELL_BUY.this, profile_page.class);
        startActivity(intent);
    }



    private void check()
    {
        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        //database reference pointing to demo node
//        DatabaseReference demoRef = rootRef.child("CI8hvEW0sfZ0oU1GziTpGYPJv2z2");
//        String value = "User22";
//        //push creates a unique id in database
//        demoRef.push().setValue(value);
        rootRef.addListenerForSingleValueEvent(new ValueEventListener()
        {
            String userId=getIntent().getStringExtra("Id");
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot ds : dataSnapshot.getChildren())
                    {
                        if(ds.getKey().equals(userId))
                        {
                            //name1="aakritijohar";

                            name = ds.child("name").getValue(String.class);
                            email = ds.child("email").getValue(String.class);
                            address = ds.child("addres").getValue(String.class);
                            phoneno = ds.child("phoneno").getValue(String.class);
                            TextView textView = (TextView) findViewById(R.id.test);
                            textView.setText(phoneno);
                            password = ds.child("password").getValue(String.class);
                            Toast.makeText(SELL_BUY.this, email + " " + ds.getKey(), Toast.LENGTH_SHORT).show();
                            insertUser(name,email,address,phoneno,password);
                        }
                    }
                Bundle extras=getIntent().getExtras();
                if(extras!=null) {
                    String name = extras.getString("name");
                }

                }

            @Override
        public void onCancelled(DatabaseError databaseError) {}

        });
    }

    private void insertUser(String nameString,String EMAILString,String addressString,String numbertString,String pass) {
        // Create database helper
        dbHelper mDbHelper = new dbHelper(this);

        // Gets the database in write mode
        SQLiteDatabase db = mDbHelper.getWritableDatabase();




        ContentValues values = new ContentValues();

        values.put(dbContract.userEntry.COLUMN_USER_NAME, nameString);
        values.put(dbContract.userEntry.COLUMN_EMAIL, EMAILString);
        values.put(dbContract.userEntry.COLUMN_number, numbertString);
        values.put(dbContract.userEntry.COLUMN_address, addressString);
        values.put(dbContract.userEntry.COLUMN_password, pass);

        // Insert a new row for user in the database, returning the ID of that new row.
        long newRowId = db.insert(dbContract.userEntry.TABLE_NAME, null, values);

        // Show a toast message depending on whether or not the insertion was successful
        if (newRowId == -1) {
            // If the row ID is -1, then there was an error with insertion.
            Toast.makeText(this, "Error with saving user", Toast.LENGTH_SHORT).show();
        } else {
            // Otherwise, the insertion was successful and we can display a toast with the row ID.
            Toast.makeText(this, "user saved " + newRowId, Toast.LENGTH_SHORT).show();
        }
    }

        }

database helper class 数据库助手类

   package com.example.mansi.busezon.data;


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;




/**
 * Database helper for Pets app. Manages database creation and version management.
 */
public class dbHelper extends SQLiteOpenHelper {

    public static final String LOG_TAG = dbHelper.class.getSimpleName();

    /** Name of the database file */
    private static final String DATABASE_NAME = "user.db";

    /**
     * Database version. If you change the database schema, you must increment the database version.
     */
    private static final int DATABASE_VERSION = 1;

    /**
     * Constructs a new instance of {@link dbHelper}.
     *
     * @param context of the app
     */
    public dbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    /**
     * This is called when the database is created for the first time.
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        // Create a String that contains the SQL statement to create the pets table
        String SQL_CREATE_USER_TABLE =  "CREATE TABLE " + dbContract.userEntry.TABLE_NAME + " ("
                + dbContract.userEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + dbContract.userEntry.COLUMN_USER_NAME + " TEXT NOT NULL, "
                + dbContract.userEntry.COLUMN_address + " VARCHAR, "
                + dbContract.userEntry.COLUMN_number + " VARCHAR NOT NULL, "
                + dbContract.userEntry.COLUMN_EMAIL + " VARCHAR NOT NULL, "
                + dbContract.userEntry.COLUMN_password + " VARCHAR NOT NULL );";

        // Execute the SQL statement
        db.execSQL(SQL_CREATE_USER_TABLE);
    }

    /**
     * This is called when the database needs to be upgraded.
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // The database is still at version 1, so there's nothing to do be done here.
    }
}

There doesn't appear to be anything wrong with the code as it is. 代码看起来没有任何问题。

As such I suspect that your issue may be that you have changed the table structure since running the App. 因此,我怀疑您的问题可能是自运行该应用程序以来您已经更改了表结构。

  • eg by adding a new column and then changing the code accordingly 例如,通过添加新列,然后相应地更改代码

However, that you have then not taken into consideration that the onCreate method only gets automatically invoked when the database is created. 但是,您没有考虑到onCreate方法仅在创建数据库时自动被调用。

That is the 'onCreate' method does not run every time the App is started. 也就是说,“ onCreate”方法不会在每次启动应用程序时运行。

I'd suggest that deleting the App's data or uninstalling the App and then rerunning the App will resolve the issue. 我建议删除该应用程序的数据或卸载该应用程序,然后重新运行该应用程序将解决此问题。

If that doesn't resolve the issue then please check the log as that should contain a stack-trace for when the insert comes across the issue even though the App doesn't itself crash (you could use the insertOrThrow method instead of insert which would then result in an exception/crash). 如果不解决问题,那么请检查日志作为应包含一个堆栈跟踪的当insert遇到问题,即使应用程序本身不崩溃(你可以使用insertOrThrow方法,而不是insert这将然后导致异常/崩溃)。

If you then still have issues, please update the question to include the stack-trace. 如果仍然有问题,请更新问题以包括堆栈跟踪。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从数据库中检索数据以使用房间显示用户配置文件信息 - Retrieving data from database to display user profile information using room 我怎么不能用新信息更新我的用户资料? - how can't I update my user profile with new information? 如何询问用户是否要修改信息然后应用更改? - How can I ask a user if they want to modify information and then apply the change? 如何在Spring和Hibernate中为当前用户保存信息? - How can I save information for current user in Spring & Hibernate? 用户信息未持久化到Oracle数据库 - User information is not persistenting to Oracle Database 我想从用户那里获取数据并将其与我在java中的数据库进行比较 - I want to get data from user and compare it with my database in java 如何将用户消息和历史记录保存到房间数据库 - How can I save user messages and history to room database 想要在整个应用程序中保存角色的用户选择 - Want to save user selection for character throughout application 我正在尝试使用java + sqlite制作小型数据库,该数据库接受用户输入并保存recored,这是我的代码给出错误 - i am trying to make small database with java+sqlite which accept input from user and save recored here is my code giving error 我想在SQLite数据库中拆分逗号 - I want to split comma inside SQLite database
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM