问题描述
所以,我正在使用sqlite在android中做一个项目。那里有两种类型的登录方式。一个是管理员登录,另一个是用户登录。我总共有四个活动:登录活动,注册活动,DasboardActivity和MainListViewActivity。在“仪表板活动”中,我具有RecyclerView以及用于用户名和用户电子邮件的两个单独的TextView。因此,以用户身份在应用程序中注册的任何人,他们只能看到他们的个人信息,即用户名和电子邮件,这些信息将显示在TextViews中;如果我们以管理员身份登录,则该时间将显示每个用户的所有详细信息。每个用户,并将在recyclerview中显示。 MainListView与sqlite或管理员用户登录均无关。在那里,我只保留了一些虚拟数据抛出ArrayList,将其显示在ListView中。主要目的是提供两个不同的活动,例如DashBoardActivity(RecyclerView)和MainListViewActivity(listView),以便我可以通过导航抽屉轻松地在这两个活动之间进行切换。现在,我面临的问题是当我以管理员或用户身份登录时,数据已正确显示在DashBoard活动中。之后,当我通过导航抽屉导航到MainListViewActivity时,这也在ListView中正确显示了虚拟数据。 * 但是,当我再次导航回DashBoardActivity时,它显示java.lang.NullPointerException,并且在调试应用程序时,我发现Bundle类正在从我的Login Activity中获取DashBoard Activity中的值通过Intent变为空。
如何解决此问题?
代码如下:
LoginActivity.java:
package com.example.recyclerexample;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends AppCompatActivity {
EditText edt_email,edt_pass;
Button btn_submit,btn_reg;
SharedPreferences sharedPreferences;
DatabaseHelping databaseHelping;
private String admin_email = "admin";
private String admin_pass = "password";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
edt_email=findViewById(R.id.edt_email);
edt_pass=findViewById(R.id.edt_pass);
btn_submit=findViewById(R.id.btn_submit);
btn_reg=findViewById(R.id.btn_reg);
sharedPreferences = getSharedPreferences("userDetails",Context.MODE_PRIVATE);
databaseHelping = new DatabaseHelping(this);
btn_submit.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean login_Verify = databaseHelping.loginUser(edt_email.getText().toString().trim(),edt_pass.getText().toString().trim());
//Admin
if(edt_email.getText().toString().trim().equals(admin_email) && edt_pass.getText().toString().trim().equals(admin_pass)){
Toast.makeText(LoginActivity.this,"Login admin Successful",Toast.LENGTH_LONG).show();
Intent intent = new Intent(LoginActivity.this,DashboardActivity.class);
intent.putExtra("user_type","admin");
startActivity(intent);
finish();
}
//User
else if(login_Verify){
Registerusermodel usermodel =databaseHelping.getUserDetails(edt_email.getText().toString().trim());
Toast.makeText(LoginActivity.this,"Login user Successful","user");
intent.putExtra("user_name",sharedPreferences.getString("name",""));
intent.putExtra("userData",usermodel);
startActivity(intent);
finish();
}
//Login Failed
else{
Toast.makeText(LoginActivity.this,"Login Failed",Toast.LENGTH_LONG).show();
Intent intent = new Intent(LoginActivity.this,RegistrationActivity.class);
startActivity(intent);
finish();
}
}
});
btn_reg.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LoginActivity.this,RegistrationActivity.class);
startActivity(intent);
finish();
}
});
}
}
RegistrationActivity.java
package com.example.recyclerexample;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.display;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class RegistrationActivity extends AppCompatActivity {
EditText edt_email,edt_pass,edt_name;
Button btn_submit;
TextView txt_header;
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
DatabaseHelping databaseHelping;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration);
edt_email=findViewById(R.id.edt_email);
edt_pass=findViewById(R.id.edt_pass);
edt_name=findViewById(R.id.edt_name);
txt_header=findViewById(R.id.txt_header);
btn_submit=findViewById(R.id.btn_submit);
txt_header.setText("Registration");
sharedPreferences = getSharedPreferences("userDetails",Context.MODE_PRIVATE);
editor=sharedPreferences.edit();
databaseHelping = new DatabaseHelping(this);
btn_submit.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editor.putInt("user_id",1);
editor.putString("name",edt_name.getText().toString().trim());
editor.putString("email",edt_email.getText().toString().trim());
editor.putString("password",edt_pass.getText().toString().trim());
editor.commit(); //apply()
Registerusermodel model = new Registerusermodel();
model.setName(edt_name.getText().toString().trim());
model.setEmail(edt_email.getText().toString().trim());
model.setPassword(edt_pass.getText().toString().trim());
databaseHelping.registerUser(model);
Intent intent = new Intent(RegistrationActivity.this,LoginActivity.class);
startActivity(intent);
finish();
}
});
}
}
DashBoardActivity.java(recyclerview和两个文本视图)
package com.example.recyclerexample;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.recyclerview.widget.linearlayoutmanager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.recyclerexample.nav_control.NavAdapter;
import com.example.recyclerexample.nav_control.NavModel;
import com.example.recyclerexample.nav_control.Navigation_Control;
import com.google.android.material.navigation.NavigationView;
import java.util.ArrayList;
public class DashboardActivity extends AppCompatActivity {
RecyclerView recycler;
RecyclerAdapter recyclerAdapter;
ArrayList<Registerusermodel> arrayList = new ArrayList<>();
linearlayoutmanager linearlayoutmanager;
Button btn_logout;
TextView txt_name,txt_header,txt_user_name,txt_user_email;
private String user_type=null;
DatabaseHelping databaseHelping;
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
//Navigation Drawer Deceleration
ImageView img_nav;
DrawerLayout drawer_layout;
ListView menu_list;
ArrayList<NavModel> navList;
NavAdapter side_menu;
NavigationView nav_view;
Registerusermodel registerusermodel=null;
//Navigation Drawer Deceleration
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard);
recycler = findViewById(R.id.recycler);
btn_logout=findViewById(R.id.btn_logout);
txt_name=findViewById(R.id.txt_name);
txt_header = findViewById(R.id.txt_header);
txt_user_email=findViewById(R.id.txt_user_email);
txt_user_name=findViewById(R.id.txt_user_name);
txt_header.setText("RecyclerView");
databaseHelping = new DatabaseHelping(this);
sharedPreferences = getSharedPreferences("userDetails",Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
Bundle bundle = getIntent().getExtras();
if(bundle!=null){
txt_name.setText(bundle.getString("user_name"));
//if admin or user
user_type = bundle.getString("user_type");
registerusermodel=(Registerusermodel) getIntent().getSerializableExtra("userData");
}
//Navigation Drawer Initialization and configuration
initNavFiels();
prepareSideMenu();
if("admin".equals(user_type)){
recycler.setVisibility(View.VISIBLE);
txt_user_name.setVisibility(View.GONE);
txt_user_email.setVisibility(View.GONE);
// arrayList.add(new usermodel("Debjit","7485961245",R.mipmap.ic_launcher)); //0
// arrayList.add(new usermodel("Djit",R.mipmap.ic_launcher));//1 ...
// arrayList.add(new usermodel("Dejit",R.mipmap.ic_launcher));
// arrayList.add(new usermodel("Deit",R.mipmap.ic_launcher));
// arrayList.add(new usermodel("Debji",R.mipmap.ic_launcher));
arrayList = databaseHelping.getAllUser();
linearlayoutmanager= new linearlayoutmanager(DashboardActivity.this,RecyclerView.VERTICAL,false);
recyclerAdapter = new RecyclerAdapter(arrayList,DashboardActivity.this);
recycler.setLayoutManager(linearlayoutmanager);
recycler.setAdapter(recyclerAdapter);
}
else{
recycler.setVisibility(View.GONE);
txt_user_email.setVisibility(View.VISIBLE);
txt_user_name.setVisibility(View.VISIBLE);
txt_user_name.setText(registerusermodel.getName());
txt_user_email.setText(registerusermodel.getEmail());
btn_logout.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editor.clear();
// editor.remove("user_id");
editor.commit();
startActivity(new Intent(DashboardActivity.this,LoginActivity.class));
finish();
}
});
}
}
private void prepareSideMenu() {
menu_list=findViewById(R.id.menu_list);
drawer_layout = findViewById(R.id.drawer_layout);
nav_view =findViewById(R.id.nav_view);
navList= Navigation_Control.prepareSideMenu(this);
side_menu = new NavAdapter(navList,this);
menu_list.setAdapter(side_menu);
menu_list.setonItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START);
}
new Navigation_Control(DashboardActivity.this,DashboardActivity.this).openActivity(navList.get(position).getName());
}
});
}
private void initNavFiels() {
img_nav=findViewById(R.id.img_nav);
//img_nav.setonClickListener(this);
img_nav.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START);
}
else
drawer_layout.openDrawer(GravityCompat.START);
}
});
}
@Override
public void onBackpressed() {
DrawerLayout drawer_layout =findViewById(R.id.drawer_layout);
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START);
}else {
super.onBackpressed();
}
}
}
MainListViewActivity.java(ListView和虚拟数据)
package com.example.recyclerexample;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.recyclerexample.nav_control.NavAdapter;
import com.example.recyclerexample.nav_control.NavModel;
import com.example.recyclerexample.nav_control.Navigation_Control;
import com.google.android.material.navigation.NavigationView;
import java.util.ArrayList;
public class MainListViewActivity extends AppCompatActivity {
ListView list_item;
ArrayList<usermodel> arrayList;
CustomAdapter customAdapter;
TextView txt_header;
//Navigation Drawer Deceleration
ImageView img_nav;
DrawerLayout drawer_layout;
ListView menu_list;
ArrayList<NavModel> navList;
NavAdapter side_menu;
NavigationView nav_view;
//Navigation Drawer Deceleration
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_list_view);
list_item=findViewById(R.id.list_item);
txt_header = findViewById(R.id.txt_header);
txt_header.setText("ListView");
arrayList = new ArrayList<>();
//Navigation Drawer Initialization and configuration
initNavFiels();
prepareSideMenu();
arrayList.add(new usermodel("Debjit",R.mipmap.ic_launcher)); //0
arrayList.add(new usermodel("Djit",R.mipmap.ic_launcher));//1 ...
arrayList.add(new usermodel("Dejit",R.mipmap.ic_launcher));
arrayList.add(new usermodel("Deit",R.mipmap.ic_launcher));
arrayList.add(new usermodel("Debji",R.mipmap.ic_launcher));
arrayList.add(new usermodel("Debt",R.mipmap.ic_launcher));
arrayList.add(new usermodel("jit",R.mipmap.ic_launcher));
arrayList.add(new usermodel("Dggebjit",R.mipmap.ic_launcher));
arrayList.add(new usermodel("Deblljit",R.mipmap.ic_launcher));
arrayList.add(new usermodel("Debxt",R.mipmap.ic_launcher));
arrayList.add(new usermodel("Deict",R.mipmap.ic_launcher));
customAdapter = new CustomAdapter(arrayList,MainListViewActivity.this);
list_item.setAdapter(customAdapter);
list_item.setonItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,long id) {
Intent intent = new Intent(MainListViewActivity.this,DetailsActivity.class);
intent.putExtra("user_name",arrayList.get(position).getName());
intent.putExtra("user_phone",arrayList.get(position).getPhone());
intent.putExtra("user_img",arrayList.get(position).getImg());
startActivity(intent);
}
});
}
private void prepareSideMenu() {
menu_list=findViewById(R.id.menu_list);
drawer_layout = findViewById(R.id.drawer_layout);
nav_view =findViewById(R.id.nav_view);
navList= Navigation_Control.prepareSideMenu(this);
side_menu = new NavAdapter(navList,long id) {
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START);
}
new Navigation_Control(MainListViewActivity.this,MainListViewActivity.this).openActivity(navList.get(position).getName());
}
});
}
private void initNavFiels() {
img_nav=findViewById(R.id.img_nav);
//img_nav.setonClickListener(this);
img_nav.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START);
}
else
drawer_layout.openDrawer(GravityCompat.START);
}
});
}
@Override
public void onBackpressed() {
DrawerLayout drawer_layout =findViewById(R.id.drawer_layout);
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START);
}else {
super.onBackpressed();
}
}
}
DataBaseHelping.java(sqlite类)
package com.example.recyclerexample;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteOpenHelper;
import android.widget.Toast;
import androidx.annotation.Nullable;
import java.util.ArrayList;
public class DatabaseHelping extends sqliteOpenHelper {
public static final String dbname = "userAccount.db";
public static final int dbVersion = 1;
public static final String tableName = "userTable";
public static final String column_Id="user_id";
public static final String column_Name="user_name";
public static final String column_Email="user_email";
public static final String column_Password="user_password";
Context context;
public DatabaseHelping(@Nullable Context context) {
super(context,dbname,null,dbVersion);
this.context = context;
}
@Override
public void onCreate(sqliteDatabase db) {
db.execsql("create table "+tableName+" ("+column_Id+" integer primary key autoincrement,"+column_Name +" text,"+
column_Email +" varchar,"+column_Password +" varchar)");
}
@Override
public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
db.execsql("drop table if exists "+tableName);
}
public void registerUser(Registerusermodel registerusermodel){
sqliteDatabase database = getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(column_Name,registerusermodel.getName());
contentValues.put(column_Email,registerusermodel.getEmail());
contentValues.put(column_Password,registerusermodel.getpassword());
long a= database.insert(tableName,contentValues);
Toast.makeText(context,String.valueOf(a),Toast.LENGTH_LONG).show();
}
public boolean loginUser(String email,String password){
String[] columns = {column_Id};
sqliteDatabase db = this.getReadableDatabase();
String selection = column_Email + " = ? " + " AND " + column_Password + " = ? ";
String[] selectionArgs = {email,password};
Cursor cursor = db.query(tableName,columns,selection,selectionArgs,null);
int cursorCount = cursor.getCount();
db.close();
if (cursorCount > 0) {
return true;
}
return false;
}
public ArrayList<Registerusermodel> getAllUser(){
sqliteDatabase sqliteDatabase=getReadableDatabase();
ArrayList<Registerusermodel> arrayList = new ArrayList<>();
String query = "SELECT * FROM " + tableName;
Cursor cursor = sqliteDatabase.rawQuery(query,null);
if (cursor.movetoFirst()) {
do {
Registerusermodel user = new Registerusermodel();
user.setName(cursor.getString(cursor.getColumnIndex(column_Name)));
user.setEmail(cursor.getString(cursor.getColumnIndex(column_Email)));
arrayList.add(user);
}while (cursor.movetoNext());
}
cursor.close();
sqliteDatabase.close();
return arrayList;
}
public Registerusermodel getUserDetails(String email) {
Registerusermodel usermodel = new Registerusermodel();
sqliteDatabase sqliteDatabase=getReadableDatabase();
Cursor cursor=sqliteDatabase.rawQuery("select * from " + tableName+" where "+column_Email+"=? ",new String[]{email});
if(cursor!=null) {
while (cursor.movetoNext()) {
//contact=cursor.getString(cursor.getColumnIndex(column_Name));
usermodel.setName(cursor.getString(cursor.getColumnIndex(column_Name)));
usermodel.setEmail(cursor.getString(cursor.getColumnIndex(column_Email)));
}
}
cursor.close();
sqliteDatabase.close();
return usermodel;
}
}
导航抽屉的工作方式:
1.NavAdapter.java:
package com.example.recyclerexample.nav_control;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.example.recyclerexample.R;
import java.util.ArrayList;
public class NavAdapter extends BaseAdapter {
ArrayList<NavModel> arrayList=new ArrayList<>();
Context context;
public NavAdapter(ArrayList<NavModel> al_menus,Context context) {
this.arrayList = al_menus;
this.context = context;
}
private class ViewHolder {
TextView txt_name;
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position,ViewGroup viewGroup) {
ViewHolder holder;
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (view == null) {
holder=new ViewHolder();
view = inflater.inflate(R.layout.row_item_slider,null);
holder.txt_name=view.findViewById(R.id.txt_name);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.txt_name.setText(arrayList.get(position).getName());
return view;
}
}
2。导航模型:
package com.example.recyclerexample.nav_control;
public class NavModel {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3。 Navigation_Control.java:
package com.example.recyclerexample.nav_control;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import com.example.recyclerexample.DashboardActivity;
import com.example.recyclerexample.MainListViewActivity;
import java.util.ArrayList;
public class Navigation_Control {
static Context con;
Activity a;
public Navigation_Control(Context con,Activity a)
{
this.con=con;
this.a=a;
}
public void openActivity(String name)
{
if(name.equalsIgnoreCase("ListViewExample"))
{
if(!(con instanceof MainListViewActivity))
{
Intent intent =new Intent(con,MainListViewActivity.class);
con.startActivity(intent);
}
}
else if(name.equalsIgnoreCase("RecyclerViewExample"))
{
if(!(con instanceof DashboardActivity))
{
Intent intent =new Intent(con,DashboardActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
con.startActivity(intent);
//a.overridePendingTransition(android.R.anim.slide_out_right,android.R.anim.slide_in_left);
if(!(con instanceof MainListViewActivity))
a.finish();
}
}
}
public static ArrayList<NavModel> prepareSideMenu(Activity act)
{
ArrayList<NavModel> al_menu_item;
NavModel side_menu=new NavModel();
al_menu_item=new ArrayList<>();
side_menu=new NavModel();
side_menu.setName("ListViewExample");
al_menu_item.add(side_menu);
side_menu=new NavModel();
side_menu.setName("RecyclerViewExample");
al_menu_item.add(side_menu);
return al_menu_item;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)