Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试调用getSerializableExtra()方法(该方法有效)后的Android-NullPointerException_Android_Serialization_Nullpointerexception - Fatal编程技术网

尝试调用getSerializableExtra()方法(该方法有效)后的Android-NullPointerException

尝试调用getSerializableExtra()方法(该方法有效)后的Android-NullPointerException,android,serialization,nullpointerexception,Android,Serialization,Nullpointerexception,我试图了解Java序列化是如何工作的,因此我试图在我自己的Android应用程序中添加一种可能性,即传输两个字符串(准确地说是名字和姓氏),然后在另一个活动中显示一条简单的“欢迎”消息,其中包含两个字符串。 事情开始变得非常奇怪,因为我实际上设法传输了两个字符串,但是当涉及到显示它们时。。我“失去”它们,我得到一个空点异常 不管怎样,代码如下: MainActivity.java public class MainActivity extends AppCompatActivity {

我试图了解Java序列化是如何工作的,因此我试图在我自己的Android应用程序中添加一种可能性,即传输两个字符串(准确地说是名字和姓氏),然后在另一个活动中显示一条简单的“欢迎”消息,其中包含两个字符串。 事情开始变得非常奇怪,因为我实际上设法传输了两个字符串,但是当涉及到显示它们时。。我“失去”它们,我得到一个空点异常

不管怎样,代码如下:

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private Button personalData;
    protected String strUsername;
    private boolean isProfileReady;
    TextView welcome;
    protected SharedPreferences loginData;
    SharedPreferences wizardPrefs;
    SharedPreferences.Editor wizardEditor;
    DataUser userData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        welcome = (TextView) findViewById(R.id.welcome);
        personalData = (Button) findViewById(R.id.data);
        personalData.setText("Personal Data");
        personalData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, WizardActivity.class);
                intent.putExtra("profileReady", isProfileReady);
                startActivity(intent);
            }
        });
        loginData = getSharedPreferences("UserPrefs", MODE_PRIVATE);
        wizardPrefs = this.getSharedPreferences("USERDATA", MODE_PRIVATE);
        String value = loginData.getString("Username", null);
        welcome.setText("Welcome " + loginData.getString("Username", strUsername) + "!");
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode == RESULT_OK) {
            isProfileReady = true;
            personalData.setText("My Profile");
            welcome.setText("Welcome " + userData.getStrFName() + " " + userData.getStrLName() + "!");
        }

    }

}
public class WizardActivity extends AppCompatActivity implements SummaryFragment.Images {

    public DataUser userData;

    //region Variables
    Button go;
    WizardOne wizOne;
    WizardTwo wizTwo;
    WizardThree wizThree;
    SummaryFragment summaryFragment;
    Bitmap frontBitmap, backBitmap;
    SharedPreferences wizardPrefs;
    Bundle bundle = new Bundle();
    String pathOne, pathTwo;

    int currentPage = 1;

    public static final String FRONT_BITMAP_KEY = "frontBitmap", BACK_BITMAP_KEY = "backBitmap";

    boolean isProfileReady;
    //endregion

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        userData = new DatiUtente();
        isProfileReady = getIntent().getBooleanExtra("profileReady", false);

        Toast.makeText(this, "profileReady : " + isProfileReady, Toast.LENGTH_SHORT).show();

        setContentView(R.layout.wizard_layout);
        go = (Button) findViewById(R.id.go);

        if (isProfileReady) {
            currentPage = 4;
            go.setText("Home");
            wizardPrefs = this.getSharedPreferences("USERDATA", MODE_PRIVATE);
            summaryFragment = new SummaryFragment();
            summaryFragment.setArguments(bundle);
            getSupportFragmentManager().beginTransaction().add(R.id.activity_layout, summaryFragment).commit();
        } else {
            wizOne = new WizardOne(userData);
            if (savedInstanceState == null)
                getSupportFragmentManager().beginTransaction().add(R.id.activity_layout, wizOne).commit();
        }

