我想获取我在 中的值TextView
,添加它,保存它并在每次触摸按钮时重复此过程,但我不明白为什么我无法保存它。
我的代码:
public class MainActivity extends Activity {
Button b1;
TextView tv3,tv4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button) findViewById(R.id.b1);
tv3=(TextView)findViewById(R.id.tv3);
tv4=(TextView)findViewById(R.id.tv4);
SharedPreferences preferences=getSharedPreferences("Saldo", Context.MODE_PRIVATE);
tv4.setText(preferences.getString("Valor", ""));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.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();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void a(View view){
int x=200;
String valor1=tv4.getText().toString();
int nro1=Integer.parseInt(valor1);
int sumar=nro1 + x;
String resultado=String.valueOf(sumar);
tv4.setText(resultado);
SharedPreferences preferences=getSharedPreferences("Saldo", Context.MODE_PRIVATE);
SharedPreferences.Editor editor=preferences.edit();
editor.putString("Valor", tv4.getText().toString());
editor.commit();
}
}
您的代码中有一些小错误,但不要担心,我会尽力向您解释它们:
事实证明,如果您希望在按下按钮时发生添加和保存操作,那么您做错了,因为要使按钮与操作链接,可以通过以下几种方式完成:
注意:如果您已经知道将操作与按钮链接的方法,请转到按钮
SharedPreferences
说明下方的 部分。将方法绑定到按钮
通过这种方式,您必须在代码中创建一个方法,
Java
并且从 section 中按钮的属性中XML
,Desing
您必须查找一个名为的属性onClick
并分配您在那里创建的方法。不必像在方法中那样将任何传递View
给此方法a()
实现 ONClickListener 方法
为此,您有两种方法:
在您的主类声明中,您添加以下内容并实现必要的代码:
另一种方法是直接在方法中将其实现到您的按钮
onCreate()
:一旦你知道这一点,我会解释
SharedPreferences
,你会明白为什么它会失败:共享偏好
要从
SharedPreferences
使用此代码中获取值:SharedPreferences 首选项 = getSharedPreferences("Balance", Context.MODE_PRIVATE); textview.setText(preferences.getString("Value", "5"));
第一行声明
SharedPreferences
要访问的文件。在这种情况下,它将被调用Saldo
。执行此行时,将在您的 Android 设备上创建一个名为的文件Saldo
,无论您在哪个Activity
(屏幕)上,只要您在第一行中声明它就会访问该文件。在第二行中,您要向
TextView
使用键名存储的值添加一个值Valor
,如果该键Valor
不存在,它将被创建,其初始值为5
.在你的应用程序中,你已经 put
""
,所以你永远不会得到任何东西或添加任何东西,它会执行操作,但值仍然是""
,也就是说,什么都没有。如果您想保存,将执行以下代码,就像您在代码中所做的那样:
尝试使用
apply()
来保存数据而不是commit()
.现在您知道了错误的原因,我给您留下了我制作的示例代码:
MainActivity.java
activity_main.xml
:我希望一切对您来说都清楚,但即便如此,如果您需要任何东西,或者您只是不明白我刚刚向您解释的内容,请给我写评论,我会解决您的疑问。
祝你的应用好运!
尝试使用 的单个实例
SharedPreferences
,在您的类和编辑器中声明一个全局实例,并使用同一个实例来获取信息并存储它,这样可以确保您使用的是相同的寄存器SharedPreferences
,有时甚至如果您将标签放在您的案例“Saldo”中,作为共享偏好的另一个实例,则值不一样。原因是您从布局中的按钮调用方法,定义执行方法
a(View view)
您没有定义方法调用:
添加属性 android:onClick="a" :
a()
从布局调用方法。如果您通过 in 代码调用方法来调用相同的方法
OnClickListener
,则该方法将更改为: