2

我尝试将我的密码保存到一个活动中,并且我想将其恢复到不同的活动中,但是当我的应用程序启动第二个活动时,它崩溃了。有人可以帮助我吗?

package com.example.test;

public class MainActivity extends Activity {

    String finall;

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

        String FILENAME = "hello_file.txt";
        String string = "1234";

        FileOutputStream fos;
        try
        {
            fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
            fos.write(string.getBytes());
            fos.close();
        } 
        catch (FileNotFoundException e) { e.printStackTrace(); } 
        catch (IOException e) { e.printStackTrace(); }

        try
        {
            FileInputStream in = openFileInput("hello_file.txt");
            StringBuffer fileContent = new StringBuffer("");
            byte[] buffer = new byte[4];

            while(in.read(buffer) != -1)
            {
                fileContent.append(new String(buffer));
            }
            finall = fileContent.toString();
            in.close();
        }
        catch (FileNotFoundException e) { e.printStackTrace(); } 
        catch (IOException e) { e.printStackTrace(); }

        Button button = (Button)findViewById(R.id.button);
        button.setText(finall);
        button.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {
                sendGo(v);

            }
        });
    }

    public void sendGo(View v)
    {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }
}

第一部分工作,因为我可以在同一个活动中读取我保存的文件。但是当我尝试将它读入另一个活动时,它不起作用:

package com.example.test;

public class SecondActivity extends Activity {

    String finall="";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        // Show the Up button in the action bar.
        setupActionBar();

        try
        {
            FileInputStream in = openFileInput("hello_file.txt");
            StringBuffer fileContent = new StringBuffer("");

            byte[] buffer = new byte[4];

            while(in.read(buffer) != -1)
            {
                fileContent.append(new String(buffer));
            }
            finall = fileContent.toString();
            in.close();
        }
        catch (FileNotFoundException e) { e.printStackTrace(); } 
        catch (IOException e) { e.printStackTrace(); }

        TextView text = (TextView)findViewById(R.id.mehmet);
        text.setText(finall);
    }



    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    private void setupActionBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            // This ID represents the Home or Up button. In the case of this
            // activity, the Up button is shown. Use NavUtils to allow users
            // to navigate up one level in the application structure. For
            // more details, see the Navigation pattern on Android Design:
            //
            // http://developer.android.com/design/patterns/navigation.html#up-vs-back
            //
            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}
4

5 回答 5

4

我知道在活动之间传递变量的最简单方法如下:

在您的活动中,您创建一个新的意图:

Intent intent = new Intent(getApplicationContext(), NextActivity.class);
intent.putExtra("nameofvariable","valueofvariable");
startActivity(intent);

从下一个活动中,您可以通过以下方式检索此值:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String value = extras.getString("nameofvariable");
}

但是,使用 FileInputStream 的正确方法是:

FileInputStream in = openFileInput("hello_file.txt");
    InputStreamReader inputStreamReader = new InputStreamReader(in);
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = bufferedReader.readLine()) != null) {
        sb.append(line);
    }
于 2013-05-12T18:26:53.643 回答
3

如果你想在活动之间共享数据,你可以这样做:

  1. 意图并将额外数据放入 Bundle
  2. SharePreferences(即使应用程序关闭并重新启动,您也可以访问它)
  3. SqlLite 数据库(即使应用程序关闭并重新启动,您也可以访问它)
  4. 静态类

这是您可以使用 SharedPrefs 的方式 ->

SharedPreferences pref = getBaseContext().getSharedPreferences(PREFERENCE_NAME, 0); 
SharedPreferences.Editor editor editor = pref.edit();
editor.putString("KEY_PASSORD", "Password to Save");
editor.commit();

当您想从 SharedPrefs 检索密码时,请执行此操作 ->

SharedPreferences Pref = getBaseContext().getSharedPreferences(PREFERENCE_NAME, 0);
String password = pref.getString("KEY_PASSWORD","Default Password");
于 2013-05-12T18:54:56.260 回答
1

如果要在活动之间共享数据,可以使用:

  • 意图并将额外数据放入 Bundle
  • Application 类中的 SharePreferences
  • SQLite 数据库
  • 静态变量
于 2013-05-12T18:50:40.543 回答
0

我在模拟器(第 8 级)和三星 Galaxy S3(第 16 级)上测试了您的应用程序,它运行良好!

第二个活动的 textView 是 1234。

你在哪些设备上测试?

你能把你的logcat日志发给我们吗?

不要错过在 AndroiManifest.xml 文件中声明所有活动。

谢谢

于 2013-05-12T18:32:10.053 回答
0

您可以在第一次活动中使用 SharePreferences 并将您的密码保存到其中:

package com.example.test;

public class FirstActivity extends Activity {
SharedPreferences pref;
SharedPreferences.Editor editor editor;

private final String KEY_PASSWORD = "password";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = (Button)findViewById(R.id.button);
    button.setText(finall);
    button.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v) {
            pref  = getSharedPreferences("passwordPref", 0); 
            SharedPreferences.Editor editor editor = pref.edit();
            editor.putString(KEY_PASSWORD ,YourEditBox.getText());
            editor.commit();
            Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
            startActivity(intent);

        }
    });

}

}

在第二个活动中使用它来检索您的密码:

package com.example.test;

public class SecondActivity extends Activity {
SharedPreferences pref;
SharedPreferences.Editor editor editor;

private final String KEY_PASSWORD = "password";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    pref = getSharedPreferences("passwordPref", 0);
    YourEditText.setText(pref.getString(KEY_PASSWORD,""));
}

}
于 2013-05-12T19:11:07.153 回答