更新:感谢大家试图帮助我解决这个bug.我仍然不确定事情,我能够回滚到以前的承诺,并从那里继续发展.这个以前的提交确实显示了同样的错误,但是在我注释掉了button.performClick()之后,它已经消失了.奇怪的是,这并不适用于最近的提交.
我仍然不明白这个错误,并希望能帮助确定根本原因.我最大的恐惧是不经意地重新介绍它.
我曾经见过最疯狂的错误.
OnCreate方法被一再调用,冻结了我的应用程序,并给了我轻微的闪烁.然后,唯一的解决方案是退出到主屏幕,强制从设置菜单退出应用程序.
这是正在发生的细节:
>申请开始(主要活动)
>主要活动调用第二个活动
> Second Activity调用onCreate,设置正常
>第二个活动随机决定退出创建 – 我认为这是发生了什么
> Second Activity的onCreate再次被调用.它不会回到主要活动.
我运行了一个调试器,看来第二个活动成功完成了onComplete / onResume序列,然后决定退出并重启.
有没有人听说过这个行为?
我没有注意到抛出任何异常.此外,在调试过程中,我确实已经进行了检查,您所看到的那些位置是无声的. (这是较早的代码,然后我用print语句)
更新:当尝试停止该过程时,我必须打开飞行模式.这意味着它与这个代码块有关(Second Activity)
else if (Network.haveNetworkConnection(Login.getContext()) && Login.checkClientId()) {...}
没有互联网,它将打到else语句,不显示此行为.
码:
主要活动的onResume(),我称之为第二个活动:
@Override public void onResume() { super.onResume(); //Check If logged in,else go to login page Login.setContext(getApplicationContext()); //Reset Notification Number GCMIntentService.cancelNotifications(); /** GO TO LOGIN **/ if(!Login.isLoggedIn()) { //If user is not logged in,open login page System.out.println("RESUMING MAIN AND STARTING LOGIN INTENT"); Intent intent = new Intent(ActivityMain.this,ActivityLogin.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else { Login.setupStuffOnce(); Event.pullEvents(); //Get New Events //Update ListView updateMainFeed(); } }
这是第二个活动:
public class ActivityLogin extends Activity { private String postData; //private Context c; //final Timer timer = new Timer(); //Facebook Stuff private Facebook facebook = new Facebook(Config.FBAPPID); private AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); //Layout Stuff EditText username,password; Button loginButton,signupButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Open Database Login.setContext(getApplicationContext()); Database.open(getApplicationContext()); } /* * @Override public void onPause() { s } */ @Override public void onResume() { super.onResume(); // shouldn't put here but oh well init(); //If coming from ActivitySignup if(Transfer.username != null) { username.setText(Transfer.username); password.setText(Transfer.password); Transfer.password = null; Transfer.username = null; loginButton.performClick(); } } public void init() { Login.getUserLoggedIn(); if (Login.isLoggedIn()) { //Do Any Additional Setup Login.setupStuffOnce(); // If user is logged in,open main Intent intent = new Intent(ActivityLogin.this,ActivityMain.class); //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else if (Network.haveNetworkConnection(Login.getContext()) && Login.checkClientId()) { // Else,Make User Login // Inflate Login and Present Website String clientid = Login.getClientId(); System.out.println("clientid:" + clientid); //System.exit(0); postData = "mobile=1&client_id="+Login.getClientId(); // Inflate the view setContentView(R.layout.activitylogin3); username = (EditText) findViewById(R.id.username); password = (EditText) findViewById(R.id.password); //Inflate the Button loginButton = (Button) findViewById(R.id.loginButton); signupButton = (Button) findViewById(R.id.signupButton); signupButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ActivityLogin.this,ActivitySignup.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); } }); loginButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { int res = Login.sendLogin(username.getText().toString(),password.getText().toString()); if(res == 202) { //Login Successful //Check if facebooked. if(Login.isFacebooked()) { //Just go to main Intent intent = new Intent(ActivityLogin.this,ActivityMain.class); //Are these flags necessary? //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else { //Go to facebook login page //Intent intent = new Intent(ActivityLogin.this,ActivityFBLogin.class); //startActivity(intent); //Login via Facebook doFacebook(); } } else { System.out.println("Login Failed: "+res); if(res == 405) { Toast.makeText(getApplicationContext(),"Incorrect Username/Password",Toast.LENGTH_SHORT).show(); password.setText(""); } else Toast.makeText(getApplicationContext(),"Network Error",Toast.LENGTH_SHORT).show(); //Not entirely true in all cases i think } /*Login.getUserLoggedIn(); if(Login.isLoggedIn()) { Intent intent = new Intent(ActivityLogin.this,ActivityMain.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else { Toast.makeText(getApplicationContext(),"Please Login Above",Toast.LENGTH_SHORT).show(); }*/ } }); } else { // Not Logged In and No Internet Access setContentView(R.layout.activitylogintext); EditText text = (EditText) findViewById(R.id.text); text.setText("No Internet Connection Detected\n requires internet to login"); Button button = (Button) findViewById(R.id.refreshButton); button.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { //Login.getUserLoggedIn(); if(Network.haveNetworkConnection(Login.getContext())) { Intent intent = new Intent(ActivityLogin.this,ActivityLogin.class); //intent.setFlags(); startActivity(intent); } else { Toast.makeText(getApplicationContext(),"No Internet Access Detected",Toast.LENGTH_SHORT).show(); } } }); } } @Override public void onActivityResult(int requestCode,int resultCode,Intent data) { super.onActivityResult(requestCode,resultCode,data); facebook.authorizeCallback(requestCode,data); } public void doFacebook() { facebook.authorize(this,Config.facebookPermissions,new DialogListener() { @Override public void onComplete(Bundle values) { /*SharedPreferences.Editor editor = state.edit(); editor.putString("access_token",facebook.getAccessToken()); editor.putLong("access_expires",facebook.getAccessExpires()); editor.commit(); */ //Input into database Login.saveAccessToken(facebook.getAccessToken()); Login.setFB(facebook.getAccessToken()); //Login.sendAccessToken(facebook.getAccessToken()); //Intent into Main Activity Intent intent = new Intent(ActivityLogin.this,ActivityMain.class); //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } @Override public void onFacebookError(FacebookError error) { Toast.makeText(getApplicationContext(),"Error: "+error.getErrorType(),Toast.LENGTH_SHORT).show(); } @Override public void onError(DialogError e) { Toast.makeText(getApplicationContext(),"Error: "+e.getMessage(),Toast.LENGTH_SHORT).show(); } @Override public void onCancel() {} }); } public boolean checkForUserID(Context c) { try{ String res = Network.getUrl("www.website.com/mobile.PHP?got_user=1&client_id="+Login.getClientId()); JSONObject json = JSON.constructObject(res); if(JSON.handleCode(json)) { if(json.getString("type").equals("userid")) { Login.setLogin(json.getString("data")); return true; } } } catch(Exception e) { //Silent Fail } return false; } }