Android共享首选项恢复游戏按钮不起作用

时间:2015-12-21 16:28:20

标签: android sharedpreferences

我正在制作一款游戏应用,需要让玩家保存并恢复其位置。

保存工作正常,存储房间位置,单击“恢复”按钮时检索房间位置不错,但没有将玩家带到保存的房间位置,它只是从头开始游戏。

我认为这可能与此代码有关,但经过8个小时的研究后,我仍然不知道如何改变它: -

Intent value = new Intent(MainMenu.this, MainActivity.class);
                startActivity(value);

请帮助,谢谢!

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)


    }

}

这是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

1 个答案:

答案 0 :(得分:0)

您没有将该值传递给其他活动。

将其设置为这样的意图:

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);

在MainActivity中使用getIntent()获取值.getIntExtra()。

在setContentView()之后将它放在onCreate()方法中:

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

然后用它来设置玩家位置。