I am creating a game app, which needs to allow the player to save and resume their position.
The save works fine, storing the room position, it retrieves the room position fine when clicking the "resume" button but doesn't take the player to the saved room position, it just starts the game from the beginning.
I think it maybe to do with this code, but after 8 hours of research, I still have no idea how to alter it:-
Intent value = new Intent(MainMenu.this, MainActivity.class);
startActivity(value);
Please help, thanks!
package com.example.gameversion2;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainMenu extends AppCompatActivity {
Button play;
Button resume;
Button exit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
resume = (Button) findViewById(R.id.resume);
resume.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
SharedPreferences sp = getSharedPreferences("SAVEPOS", Context.MODE_PRIVATE);
//Load the Editor NOTE: Remember to COMMIT the changes
//Retrieve the Values written to shared preferences
int Value = sp.getInt("save", -1);
Log.w("LOG_TAG", "value: " + Value);
Intent value = new Intent(MainMenu.this, MainActivity.class);
startActivity(value);
}
});
play = (Button) findViewById(R.id.play);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainMenu.this, MainActivity.class);
startActivity(intent);
}
});
exit = (Button) findViewById(R.id.exit);
exit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});//protected void onCreate(Bundle savedInstanceState)
}
}
This is the MainActivity
package com.example.gameversion2;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.XmlResourceParser;
import android.graphics.Point;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
static final int NO_EXIT = -1;
static final int NUM_OF_ROOMS = 21;
Room[] countries;
Button north;
Button east;
Button south;
Button west;
Button save;
Button exit;
TextView textview;
ImageView flagimg;
int playerPos = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTheCountries();
readXMLFile();
displayRooms();
setupControls();
setupImage();
// startGame();
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
Log.w("TAG", "width = " + width + " height = " + height);
//Toast.makeText(getApplicationContext(), "w = " + width + " height = "+ height, Toast.LENGTH_LONG).show();
textview.setText(countries[playerPos].getDescription());
setupDirectionButtons();
} // protected void onCreate(Bundle savedInstanceState) {
// private void startGame() {
// Variables
//question = S.LoadGame();
//boolean running = true;
// textview.setText("Welcome to Escape The Country!");
// }
private void setupImage() {
ImageView imagePlayer;
ImageView imageRedbull;
imagePlayer = (ImageView)findViewById(R.id.imagePlayer);
imageRedbull = (ImageView)findViewById(R.id.imageRedbull);
imagePlayer.setImageResource(R.drawable.player);
imageRedbull.setImageResource(R.drawable.redbull);
}
public void setupDirectionButtons()
{
// north
if (countries[playerPos].getNorth() == -1 )
{
north.setEnabled(false);
}
else
{
north.setEnabled(true);
}
// east
if (countries[playerPos].getEast() == -1 )
{
east.setEnabled(false);
}
else
{
east.setEnabled(true);
}
// south
if (countries[playerPos].getSouth() == -1 )
{
south.setEnabled(false);
}
else
{
south.setEnabled(true);
}
// west
if (countries[playerPos].getWest() == -1 )
{
west.setEnabled(false);
}
else
{
west.setEnabled(true);
}
} // public void setupDirectionButtons()
public void setupControls()
{
north = (Button)findViewById(R.id.north);
east = (Button)findViewById(R.id.east);
south = (Button)findViewById(R.id.south);
west = (Button)findViewById(R.id.west);
textview = (TextView)findViewById(R.id.textView);
flagimg = (ImageView)findViewById(R.id.flagimg);
save = (Button)findViewById(R.id.saveButton);
save.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
SharedPreferences sp = getSharedPreferences("SAVEPOS", Context.MODE_PRIVATE);
//Load the Editor NOTE: Remember to COMMIT the changes
SharedPreferences.Editor e = sp.edit();
e.putInt("save", playerPos);
e.commit();
//Retrieve the Values written to shared preferences
int Value = sp.getInt("save", -1);
Log.w("LOG_TAG", "value: " + Value);
//imageview.setX(imageview.getX() + 10);
}
});
north.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
playerPos = countries[playerPos].getNorth();
textview.setText( countries[playerPos].getDescription());
setupDirectionButtons();
UpdateImage();
}
});
east.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
playerPos = countries[playerPos].getEast();
textview.setText( countries[playerPos].getDescription());
setupDirectionButtons();
UpdateImage();
}
});
south.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
playerPos = countries[playerPos].getSouth();
textview.setText( countries[playerPos].getDescription());
setupDirectionButtons();
UpdateImage();
}
});
west.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
playerPos = countries[playerPos].getWest();
textview.setText( countries[playerPos].getDescription());
setupDirectionButtons();
UpdateImage();
}
});
}
public void UpdateImage()
{
switch (playerPos)
{
case 0:
flagimg.setImageResource(R.drawable.canada);
break;
case 1 :
flagimg.setImageResource(R.drawable.norway);
break;
case 2 :
flagimg.setImageResource(R.drawable.sweden);
break;
case 3 :
flagimg.setImageResource(R.drawable.switzerland);
break;
case 4:
flagimg.setImageResource(R.drawable.australia);
break;
case 5 :
flagimg.setImageResource(R.drawable.finland);
break;
case 6 :
flagimg.setImageResource(R.drawable.newzealand);
break;
case 7 :
flagimg.setImageResource(R.drawable.denmark);
break;
case 8:
flagimg.setImageResource(R.drawable.netherland);
break;
case 9 :
flagimg.setImageResource(R.drawable.belgium);
break;
case 10 :
flagimg.setImageResource(R.drawable.ireland);
break;
case 11 :
flagimg.setImageResource(R.drawable.austria);
break;
case 12:
flagimg.setImageResource(R.drawable.uk);
break;
case 13 :
flagimg.setImageResource(R.drawable.italy);
break;
case 14 :
flagimg.setImageResource(R.drawable.germany);
break;
case 15 :
flagimg.setImageResource(R.drawable.japan);
break;
case 16 :
flagimg.setImageResource(R.drawable.spain);
break;
case 17:
flagimg.setImageResource(R.drawable.portugal);
break;
case 18 :
flagimg.setImageResource(R.drawable.france);
break;
case 19 :
flagimg.setImageResource(R.drawable.canada);
break;
case 20 :
flagimg.setImageResource(R.drawable.canada);
break;
}
}
public void initTheCountries() {
countries = new Room[NUM_OF_ROOMS];
for (int pos = 0; pos < NUM_OF_ROOMS; pos++)
{
countries[pos] = new Room();
}
} // public static void initTheCountries()
public void displayRooms() {
Log.w("display ROOM", "**************** start of display rooms ********************************");
for (int pos = 0; pos < NUM_OF_ROOMS; pos++)
{
Log.w("display ROOM", "North = " + countries[pos].getNorth());
Log.w("display ROOM", "East = " + countries[pos].getEast());
Log.w("display ROOM", "West = " + countries[pos].getWest());
Log.w("display ROOM", "South = " + countries[pos].getSouth());
Log.w("display ROOM", "Description = " + countries[pos].getDescription());
}
Log.w("display ROOM", "**************** end of display rooms **********************************");
} // public void displayRooms() {
public void readXMLFile() {
int pos = 0; // May be use this variable, to keep track of what position of the array of Room Objects.
try {
XmlResourceParser xpp = getResources().getXml(R.xml.countries);
xpp.next();
int eventType = xpp.getEventType();
int room_count = 0;
String elemtext = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
String elemName = xpp.getName();
if (elemName.equals("countries")) {
String titleAttr = xpp.getAttributeValue(null,"title");
String authorAttr = xpp.getAttributeValue(null,"author");
} // if (elemName.equals("countries"))
if (elemName.equals("room")) {
room_count = room_count + 1;
}
if (elemName.equals("north")) {
elemtext = "north";
}
if (elemName.equals("east")) {
elemtext = "east";
}
if (elemName.equals("south")) {
elemtext = "south";
}
if (elemName.equals("west")) {
elemtext = "west";
}
if (elemName.equals("description")) {
elemtext = "description";
}
} // if (eventType == XmlPullParser.START_TAG)
// You will need to add code in this section to read each element of the XML file
// And then store the value in the current Room Object.
// NOTE: This method initTheCountries() creates and array of Room Objects, ready to be populated!
// As you can see at the moment the data/text is displayed in the LogCat Window
// Hint: xpp.getText()
else if (eventType == XmlPullParser.TEXT) {
if (elemtext.equals("north")) {
Log.w("ROOM", "north = " + xpp.getText());
countries[room_count-1].setNorth( Integer.valueOf(xpp.getText()));
}
else if (elemtext.equals("east")) {
Log.w("ROOM", "east = " + xpp.getText());
countries[room_count-1].setEast(Integer.valueOf(xpp.getText()));
}
else if (elemtext.equals("south")) {
Log.w("ROOM", "south = " + xpp.getText());
countries[room_count-1].setSouth(Integer.valueOf(xpp.getText()));
}
else if (elemtext.equals("west")) {
Log.w("ROOM", "west = " + xpp.getText());
countries[room_count-1].setWest(Integer.valueOf(xpp.getText()));
}
else if (elemtext.equals("description")) {
Log.w("ROOM", "description = " + xpp.getText());
countries[room_count-1].setDescription( xpp.getText() );
}
} // else if (eventType == XmlPullParser.TEXT)
eventType = xpp.next();
} // while (eventType != XmlPullParser.END_DOCUMENT)
} // try
catch (XmlPullParserException e) {
}
catch (IOException e) {
}
exit = (Button) findViewById(R.id.exit);
exit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
} // public void readXMLFile()
} // public class MainActivity extends AppCompatActivity {