        go.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isProfileReady) {
                    Intent intent = new Intent();
                    setResult(RESULT_OK, intent);
                    finish();
                } else {
                    nextFragment();
                }
            }
        });
    }

    public void nextFragment() {

        switch (currentPage) {

            case 1:
                if (wizOne.validate()) {

                    wizTwo = new WizardTwo();
                    changeFragment(wizTwo, R.id.activity_layout);
                    currentPage++;
                } else {
                    Toast.makeText(getApplicationContext(), "Riempire i campi", Toast.LENGTH_SHORT).show();
                }
                break;

            case 2:
                if (wizTwo.validate()) {
                    wizThree = new WizardThree(getApplicationContext());
                    changeFragment(wizThree, R.id.activity_layout);
                    currentPage++;
                } else {
                    Toast.makeText(getApplicationContext(), "Riempire i campi", Toast.LENGTH_SHORT).show();
                }
                break;

            case 3:
                if (wizThree.validate()) {
                    bundle.putParcelable("frontBitmap", wizThree.getFrontBitmap());
                    bundle.putParcelable("backBitmap", wizThree.getBackBitmap());
                    summaryFragment = new SummaryFragment();
                    summaryFragment.setArguments(bundle);
                    go.setText("Home");
                    changeFragment(summaryFragment, R.id.activity_layout);
                    currentPage++;
                }
                break;

            case 4:
                passImages();
              //  setResult(RESULT_OK);
                Intent intent = new Intent(this, SerializableWelcome.class);
                intent.putExtra("dataUser", userData);
                startActivity(intent);
             //   finish();
                break;

            default:
                break;

        }
    }


    public void changeFragment(ValidateFragment f, int resource) {

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(resource, f);
        transaction.addToBackStack(null);
        transaction.commit();

    }

    public Bitmap getFrontBitmap() {
        return frontBitmap;
    }

    public Bitmap getBackBitmap() {
        return backBitmap;
    }

    @Override
    public void onBackPressed() {

        if (currentPage > 1) {
            currentPage--;
            getSupportFragmentManager().popBackStack();
        } else {
            super.onBackPressed();
        }

    }

    @Override
    public Bundle passImages() {
        bundle.getParcelable("frontBitmap");
        bundle.getParcelable("backBitmap");
        return bundle;
    }
}
WizardActivity.java

public class MainActivity extends AppCompatActivity {

    private Button personalData;
    protected String strUsername;
    private boolean isProfileReady;
    TextView welcome;
    protected SharedPreferences loginData;
    SharedPreferences wizardPrefs;
    SharedPreferences.Editor wizardEditor;
    DataUser userData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        welcome = (TextView) findViewById(R.id.welcome);
        personalData = (Button) findViewById(R.id.data);
        personalData.setText("Personal Data");
        personalData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, WizardActivity.class);
                intent.putExtra("profileReady", isProfileReady);
                startActivity(intent);
            }
        });
        loginData = getSharedPreferences("UserPrefs", MODE_PRIVATE);
        wizardPrefs = this.getSharedPreferences("USERDATA", MODE_PRIVATE);
        String value = loginData.getString("Username", null);
        welcome.setText("Welcome " + loginData.getString("Username", strUsername) + "!");
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode == RESULT_OK) {
            isProfileReady = true;
            personalData.setText("My Profile");
            welcome.setText("Welcome " + userData.getStrFName() + " " + userData.getStrLName() + "!");
        }

    }

}
public class WizardActivity extends AppCompatActivity implements SummaryFragment.Images {

    public DataUser userData;

    //region Variables
    Button go;
    WizardOne wizOne;
    WizardTwo wizTwo;
    WizardThree wizThree;
    SummaryFragment summaryFragment;
    Bitmap frontBitmap, backBitmap;
    SharedPreferences wizardPrefs;
    Bundle bundle = new Bundle();
    String pathOne, pathTwo;

    int currentPage = 1;

    public static final String FRONT_BITMAP_KEY = "frontBitmap", BACK_BITMAP_KEY = "backBitmap";

    boolean isProfileReady;
    //endregion

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        userData = new DatiUtente();
        isProfileReady = getIntent().getBooleanExtra("profileReady", false);

        Toast.makeText(this, "profileReady : " + isProfileReady, Toast.LENGTH_SHORT).show();

        setContentView(R.layout.wizard_layout);
        go = (Button) findViewById(R.id.go);

