当transferwd对象调用可序列化类时,应用程序崩溃

时间:2015-07-26 19:08:02

标签: android android-intent

package com.example.praduman.humlog;

import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Parcelable;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import com.parse.Parse;
import java.io.Serializable;


public class HomeActivity extends ActionBarActivity {

    private HumLogController humLogController;
    private Intent logInActivityIntent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        humLogController = new HumLogController();   

        logInActivityIntent = new Intent(this , LogInActivity.class);
        logInActivityIntent.putExtra("controllerObject", humLogController);
        startActivity(logInActivityIntent);
}
}

我将humLogController的{​​{1}}实例传递给intent,当我通过传递对象调用方法LogInActivity时,应用程序崩溃了。其他一切都很好。

createNewUser()

这是控制器类,它实现package com.example.praduman.humlog; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.view.View.OnClickListener; import android.widget.Toast; public class LogInActivity extends ActionBarActivity { private Button signUpButton; private Button logInButton; private Intent signUpChoiceIntent; private HumLogController humLogController; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_log_in); humLogController = (HumLogController)getIntent().getSerializableExtra("controllerObject"); humLogController.createNewUser(); setIntentAndButton(); } private void setIntentAndButton(){ signUpChoiceIntent = new Intent (this , SignUpChoiceActivity.class); signUpChoiceIntent.putExtra("controllerObject", humLogController); logInButton = (Button) findViewById(R.id.logInSignInButton); signUpButton= (Button) findViewById(R.id.logInSignUpButton); setActionListeners(); } private void setActionListeners(){ logInButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(LogInActivity.this, "hope this will work" , Toast.LENGTH_LONG).show(); } }); signUpButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(signUpChoiceIntent); } }); } } ,而不是Serializable,如果我通过公开它来调用其中一个变量,如用户名或密码。它工作,但当我调用该方法时,它崩溃了。是的,createNewUser()没有问题,我对此进行了测试。

humLogModel

1 个答案:

答案 0 :(得分:1)

您已将humLogModel标记为transient,因此不会将其序列化,并且在您的新活动中制作的副本中将为null

请注意your constructor will not be used for the de-serialized copy

  

反序列化过程不使用对象的构造函数 - 在没有构造函数的情况下实例化对象,并使用序列化实例数据进行初始化。

因此,由于您没有序列化humLogModel,并且您的构造函数没有机会填充humLogModel,因此当您使用它时humLogModelnull