-1

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 {

myapp

Julie
  • 3
  • 3
  • You are not doing anything with the value you retrieved from shared preference. You only log that value, then what are you expecting ? – Midhun MP Dec 21 '15 at 16:32
  • I logged it just to check it was working, I just need to open the MainActivity on the page that relates to this value, are you able to help me please? – Julie Dec 21 '15 at 17:08
  • Can you elaborate about that ? What you need to do with the value ? Are you trying to pass that value to main activity class ? – Midhun MP Dec 21 '15 at 17:57
  • Yes sure, i've added the mainactivity code above now and here is a link to the app http://i.stack.imgur.com/DGLiy.png and http://i.stack.imgur.com/SgGVO.png . If you click the north, east, west button etc you navigate through different countries, then you press save, and it saves the country you are in. Once you press resume I need the player to be taken to the last country which was saved, thanks! – Julie Dec 21 '15 at 18:26
  • When you press the resume button pass the saved information along with the activity. In your main activity's onCreate retrieve the passed value and configure the state according to that. Refer this to know [how to pass data between activities](http://stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-on-android) – Midhun MP Dec 21 '15 at 18:30

1 Answers1

0

You are not passing the value to another activity.

Set it to intent like this:

int Value = sp.getInt("save", -1);

Log.w("LOG_TAG", "value: " + Value);
Intent value = new Intent(MainMenu.this, MainActivity.class);

value.putExtra("save", Value);

startActivity(value);

And in your MainActivity take the value using getIntent().getIntExtra().

Put it in your onCreate() method, after setContentView():

playerPos = getIntent().getIntExtra("save", 0);

and then use it to set player position.

geNia
  • 985
  • 9
  • 20
  • Thank you for your reply, I'm not sure where I should be placing this code in MainActivity 'int save = getIntent().getIntExtra("save");' – Julie Dec 21 '15 at 18:41
  • @Julie You should place it before the place where you set player's position. I didn't find that in your code. – geNia Dec 21 '15 at 21:45
  • The player position has been initialised to "0" but if I place the code there it crashes. I am new to android, so would really appreciate your help, thanks – Julie Dec 22 '15 at 09:51