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
答案 0 :(得分:1)
您已将humLogModel
标记为transient
,因此不会将其序列化,并且在您的新活动中制作的副本中将为null
。
请注意your constructor will not be used for the de-serialized copy:
反序列化过程不使用对象的构造函数 - 在没有构造函数的情况下实例化对象,并使用序列化实例数据进行初始化。
因此,由于您没有序列化humLogModel
,并且您的构造函数没有机会填充humLogModel
,因此当您使用它时humLogModel
为null
。