退出应用程序并更改Android应用程序中的图片后,保存当前状态

时间:2014-04-01 18:32:39

标签: android eclipse image sdk

我正在编写一个小应用程序。仅供参考:如果单击图像,计数器将减少。我的两个问题如下:

  1. 我如何通过一些代码来管理它,当我离开应用程序时,我的计数器会回到起点。例如。如果我在第5点离开并稍后回来,我想继续在第5点而不是10点。
  2. 我希望当计数器达到0时会出现一张全新的图片,但我不知道如何管理它。
  3. 要点2:我尝试过以下几行,但它不起作用。我离开时应用程序崩溃,例如在第6点。

    @Override 
        protected void onPause() { 
            SharedPreferences mPrefs = getSharedPreferences("data", 0); 
            counter = mPrefs.getInt("counter", 0);
            SharedPreferences.Editor 
            mEditor = mPrefs.edit(); 
            mEditor.putInt("counter", counter).commit(); 
            onWindowFocusChanged(true);
            }
    

    这是整个代码。我希望有人能够帮助我。 :)

        package com.first.app;
    
    import android.app.Activity;
    import android.app.Fragment;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    
        public class MainActivity extends Activity {
    
        int counter = 10;
        public static String TAG = "Debug";
        @Override 
        protected void onPause() { 
            SharedPreferences mPrefs = getSharedPreferences("data", 0); 
            SharedPreferences.Editor 
            mEditor = mPrefs.edit(); 
            mEditor.putInt("counter", counter).commit(); 
            onWindowFocusChanged(true);
            super.onPause(); 
            }
    
        @Override
        protected void onStop() {
            Log.w(TAG, "App stopped");
            //also do your savings here to be sure
            super.onStop();
        }
    
        @Override
        protected void onDestroy() {
            Log.w(TAG, "App destoryed");
            //also do your savings here to be sure
            super.onDestroy();
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            final TextView text = (TextView) findViewById(R.id.TextView01);
            final ImageView apfel = (ImageView) findViewById(R.id.appel);
            final ImageView image = (ImageView) findViewById(R.id.smiley);
    
            apfel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (counter > 0) {
                        counter--;
                        text.setText("" + counter);
                    }
                    if (counter == 0) {
                        image.setImageResource(R.drawable.smiley);
                        text.setText("You finished!");
                    }
                }
            });
    
            if (savedInstanceState == null) {
                getFragmentManager().beginTransaction()
                        .add(R.id.container, new PlaceholderFragment()).commit();
            }
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
    
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    
        /**
         * A placeholder fragment containing a simple view.
         */
        public static class PlaceholderFragment extends Fragment {
    
            public PlaceholderFragment() {
            }
    
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_main, container,
                        false);
                return rootView;
            }
        }
    
    }
    

    自动安装以下代码行后的内容'当我创建项目时。

    if (counter == 0) {
                        text.setText("Congratulations you finished!");
    

1 个答案:

答案 0 :(得分:0)

如果应用程序打开,您可以将其写入文件并再次阅读。 但我认为最好的方法是使用SharedPreferences。

您可以在此处找到示例:example

  

我尝试过以下几行,但它不起作用。该应用程序   我离开时崩溃,例如在第6点。

您可以生成错误日志并发布吗?

Edit2:您需要在方法中使用onStop和onDestroy。喜欢这个

public static string TAG = "Debug";
@Override
protected void onStop() {
    Log.w(TAG, "App stopped");
    //also do your savings here to be sure
    super.onStop();
}

@Override
protected void onDestroy() {
    Log.w(TAG, "App destoryed");
    //also do your savings here to be sure
    super.onDestroy();
}

您的代码将是:

    package com.first.app;

import android.app.Activity;
import android.app.Fragment;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity {

    int counter;
    public static string TAG = "Debug";
    @Override 
    protected void onPause() { 
        SharedPreferences mPrefs = getSharedPreferences("data", 0); 
        SharedPreferences.Editor 
        mEditor = mPrefs.edit(); 
        mEditor.putInt("counter", counter).commit(); 
        onWindowFocusChanged(true);
        super.onPause(); 
        }

    @Override
    protected void onStop() {
        Log.w(TAG, "App stopped");
        SharedPreferences mPrefs = getSharedPreferences("data", 0); 
        SharedPreferences.Editor 
        mEditor = mPrefs.edit(); 
        mEditor.putInt("counter", counter).commit(); 
        onWindowFocusChanged(true);
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        Log.w(TAG, "App destoryed");
        SharedPreferences mPrefs = getSharedPreferences("data", 0); 
        SharedPreferences.Editor 
        mEditor = mPrefs.edit(); 
        mEditor.putInt("counter", counter).commit(); 
        onWindowFocusChanged(true);
        super.onDestroy();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    SharedPreferences settings = getSharedPreferences("data", 0);
    counter = settings.getInt("counter", 10);

        final TextView text = (TextView) findViewById(R.id.TextView01);
        final ImageView apfel = (ImageView) findViewById(R.id.appel);
        final ImageView image = (ImageView) findViewById(R.id.smiley);

        apfel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (counter > 0) {
                    counter--;
                    text.setText("" + counter);
                }
                if (counter == 0) {
                    image.setImageResource(R.drawable.smiley);
                    text.setText("You finished!");
                    SharedPreferences mPrefs = getSharedPreferences("data", 0); 
                    SharedPreferences.Editor 
                    mEditor = mPrefs.edit(); 
                    mEditor.putInt("counter", 10).commit(); 
                }
            }
        });

        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);
            return rootView;
        }
    }

}