        if (isProfileReady) {
            currentPage = 4;
            go.setText("Home");
            wizardPrefs = this.getSharedPreferences("USERDATA", MODE_PRIVATE);
            summaryFragment = new SummaryFragment();
            summaryFragment.setArguments(bundle);
            getSupportFragmentManager().beginTransaction().add(R.id.activity_layout, summaryFragment).commit();
        } else {
            wizOne = new WizardOne(userData);
            if (savedInstanceState == null)
                getSupportFragmentManager().beginTransaction().add(R.id.activity_layout, wizOne).commit();
        }

        go.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isProfileReady) {
                    Intent intent = new Intent();
                    setResult(RESULT_OK, intent);
                    finish();
                } else {
                    nextFragment();
                }
            }
        });
    }

    public void nextFragment() {

        switch (currentPage) {

            case 1:
                if (wizOne.validate()) {

                    wizTwo = new WizardTwo();
                    changeFragment(wizTwo, R.id.activity_layout);
                    currentPage++;
                } else {
                    Toast.makeText(getApplicationContext(), "Riempire i campi", Toast.LENGTH_SHORT).show();
                }
                break;

            case 2:
                if (wizTwo.validate()) {
                    wizThree = new WizardThree(getApplicationContext());
                    changeFragment(wizThree, R.id.activity_layout);
                    currentPage++;
                } else {
                    Toast.makeText(getApplicationContext(), "Riempire i campi", Toast.LENGTH_SHORT).show();
                }
                break;

            case 3:
                if (wizThree.validate()) {
                    bundle.putParcelable("frontBitmap", wizThree.getFrontBitmap());
                    bundle.putParcelable("backBitmap", wizThree.getBackBitmap());
                    summaryFragment = new SummaryFragment();
                    summaryFragment.setArguments(bundle);
                    go.setText("Home");
                    changeFragment(summaryFragment, R.id.activity_layout);
                    currentPage++;
                }
                break;

            case 4:
                passImages();
              //  setResult(RESULT_OK);
                Intent intent = new Intent(this, SerializableWelcome.class);
                intent.putExtra("dataUser", userData);
                startActivity(intent);
             //   finish();
                break;

            default:
                break;

        }
    }


    public void changeFragment(ValidateFragment f, int resource) {

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(resource, f);
        transaction.addToBackStack(null);
        transaction.commit();

    }

    public Bitmap getFrontBitmap() {
        return frontBitmap;
    }

    public Bitmap getBackBitmap() {
        return backBitmap;
    }

    @Override
    public void onBackPressed() {

        if (currentPage > 1) {
            currentPage--;
            getSupportFragmentManager().popBackStack();
        } else {
            super.onBackPressed();
        }

    }

    @Override
    public Bundle passImages() {
        bundle.getParcelable("frontBitmap");
        bundle.getParcelable("backBitmap");
        return bundle;
    }
}
SerializableWelcome.java

public class SerializableWelcome extends AppCompatActivity {

    TextView showName;
    DataUser userData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_services_main);

        showName = (TextView) findViewById(R.id.welcomeFromSummary);
        Intent intent = getIntent();
        if (intent != null) {
            userData = (DataUser) intent.getSerializableExtra("dataUser");
        }
        showName.setText("Welcome " + userData.getStrFName() + " " + userData.getStrLName() + "!");
    }
}
DataUser.java

public class DataUser implements Parcelable {

    String strFName, strLName, strFisCode, strBirth, strCity, strZip, strProv, strCC, strIban, strMail;

    public DataUser(){}

    protected DataUser(Parcel in) {

        //region in.readString()
        strFName = in.readString();
        strLName = in.readString();
        strFisCode = in.readString();
        strBirth = in.readString();
        strCity = in.readString();
        strZip = in.readString();
        strProv = in.readString();
        strCC = in.readString();
        strIban = in.readString();
        strMail = in.readString();
        //endregion

    }

    public static final Creator<DataUser> CREATOR = new Creator<DataUser>() {
        @Override
        public DataUser createFromParcel(Parcel in) {
            return new DataUser(in);
        }

        @Override
        public DataUser[] newArray(int size) {
            return new DataUser[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {

        //region dest.writeString()
        dest.writeString(strFName);
        dest.writeString(strLName);
        dest.writeString(strFisCode);
        dest.writeString(strBirth);
        dest.writeString(strCity);
        dest.writeString(strZip);
        dest.writeString(strProv);
        dest.writeString(strCC);
        dest.writeString(strIban);
        dest.writeString(strMail);
        //endregion

    }

    //region Getter and Setter
    public String getStrFName() {
        return strFName;
    }

    public void setStrFName(String strFName) {
        this.strFName = strFName;
    }

    public String getStrLName() {
        return strLName;
    }

    public void setStrLName(String strLName) {
        this.strLName = strLName;
    }

    public String getStrFisCode() {
        return strFisCode;
    }

    public void setStrFisCode(String strFisCode) {
        this.strFisCode = strFisCode;
    }

    public String getStrBirth() {
        return strBirth;
    }

    public void setStrBirth(String strBirth) {
        this.strBirth = strBirth;
    }

    public String getStrCity() {
        return strCity;
    }

    public void setStrCity(String strCity) {
        this.strCity = strCity;
    }

    public String getStrZip() {
        return strZip;
    }

    public void setStrZip(String strZip) {
        this.strZip = strZip;
    }

    public String getStrProv() {
        return strProv;
    }

    public void setStrProv(String strProv) {
        this.strProv = strProv;
    }

    public String getStrCC() {
        return strCC;
    }

    public void setStrCC(String strCC) {
        this.strCC = strCC;
    }

    public String getStrIban() {
        return strIban;
    }

    public void setStrIban(String strIban) {
        this.strIban = strIban;
    }

    public String getStrMail() {
        return strMail;
    }

    public void setStrMail(String strMail) {
        this.strMail = strMail;
    }
    //endregion

}
公共类DataUser实现可包裹{
字符串strFName、strLName、strficode、strberth、strCity、strZip、strProv、strCC、strIban、strMail;
公共数据用户(){}
受保护的数据用户(包裹中){
//readString()中的区域
strFName=in.readString();
strLName=in.readString();
strficode=in.readString();
strBirth=in.readString();
strCity=in.readString();
strZip=in.readString();
strProv=in.readString();
strc=in.readString();
strIban=in.readString();
strMail=in.readString();
//端区
}
公共静态最终创建者=新创建者(){
@凌驾
公共数据用户createFromParcel(中的地块){
返回新的数据用户(in);
}
@凌驾
公共数据用户[]新数组(整数大小){
返回新的数据用户[大小];
}
};
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
//区域目标写入限制()
目的地记录(strFName);
目的地记录(strLName);
目的写入码(strFisCode);
目的地书面资源(斯特尔伯特);
目的地书面资本(strCity);
目的地记录(strZip);
目的地书面记录(strProv);
目的地书面资本(strCC);
目的地书面限制(strIban);
目的地书面记录(标准邮件);
//端区
}
//区域Getter和Setter
公共字符串getStrFName(){
返回strFName;
}
public void setStrFName(字符串strFName){
this.strFName=strFName;
}
公共字符串getStrLName(){
返回strLName;
}
public void setStrLName(字符串strLName){
this.strLName=strLName;
}
公共字符串getstrficode(){
返回strficode;
}
public void setStrFisCode(字符串strFisCode){
this.strFisCode=strFisCode;
}
公共字符串getStrBirth(){
返回strberth;
}
公共void setStrBirth(字符串strBirth){
this.strberth=strberth;
}
公共字符串getStrCity(){
回报率;
}
公共void setStrCity(字符串结构){
this.strCity=strCity;
}
公共字符串getStrZip(){
返回strZip;
}
公共void setStrZip(字符串strZip){
this.strZip=strZip;
}
公共字符串getStrProv(){
返回strProv;
}
公共void setStrProv(字符串strProv){
this.strProv=strProv;
}
公共字符串getStrCC(){
返回strc;
}
公共无效设置TRCC(字符串strCC){
this.strc=strc;
}
公共字符串getStrIban(){
返回斯特里班;
}
公共无效设置strIban(字符串strIban){
this.strIban=strIban;
}
公共字符串getStrMail(){
返回标准邮件;
}
公共无效setStrMail(字符串strMail){
this.strMail=strMail;
}
//端区
}

这是您应该如何传递和拉动包裹对象:

// Pass
Intent i = new Intent();
i.putExtra("name_of_extra", myParcelableObject);

// and then pull them:
Intent i = getIntent();
MyParcelable myParcelableObject = (MyParcelable) i.getParcelableExtra("name_of_extra");

DataUser
不是
Serializable
而是…
getparcelableextra
@Spartan谢谢!)我想这从一开始就是个愚蠢的问题。。D: