当我从android的导航抽屉中更改活动时,为什么Bundle类返回空值?

问题描述

所以,我正在使用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 (将#修改为@)