I have three activites A,B and C,now what i am doing is,From Activity A i am sending one data to B
Activity B
Intent intent=getIntent();
userids= intent.getStringExtra("userid");
System.out.println("USERID BC"+userids);
pname = intent.getStringExtra("names");
occasions = intent.getStringExtra("oca");
System.out.println("OC BC"+occasions);
pics = intent.getStringExtra("photo");
dates = intent.getStringExtra("datess");
realtions = intent.getStringExtra("realations");
friendid = intent.getStringExtra("friendid");
System.out.println("Frnd BC"+friendid+userids);
sendgift=(ImageView)findViewById(R.id.wishfriend_sendgift);
ImageView propic=(ImageView)findViewById(R.id.wishfriend_propic);
username=(TextView)findViewById(R.id.wishfriend_name);
ocasions=(TextView)findViewById(R.id.wishfriend_occasion);
datess=(TextView)findViewById(R.id.wishfriend_dates);
pointshori=(HorizontalScrollView)findViewById(R.id.pointshori);
yourLayout = (LinearLayout)findViewById(R.id.linearhori);
selectedpoints=(TextView)findViewById(R.id.wishfrindselectdpoints);
username.setText(pname);
ocasions.setText(occasions);
datess.setText("Date: " + dates);
aQuery.id(propic).image(pics, true, true, 0, R.drawable.male);
PLACE_URL = "http:///webservices/wish_friend.php?user_id="+userids+"&det="+friendid+"&occ="+ URLEncoder.encode(realtions);
WISHU_URL = "http:///webservices/wish_friend.php?user_id="+userids;
sendgift.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
if(edtmessages.getText().toString().trim().equals(""))
{
Toast.makeText(getApplicationContext(),"Enter Message",Toast.LENGTH_SHORT).show();
}
else if(giftpointss.toString().equals("0"))
{
Toast.makeText(getApplicationContext(),"Sorry you can not gift with 0 points",Toast.LENGTH_SHORT).show();
}
else
{
new AttemptLogin().execute();
}
}
});
new LoadAllPreset().execute();
new LoadPlacestatus().execute();
that is working fine,now i am going to B to C,but when i come back from C to B my app got crash,,getting null pointer exception
here
PLACE_URL = "http:///webservices/wish_friend.php?user_id="+userids+"&det="+friendid+"&occ="+ URLEncoder.encode(realtions);
Just check before accessing intent data
if( getIntent().getExtras() != null){
// intent has data
Intent intent=getIntent();
userids= intent.getStringExtra("userid");
...
}
else
{
//probably you are from C->B after back press
}
Related
I want to calculate the total in the mainActivity and pass it to the second Activity using explicit intent,
i tried this way but id doesn't work, i want to know how to pass the calculated total to the secondActivity
and this is the code:
TextView result_total_Last;
public void calculateTotal(View view) {
EditText number = findViewById(R.id.number_user);
int num = Integer.parseInt(number.getText().toString());
String result_total;
if (radio_days.isChecked()) {
result_total = (""+ (num * 50) );
} else {
result_total = (""+ (num * 1000) );
}
result_total_Last.setText("the total is" + result_total);
}
// and this is the on click method that used to pass to second activity
book_btn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
if (ValidateEmailAddress(email)) {
//create intent to pass the values//
String result_intent = result_total_Last.getText().toString();
Intent intent = new Intent(MainActivity.this, Confirmation_interface.class);
intent.putExtra("total", result_intent);
startActivity(intent);
}
}
});
//code of second activity
Intent intent = getIntent();
String total = intent.getStringExtra("total");
TextView Total_result = findViewById(R.id.Total_ET);
Total_result.setText(total);
}
}
Try receiving like this
String total = getIntent().getExtras().getString("total","defaultIfNotPassed");
When I receive push notification and click on it my app opens and stops on blank white screen with only empty toolbar.
It happens not always and only when app long time in background and not killed by system.
Clicking on running apps and selecting my app helps continue loading only
When app killed and opens from cold it works correct. When app recently collapsed it also works correct and opens from push
Thanks
Activity attributes:
[MvxActivityPresentation]
[Activity(
AlwaysRetainTaskState = true,
Label = "MyPushApp",
LaunchMode = LaunchMode.SingleTop,
Theme = "#style/Theme.MyTheme",
ScreenOrientation = ScreenOrientation.User)]
public class MainActivity : ExtendedDrawerActivity<MenuVM>, ITabletActivity
Activity OnResume():
protected override void OnResume()
{
base.OnResume();
if (ViewModel.InitializeTask.IsSuccessfullyCompleted && CheckIntentForPushNotification())
{
ViewModel.PushReceived = false;
OpenPushNotification();
}
CheckIntentForPushNotification():
protected bool CheckIntentForPushNotification()
{
return Intent != null && Intent.Extras != null && (Intent.HasExtra(MyFirebaseMessagingService.NotificationBodyTag) || Intent.HasExtra(CheckNotificationsService.LocalNotificationTag));
}
OpenPushNotification():
private void OpenPushNotification()
{
if (ViewModel.PushReceived || Intent == null)
{
_log.Info("ViewModel.PushReceived || Intent == null");
return;
}
if (Intent.HasExtra(MyFirebaseMessagingService.NotificationBodyTag))
{
string notificationText = Intent.GetStringExtra(MyFirebaseMessagingService.NotificationBodyTag);
string objIds = Intent.GetStringExtra(MyFirebaseMessagingService.ObjectIdTag);
string objType = Intent.GetStringExtra(MyFirebaseMessagingService.ObjectTypeTag);
string objSubtype = Intent.GetStringExtra(MyFirebaseMessagingService.ObjectSubtypeTag);
string moduleType = Intent.GetStringExtra(MyFirebaseMessagingService.ModuleTypeTag);
string notificationType = Intent.GetStringExtra(MyFirebaseMessagingService.NotificationTypeTag);
string folderId = Intent.GetStringExtra(MyFirebaseMessagingService.FolderIdTag);
List<int> ids = objIds?.Split(',')?.Select(id => int.Parse(id))?.ToList();
Mvx.IoCProvider.Resolve<IMvxMessenger>().Publish(new MainPushMessage(this)
{
Text = notificationText,
AppLaunchedByNotification = _startWithNotification,
NotificationTypeId = string.IsNullOrEmpty(notificationType) ? 0 : Int32.Parse(notificationType),
FolderId = string.IsNullOrEmpty(folderId) ? 0 : Int32.Parse(folderId),
ObjectIds = ids ?? new List<int>(),
ObjectType = objType,
ObjectSubtype = objSubtype,
});
}
if (Intent.HasExtra(CheckNotificationsService.LocalNotificationTag))
{
Mvx.IoCProvider.Resolve<IMvxMessenger>().Publish(new MainPushMessage(this)
{
IsLocalNotification = true
});
}
Intent = null;
}
Activity OnNewIntent():
protected override void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
Intent = intent;
}
I have RegisterPage and LoginPage. When the app is run, it will check whether the app is first time run or not in RegisterPage. If it is first time run and the save button is not clicked, it will in RegisterPage. If it is run second times but the save button is never clicked, it will remain in RegisterPage too. Otherwise it will go to LoginPage.
Here my updated code
Register
appGetFirstTimeRun();
boolean clicked=false;
buttonSave.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
clicked=true;
int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
appPreferences.edit().putInt("app_second_time",
appCurrentBuildVersion).apply();
String name = editTextName.getText().toString();
String pass = editTextPassword.getText().toString();
String confirm = editTextConfirm.getText().toString();
if ((editTextName.getText().toString().trim().length() == 0) || (editTextPassword.getText().toString().trim().length() == 0) || (editTextConfirm.getText().toString().trim().length() == 0)) {
Toast.makeText(getApplicationContext(), "Field cannot be null", Toast.LENGTH_LONG).show();
}
else
{
insertData(name, pass, imageUri); // insert to SQLite
Intent intent = new Intent(MainActivity.this, AddMonthlyExpenses.class);
intent.putExtra("name", name);
startActivity(intent);
}
}
});
private int appGetFirstTimeRun() {
//Check if App Start First Time
SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
int appLastBuildVersion = appPreferences.getInt("app_first_time", 0);
if (appLastBuildVersion == appCurrentBuildVersion && clicked) {
Intent intent = new Intent(MainActivity.this,LoginPage.class);
startActivity(intent);
return 1;
} else {
appPreferences.edit().putInt("app_first_time",
appCurrentBuildVersion).apply();
if (appLastBuildVersion == 0) {
Toast.makeText(getApplicationContext(), "First time", Toast.LENGTH_SHORT).show();
return 0; //es la primera vez
} else {
return 2; //es una versión nueva
}
}
}
The problem is when I click the save button and exit from the app. When I run the app again it still in the RegisterPage, not in LoginPage.
Check button click after inserting data into SQLite, So you can confirm that your data has successfully saved and you can proceed to next screen.
Find my comments in below code and edit your code:-
public class Register extends AppCompatActivity {
Button buttonSave;
boolean clicked=false;//remove this
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
appGetFirstTimeRun();//call this method here
buttonSave=(Button)findViewById(R.id.button);
buttonSave.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
clicked=true;//remove this
int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
appPreferences.edit().putInt("app_second_time", appCurrentBuildVersion).apply();
String name = editTextName.getText().toString();
String pass = editTextPassword.getText().toString();
String confirm = editTextConfirm.getText().toString();
if ((editTextName.getText().toString().trim().length() == 0) || (editTextPassword.getText().toString().trim().length() == 0) || (editTextConfirm.getText().toString().trim().length() == 0)) {
Toast.makeText(getApplicationContext(), "Field cannot be null", Toast.LENGTH_LONG).show();
}
else
{
insertData(name, pass, imageUri); // insert to SQLite
appPreferences.edit().putBoolean("btn_clicked", true).apply();//add this line
Intent intent = new Intent(Register.this, AddMonthlyExpenses.class);
intent.putExtra("name", name);
startActivity(intent);
}
}
});
}
private int appGetFirstTimeRun() {
//Check if App Start First Time
SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
int appLastBuildVersion = appPreferences.getInt("app_first_time", 0);
boolean is_btn_click=appPreferences.getBoolean("btn_clicked",false);//add this line
if ((appLastBuildVersion == appCurrentBuildVersion) && is_btn_click) { //edit this line like this
Intent intent = new Intent(Register.this,LoginPage.class);
startActivity(intent);
return 1;
} else {
appPreferences.edit().putInt("app_first_time",
appCurrentBuildVersion).apply();
if (appLastBuildVersion == 0) {
Toast.makeText(getApplicationContext(), "First time", Toast.LENGTH_SHORT).show();
return 0; //es la primera vez
} else {
return 2; //es una versión nueva
}
}
}
}
you are depending on SharedPreferences as well as on clicked variable, you can depend on SharePreferences but not on variable because on each run you are setting clicked value to false.
1) Save current version in preference when button is clicked
appPreferences.edit().putInt("app_first_time",
appCurrentBuildVersion).apply();
2) save clicked value in preference when button is clicked
appPreferences.edit().putBoolean("clicked",
true).apply();
Now inside your appGetFirstTimeRun() fetch the value of version and clicked from SharedPreferences
int appLastBuildVersion = appPreferences.getInt("app_first_time", 0);
boolean clicked = appPreferences.getBoolean("clicked", false);
You also need to change the shared preferences value on click of save button. Then only next time when you open the app appGetFirstTimeRun method will load the Login page.
In you btnSave click listener where you are starting intent for activity just before startActivity add this code
int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
appPreferences.edit().putInt("app_first_time",
appCurrentBuildVersion).apply();
in start of onCreate(); method, call checkStages();
in end of buttonSave.onClick() method, call Prefs.putStage(this, 1); followed by checkStages();
/*Prefs.getStage(this) default value is 0*/
public void checkStages() {
switch(Prefs.getStage(this)) {
case 1: //Login Page
startActivity(new Intent(this, LoginPage.class));
finish();
break;
default:
break;
}
}
This is the sample Android Application Template I use, to write any of my Android App.
You can get the Prefs class from this project
add this code to your splash screen
SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(context);
boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", false);
if (!isFirstRun) {
startActivity(new Intent(context,RegirstorActivity.class));
}else{
startActivity(new Intent(context,LoginActivty.class));
}
so basically it will decide Is it first time (user registered) or not, after registration update the SharedPreferences
your are using click variable to identify if button is clicked or not but when you exist from the app and again then click value reset to false so instead of saving value in click variable you can use shared preference to save value true or false on button click and get value from shared preference to check
on click of save button
appPreferences.edit().putInt("app_second_time",
appCurrentBuildVersion).apply();
Try using following custom getter and setter method.
private static SharedPreferences getInstance(Context context) {
context.getSharedPreferences("MY_APP", Context.MODE_PRIVATE);
return sharedPreferences;
}
public boolean getAppStatus(Context context) {
return getInstance(context).getString("FIRST_TIME", false);
}
public void setAppStatus(Context context, boolean status) {
getInstance(context).edit().putString("FIRST_TIME", status).commit();
}
Now, When for the first time when you call getAppStatus() or in case where user haven't clicked save button even once. It will return false. You can update the value of "FIRST_TIME" variable when the user clicks on save button to true. Thus validating, whether user has interacted with register page or not.
#Override
public void onClick(View v) {
if(v.getId()==R.id.save_button)
setAppStatus(context,true);
}
I think this may be the answer. on your code clicked boolean variable is not stored on shared preferences but you are checking condition inside appGetFirstTimeRun() (button may not be clicked at second launch, but your condition needs to be true) so change your code by
Adding this line appPreferences.edit().putBoolean("first_run", true).apply();on buttonSave clicklistener and then add this line clicked = appPreferences.getBoolean("first_run", false);on appGetFirstTimeRun() function
and the complete code would be.
appGetFirstTimeRun();
boolean clicked=false;
buttonSave.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
appPreferences = appPreferences.edit().putBoolean("first_run",
true).apply(); //***Add this ****
appPreferences.edit().putInt("app_second_time",
appCurrentBuildVersion).apply();
String name = editTextName.getText().toString();
String pass = editTextPassword.getText().toString();
String confirm = editTextConfirm.getText().toString();
if ((editTextName.getText().toString().trim().length() == 0) || (editTextPassword.getText().toString().trim().length() == 0) || (editTextConfirm.getText().toString().trim().length() == 0)) {
Toast.makeText(getApplicationContext(), "Field cannot be null", Toast.LENGTH_LONG).show();
}
else
{
insertData(name, pass, imageUri); // insert to SQLite
Intent intent = new Intent(MainActivity.this, AddMonthlyExpenses.class);
intent.putExtra("name", name);
startActivity(intent);
}
}
});
private int appGetFirstTimeRun() {
//Check if App Start First Time
SharedPreferences appPreferences = getSharedPreferences("MyAPP", 0);
int appCurrentBuildVersion = BuildConfig.VERSION_CODE;
int appLastBuildVersion = appPreferences.getInt("app_first_time", 0);
clicked = appPreferences.getBoolean("first_run", false); //*** Add this ***
if (appLastBuildVersion == appCurrentBuildVersion && clicked) {
Intent intent = new Intent(MainActivity.this,LoginPage.class);
startActivity(intent);
return 1;
} else {
appPreferences.edit().putInt("app_first_time",
appCurrentBuildVersion).apply();
if (appLastBuildVersion == 0) {
Toast.makeText(getApplicationContext(), "First time", Toast.LENGTH_SHORT).show();
return 0; //es la primera vez
} else {
return 2; //es una versión nueva
}
}
}
//Use shared preference to save.
SharedPreferences preferedName=getSharedPreferences("firstrun", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferedName.edit();
editor.putboolean("firstrun",value);
editor.apply();
editor.commit();
//and to retrive.
SharedPreferences preferedName=getSharedPreferences("firstrun", Activity.MODE_PRIVATE);
boolean rstate =preferedName.getString("firstrun",false);
check if "rstste" is false show register page else show the login page.
I have 2 activities .First time I run the application I have to open the popup in Activity 1 when I first to start the application. After that I want to go activity 2 and make some changes there. Again i come back to Activity 2 and i don't want to open the popup. But the problem is whenever i comeback to 1st Activity the popup is open.How to solve this issues?
Here is my code.
db = dbhelper.getReadableDatabase();
String query = "SELECT * FROM Inspector where ActiveStatus= '1' AND FollowFlag ='1'";
Cursor cursor = db.rawQuery(query, null);
if (cursor.moveToFirst())
{
do
{
String strInspectoreName = cursor.getString(cursor.getColumnIndex("Inspector_name"));
String strInspectorId = cursor.getString(cursor.getColumnIndex("Inspector_Id"));
if(!strInspectorId.equals(str_LoginUserId))
{
inspector_ArrayList.add(strInspectoreName);
Log.e("Post ", " Total FollowUp Users !!!" + strInspectoreName);
}
} while (cursor.moveToNext());
}
cursor.close();
db.close();
int countFollowUp = inspector_ArrayList.size();
Log.e("Post ", " Total countFollowUp Users !!!" + countFollowUp);
if( countFollowUp == 0)
{
final Dialog dialog = new Dialog(CustomActionActivity.this);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
dialog.setContentView(R.layout.custom_dialog_layout);
Button followStart = (Button) dialog.findViewById(R.id.button_FollowStart);
followStart.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent i = new Intent(CustomActionActivity.this, Filter_Screen.class);
startActivity(i);
}
});
Button dismissButton = (Button) dialog.findViewById(R.id.button_Dissmiss);
dismissButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
Here is my onResume() in Activity 1st
#Override
protected void onResume()
{
super.onResume();
Log.e(" Activity ", " Resume !!! ");
Log.e("From ", " Filter 222");
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
booleanValue_one = sharedPreferences.getBoolean("LISTVIEW_EVENT_ONE", false);
booleanValue_two = sharedPreferences.getBoolean("LISTVIEW_EVENT_TWO", false);
Log.e("", "booleanValue_one=" + booleanValue_one + " booleanValue_two=" + booleanValue_two);
if (booleanValue_one == true || booleanValue_two == true)
{
GetAllActivityDetails task = new GetAllActivityDetails();
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Log.e(" booleanValue_one "," = " + booleanValue_one +" After completing async task !!!!");
updatedDownLoadStatus();
}
if (booleanValue_one == false && booleanValue_two == false)
{
populateList();
}
}
Here is my 2nd activity onBackPressed() -> go to 1st Activity
#Override
public void onBackPressed() {
super.onBackPressed();
Intent a = new Intent(Filter_Screen.this, CustomActionActivity.class);
a.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(a);
overridePendingTransition(R.anim.slide_in_bottom, R.anim.slide_out_bottom);
}
Make A boolean Key boolean key=true; and use that boolean key to display the Popup in onResume() and in onCreate() make that boolean false
onResume() also call when activity start and when you come back it call again
Your onResume() is called everytime you go back to the running activity and also the first time you create the activity thats why it wil run the code evrytime you go back to the activity.
To resolve this problem you should put the code from your onResume in your onCreate that way it only runs when the activity is first created.
For more info and to fully understand the lifecycle of an activity check : http://developer.android.com/training/basics/activity-lifecycle/starting.html#lifecycle-states
It this is a fist time running thing like an introduction of collect some user information, Save the state to shared preferences and use that to check and allow or disallow the pop-ups accordingly.
Okay so I am having a problem getting my app to work. Basically I have an game that needs to get a few pictures and Strings from the user. I have an opening screen (OpeningScreen) that acts as a splash screen that opens up the menu (MenuScreen). From there the user can pick to go to the game or go to the activity that shows the current pictures (PickScreen). The user can go to that activity and from there open up another activity that gives a larger version of the picture they currently have picked or a default picture (PicOne). Here the user has the option to take a new picture and change the current Strings. For the most part all of it works great. My problem occurs when:
After the user picks a picture and backs out of the app. The next time they open it, it will force close either when I go back to PickScreen or after I press done after taking a new picture and sometimes when I go to PicOne activity. It does not do the same thing everytime, it just crashes at one of those points.
The other issue happens when I change the 3 String names. After pressing save and going back to PickScreen, the app crashes when going back to PicOne or if I back out of the app crashes when going from MenuScreen to PickScreen.
I know this is a lot of code to look at, but I have spent a lot of time looking around and getting code from different places for this app and I am at a point that I cannot figure out. I figure there are many people with more knowledge than me out there, so I am asking for your help. I know that you cannot just ask a question without showing you have been doing any work, so here it is.
Why does may app work perfectly once and then crash in various spots the second time in? By the way it does work fine after the force close, again only once. And why does it force close when I change the Strings?
Thanks everyone!!
The PicOne Class
public class PicOne extends Activity implements OnClickListener {
ImageView iv;
EditText c1, c2, c3;
Button cam, save;
Bitmap bit, bmp,other;
Intent i;
Uri uriSavedImage;
String imageFilePath10 = "", name1="", name2="", name3="";
final static int cameraData = 0;
boolean CAMERA;
int camORgal10 = 0;
SharedPreferences gameData;
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.picone);
CAMERA = false;
iv = (ImageView)findViewById(R.id.picIV);
cam = (Button)findViewById(R.id.camButton);
save = (Button)findViewById(R.id.savebut);
e1 = (EditText)findViewById(R.id.Enter1);
e2 = (EditText)findViewById(R.id.Enter2);
e3 = (EditText)findViewById(R.id.Enter3);
cam.setOnClickListener(this);
save.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
//camera
case R.id.camButton:
camORgal10 = 1;
i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MySpot");
imagesFolder.mkdirs(); // <----
String fileName = "image_1.PNG";
File output = new File(imagesFolder, fileName);
uriSavedImage = Uri.fromFile(output);
i.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(i, cameraData);
break;
case R.id.savebut:
CAMERA = true;
name1 = e1.getText().toString();
name2 = e2.getText().toString();
name3 = e3.getText().toString();
SharedPreferences.Editor editor = gameData.edit();
editor.putInt("NUM10CAMGAL", camORgal10);
editor.putString("NUM10NAME1", name1);
editor.putString("NUM10NAME2", name2);
editor.putString("NUM10NAME3", name3);
editor.commit();
Intent goPT = new Intent(this, PickScreen.class);
goPT.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
goPT.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
finish();
startActivity(goPT);
break;
}
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK)
{
CAMERA = true;
name1 = e1.getText().toString();
name2 = e2.getText().toString();
name3 = e3.getText().toString();
SharedPreferences.Editor editor = gameData.edit();
editor.putInt("NUM10CAMGAL", camORgal10);
editor.putString("NUM10NAME1", name1);
editor.putString("NUM10NAME2", name2);
editor.putString("NUM10NAME3", name3);
editor.commit();
Intent goPT = new Intent(this, PickScreen.class);
goPT.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
goPT.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
finish();
startActivity(goPT);
return true;
}
return super.onKeyDown(keyCode, event);
}
#Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == cameraData)
{
if(resultCode == RESULT_OK && data.hasExtra("data"))
{
bmp = (Bitmap) data.getExtras().get("data");
iv.setImageBitmap(bmp);
}
else if (resultCode == RESULT_CANCELED)
{
Toast.makeText(getApplicationContext(), "Cancelled",Toast.LENGTH_SHORT).show();
}
}
}
#Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
#Override
protected void onResume() {
// TODO Auto-generated method stub
if(OpeningScreen.isEXIT)
{
finish();
}
gameData = getSharedPreferences(MenuScreen.MYFOLDER, 0);
name1 = slotData.getString("NUM10NAME1", "one");
name2 = slotData.getString("NUM10NAME2", "two");
name3 = slotData.getString("NUM10NAME3", "three");
e1.setText(name1);
e2.setText(name2);
e3.setText(name3);
camORgal10 = gameData.getInt("NUM10CAMGAL", 0);
if(camORgal10 == 0)
{
bit = BitmapFactory.decodeResource(getResources(), R.drawable.red);
}
else if(camORgal10 == 1)
{
File imgFile = new File(Environment.getExternalStorageDirectory() + "/MySpot/image_1.PNG");
if(imgFile.exists())
{
bit = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
}
else
{
bit = BitmapFactory.decodeResource(getResources(), R.drawable.red);
}
}
else
{
bit = BitmapFactory.decodeResource(getResources(), R.drawable.red);
}
iv.setImageBitmap(bit);
super.onResume();
}
}
OpeningScreen
public class OpeningScreen extends Activity {
/** Called when the activity is first created. */
public static boolean isEXIT = false;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
isEXIT = false;
Thread timer = new Thread(){
public void run(){
try{
sleep(2500);
} catch(InterruptedException e){
} finally{
Intent toMenu = new Intent(getApplicationContext(), MenuScreen.class);
toMenu.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//toMenu.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
finish();
startActivity(toMenu);
}
}
};
timer.start();
}
#Override
protected void onPause() {
// TODO Auto-generated method stub
finish();
super.onPause();
}
#Override
protected void onResume() {
// TODO Auto-generated method stub
if(isEXIT)
{
finish();
}
super.onResume();
}
}
MenuScreen
public class MenuScreen extends Activity implements OnClickListener {
float x,y;
int camORgal = 0;
ImageButton play, edit, more;
Intent i;
public static String MYFOLDER = "GAMEDATA";
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.menu);
play = (ImageButton)findViewById(R.id.IBplay);
edit = (ImageButton)findViewById(R.id.IBedit);
more = (ImageButton)findViewById(R.id.IBmore);
play.setOnClickListener(this);
edit.setOnClickListener(this);
more.setOnClickListener(this);
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK)
{
OpeningScreen.isEXIT = true;
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.IBplay:
i = new Intent(getApplicationContext(), TheGame.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);
break;
case R.id.IBedit:
i = new Intent(this, PickScreen.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);
break;
case R.id.IBmore:
break;
}
}
}
PickScreen
public class PickScreen extends Activity implements OnClickListener {
Button bPic1, bPic2, bPic3;
ImageView ivpic3,ivpic2, ivpic1;
TextView TVpic3a, TVpic3b, TVpic3c, TVpic2a, TVpic2b, TVpic2c, TVpic1a, TVpic1b, TVpic1c;
Intent pageMove;
SharedPreferences gameData;
int camORgal10 = 0;
String threeNamea = "", threeNameb = "", threeNamec = "", twoNamea = "", twoNameb = "", twoNamec = "", oneNamea = "", oneNameb = "", oneNamec = "";
Bitmap bmp1, bmp2,bmp3;
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.paytable);
intitializeThings();
}
public void intitializeThings()
{
bPic1 = (Button)findViewById(R.id.pic1but);
bPic2 = (Button)findViewById(R.id.pic2but);
bPic3 = (Button)findViewById(R.id.pic3but);
ivpic3 = (ImageView)findViewById(R.id.ivpic3a);
ivpic2 = (ImageView)findViewById(R.id.ivpic2a);
ivpic1 = (ImageView)findViewById(R.id.ivpic1a);
TVpic3a = (TextView)findViewById(R.id.pic3TVa);
TVpic3b = (TextView)findViewById(R.id.pic3TVb);
TVpic3c = (TextView)findViewById(R.id.pic3TVc);
TVpic2a = (TextView)findViewById(R.id.pic2TVa);
TVpic2b = (TextView)findViewById(R.id.pic2TVb);
TVpic2c = (TextView)findViewById(R.id.pic2TVc);
TVpic1a = (TextView)findViewById(R.id.pic1TVa);
TVpic1b = (TextView)findViewById(R.id.pic1TVb);
TVpic1c = (TextView)findViewById(R.id.pic1TVc);
bPic1.setOnClickListener(this);
bPic2.setOnClickListener(this);
bPic3.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.pic1but:
pageMove = new Intent(getApplicationContext(), PicOne.class);
pageMove.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
pageMove.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
//pageMove.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
finish();
startActivity(pageMove);
break;
case R.id.pic2but:
pageMove = new Intent(getApplicationContext(), PicTwo.class);
pageMove.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//pageMove.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(pageMove);
finish();
break;
case R.id.pic3but:
pageMove = new Intent(getApplicationContext(), PicThree.class);
pageMove.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//pageMove.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(pageMove);
finish();
break;
}
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK)
{
Intent goOP = new Intent(this, MenuScreen.class);
goOP.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
goOP.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
finish();
startActivity(goOP);
return true;
}
return super.onKeyDown(keyCode, event);
}
#Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
#Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
gameData = getSharedPreferences(MenuScreen.MYFOLDER, 0);
oneNamea = gameData.getString("NUM10NAME1", "one");
oneNameb = gameData.getString("NUM10NAME2", "two");
oneNamec = gameData.getString("NUM10NAME3", "three");
camORgal10 = gameData.getInt("NUM10CAMGAL", 0);
if(camORgal10 == 1)
{
File pic1 = new File(Environment.getExternalStorageDirectory() + "/MySpot/image_1.PNG");
if(pic1.exists())
{
bmp1 = BitmapFactory.decodeFile(pic1.getAbsolutePath());
}
else
{
bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.red);
}
}
else if(camORgal10 == 0)
{
bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.red);
}
else
{
bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.red);
}
File pic2 = new File(Environment.getExternalStorageDirectory() + "/MySpot/image_2.PNG");
File pic3 = new File(Environment.getExternalStorageDirectory() + "/MySpot/image_3.PNG");
if(pic2.exists())
{
bmp2 = BitmapFactory.decodeFile(pic2.getAbsolutePath());
}
else
{
bmp2 = BitmapFactory.decodeResource(getResources(), R.drawable.purple);
}
if(pic3.exists())
{
bmp3 = BitmapFactory.decodeFile(pic3.getAbsolutePath());
}
else
{
bmp3 = BitmapFactory.decodeResource(getResources(), R.drawable.green);
}
ivpic3.setImageBitmap(bmp3);
ivpic2.setImageBitmap(bmp2);
ivpic1.setImageBitmap(bmp1);
TVpic1a.setText(oneNamea);
TVpic1b.setText(oneNameb);
TVpic1c.setText(oneNamec);
}
}
Logcat will give you a stack trace, and then use debug to pinpoint the place where it's crashing. Debugging a modern application by reading through code, especially OOP code, is nearly impossible.
This was probably caused by the fact the AOS does not closes apps really but you might think is does. So on the next start AOS doesn't start your app "from the scratch" but it raises your undead cached app. And since your logic wasn't expected that your app crashes. I'm pretty sure it starts OK once again right after the crash but the next start once again crashes -> the loop. So to avoid that use System.exit(0) (most advanced devs gonna say its a bad practice) to ensure your app wont became a zombie OR change the logic of your app so it wont crash on the next start cuz the main activity is still there.