Java 需要在setOnClickListener方法中accest变量

Java 需要在setOnClickListener方法中accest变量,java,android,Java,Android,我希望变量r是全局的,我希望SharedReferences能够在全局级别加载变量r(字符串s) 我做的是一个类似于人工机器人饥饿变量的东西。我点击按钮,它会增加+1饥饿感,但每秒钟我都想给它加上-1饥饿感的时间戳。时间戳也可以作为设备离线多长时间的指示器,它按比例给出-xx 到目前为止,我只能将+1添加到R中,因为它的局部变量在onClickListener中,如果(时间已过){R=R-1},我无法给出它,因为R是本地声明的。我不知道怎么把它弄出来 import android.content

我希望变量r是全局的,我希望SharedReferences能够在全局级别加载变量r(字符串s)

我做的是一个类似于人工机器人饥饿变量的东西。我点击按钮,它会增加+1饥饿感,但每秒钟我都想给它加上-1饥饿感的时间戳。时间戳也可以作为设备离线多长时间的指示器,它按比例给出-xx

到目前为止,我只能将+1添加到R中,因为它的局部变量在onClickListener中,如果(时间已过){R=R-1},我无法给出它,因为R是本地声明的。我不知道怎么把它弄出来

import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private TextView broj;
    private TextView tekst1;
    private TextView posljednjeVrijeme;
    String stringTStamp;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
                /**
                 * Ponavlja radnju svakih 4 sekunde, učitava vrijeme systema
                 */
                        final Handler ha=new Handler();
                        ha.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                Long tStamp = System.currentTimeMillis()/1000;
                                stringTStamp = tStamp.toString();
                                Toast.makeText(MainActivity.this, stringTStamp, Toast.LENGTH_SHORT).show();
                                SharedPreferences preferences3 = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                                SharedPreferences.Editor editor = preferences3.edit();
                                editor.putString("posljednjeVrijeme", stringTStamp);
                                editor.apply();



                                ha.postDelayed(this, 4000);
                            }
                        }, 4000);
                /**
                 * **************************************************************
                 */



        broj = (TextView)findViewById(R.id.broj);
        posljednjeVrijeme = (TextView)findViewById(R.id.posljednjeVrijeme);

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        final String name = preferences.getString("vrijednost je ", "");
        final String name2 = preferences.getString("posljednjeVrijeme", "");
        if(!name.equalsIgnoreCase(""))
        {

            broj.setText("vrijednost je "+name);
            posljednjeVrijeme.setText("Zadnje vrijeme "+name2);
        }
        Long tStamp = System.currentTimeMillis()/1000;
        stringTStamp = tStamp.toString();
        if(Integer.parseInt(stringTStamp)-Integer.parseInt(name2)>10){
            Toast.makeText(this, "POZDRAV GAZDA DUGO SE NE VIDJEH, UGASIO SI ME PRIJE " + (Integer.parseInt(stringTStamp)-Integer.parseInt(name2))+ " SEKUNDI" , Toast.LENGTH_SHORT).show();


        }else{

        }


        tekst1 = (TextView)findViewById(R.id.tekst1);
        final SharedPreferences preferences2 = PreferenceManager.getDefaultSharedPreferences(this);
            tekst1.setOnClickListener(new View.OnClickListener() {
                int r = 0+Integer.parseInt(name);
                @Override
                public void onClick(View v) {

                    r = r+1;


                    broj.setText("vrijednost je "+r);

                    String s= String.valueOf(r);
                    SharedPreferences.Editor editor = preferences2.edit();
                    editor.putString("vrijednost je ", s);
                    editor.apply();
                }
            });

    }
}

您可以创建一个公共类,比如
Hunger.java
,并向其中添加一个静态变量
publicstaticintr
。然后在活动中使用处理程序或循环器按时间戳递减r

onCreate()用于按时间戳递增:

new Handler(Looper.getMainLooper()).post(new Runnable() {
    @Override
    public void run() {
       while(<your timestamp condition>){
         Hunger.r = Hunger.r - 1;
       }
    }
});
当应用程序重新启动时,您可以从SharedReferences加载
r
的最后一个值。如果您想在应用程序脱机时继续递减r,可以在
AsyncTask
或声明
服务中执行此操作

您可以从
onCreate()
中的SharedReferences中检索r的值,并设置静态变量Hunger.r的值 onCreate()[在应用程序重新启动时初始化静态变量]

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    Hunger.r = pref.getInt("myvar");
您的textView.onClickListener可能是这样的

    tekst1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        Hunger.r = Hunger.r + 1;

                        broj.setText("vrijednost je "+r);

                    }

  }
在原始代码中,每次更新饥饿变量时,您都会重复写入SharedReferences。以这种方式写入数据会不必要地影响性能


希望这有帮助

您可以创建一个公共类,比如
Hunger.java
,并向其中添加一个静态变量
publicstaticintr
。然后在活动中使用处理程序或循环器按时间戳递减r

onCreate()用于按时间戳递增:

new Handler(Looper.getMainLooper()).post(new Runnable() {
    @Override
    public void run() {
       while(<your timestamp condition>){
         Hunger.r = Hunger.r - 1;
       }
    }
});
当应用程序重新启动时,您可以从SharedReferences加载
r
的最后一个值。如果您想在应用程序脱机时继续递减r,可以在
AsyncTask
或声明
服务中执行此操作

您可以从
onCreate()
中的SharedReferences中检索r的值,并设置静态变量Hunger.r的值 onCreate()[在应用程序重新启动时初始化静态变量]

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    Hunger.r = pref.getInt("myvar");
您的textView.onClickListener可能是这样的

    tekst1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        Hunger.r = Hunger.r + 1;

                        broj.setText("vrijednost je "+r);

                    }

  }
在原始代码中,每次更新饥饿变量时,您都会重复写入SharedReferences。以这种方式写入数据会不必要地影响性能


希望这有帮助

我找到了解决办法。setter-getter方法帮助我使变量r在任何地方都可以访问。现在我点击按钮时的代码(textView)给出+1,如果应用程序离线,每10秒给出-10的r变量整数


我找到了解决办法。getter setter方法帮助我声明了我的r变量,并且我能够在每个函数中控制我的变量。解决方案,即使这些代码看起来也很难看

    import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private TextView broj;
    private TextView tekst1;
    private TextView posljednjeVrijeme;
    String stringTStamp;
    private int r;

    public int getDefaultR(){
        return r;
    }

    public void setDefaultR(int r){
        this.r=r;
    }




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
                /**
                 * Ponavlja radnju svakih 4 sekunde, učitava vrijeme systema
                 */
                        final Handler ha=new Handler();
                        ha.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                Long tStamp = System.currentTimeMillis()/1000;
                                stringTStamp = tStamp.toString();
                                Toast.makeText(MainActivity.this, stringTStamp, Toast.LENGTH_SHORT).show();
                                SharedPreferences preferences3 = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                                SharedPreferences.Editor editor = preferences3.edit();
                                editor.putString("posljednjeVrijeme", stringTStamp);
                                editor.apply();



                                ha.postDelayed(this, 4000);
                            }
                        }, 4000);
                /**
                 * **************************************************************
                 */



        broj = (TextView)findViewById(R.id.broj);
        posljednjeVrijeme = (TextView)findViewById(R.id.posljednjeVrijeme);

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        final String name = preferences.getString("vrijednost je ", "");
        final String name2 = preferences.getString("posljednjeVrijeme", "");
        if(!name.equalsIgnoreCase(""))
        {

            broj.setText("vrijednost je "+name);
            posljednjeVrijeme.setText("Zadnje vrijeme "+name2);
        }



        Long tStamp = System.currentTimeMillis()/1000;
        stringTStamp = tStamp.toString();

        if(Integer.parseInt(stringTStamp)-Integer.parseInt(name2)<10){
            r = 0+Integer.parseInt(name);
            setDefaultR(0+Integer.parseInt(name)-10);
            broj.setText("vrijednost je "+r);
            final SharedPreferences preferences2 = PreferenceManager.getDefaultSharedPreferences(this);
            String s= String.valueOf(getDefaultR());
            SharedPreferences.Editor editor = preferences2.edit();
            editor.putString("vrijednost je ", s);
            editor.apply();
        }

        else if(Integer.parseInt(stringTStamp)-Integer.parseInt(name2)>10){
            Toast.makeText(this, "POZDRAV GAZDA DUGO SE NE VIDJEH, UGASIO SI ME PRIJE " + (Integer.parseInt(stringTStamp)-Integer.parseInt(name2))+ " SEKUNDI" , Toast.LENGTH_SHORT).show();
            r = 0+Integer.parseInt(name)-10;
            setDefaultR(0+Integer.parseInt(name)-10);
            broj.setText("vrijednost je "+r);
            final SharedPreferences preferences2 = PreferenceManager.getDefaultSharedPreferences(this);
            String s= String.valueOf(getDefaultR());
            SharedPreferences.Editor editor = preferences2.edit();
            editor.putString("vrijednost je ", s);
            editor.apply();

        }else{}





        tekst1 = (TextView)findViewById(R.id.tekst1);
        final SharedPreferences preferences2 = PreferenceManager.getDefaultSharedPreferences(this);
            tekst1.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    r = r+1;


                    broj.setText("vrijednost je "+r);

                    String s= String.valueOf(getDefaultR());
                    SharedPreferences.Editor editor = preferences2.edit();
                    editor.putString("vrijednost je ", s);
                    editor.apply();
                }
            });

    }
}
导入android.content.SharedReferences;
导入android.os.Bundle;
导入android.os.Handler;
导入android.preference.PreferenceManager;
导入android.support.v7.app.AppActivity;
导入android.view.view;
导入android.widget.TextView;
导入android.widget.Toast;
公共类MainActivity扩展了AppCompatActivity{
私有文本视图浏览器;
私有文本视图tekst1;
私有文本视图posljednjeVrijeme;
字符串夯实;
私人INTR;
public int getDefaultR(){
返回r;
}
公共void setDefaultR(int r){
这个。r=r;
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
*在乌西塔瓦-维里杰姆系统的四个国家
*/
最终处理程序ha=新处理程序();
ha.postdayed(新的Runnable(){
@凌驾
公开募捐{
Long tStamp=System.currentTimeMillis()/1000;
stringTStamp=tStamp.toString();
Toast.makeText(MainActivity.this、stringTStamp、Toast.LENGTH_SHORT).show();
SharedReferences preferences3=PreferenceManager.GetDefaultSharedReferences(getApplicationContext());
SharedReferences.Editor=首选项3.edit();
编辑器.putString(“posljednjeVrijeme”,stringTStamp);
editor.apply();
医管局(今,四千);;
}
}, 4000);
/**
* **************************************************************
*/
broj=(TextView)findViewById(R.id.broj);
posljednjeVrijeme=(TextView)findViewById(R.id.posljednjeVrijeme);
SharedReferences preferences=PreferenceManager.GetDefaultSharedReferences(此);
最终字符串名称=preferences.getString(“vrijednostje”,”);
最终的字符串名称2=preferences.getString(“posljednjeVrijeme”,”);
if(!name.equalsIgnoreCase(“”)
{
broj.setText(“vrijednost je”+名称);
posljednjeVrijeme.setText(“Zadnje vrijeme”+name2);
}
Long tStamp=System.currentTimeMillis()/1000;
stringTStamp=tStamp.toString();
if(Integer.parseInt(stringTStamp)-Integer.parseInt(name2)10){
Toast.makeText(这是“POZDRAV GAZDA DUGO SE NE VIDJEH,UGASIO SI ME PRIJE”+(Integer.parseInt(stringTStamp)-Integer.parseInt(name2))+“SEKUNDI”,Toast.LENGTH_SHORT).show();
r=0+Integer.parseInt(name)-10;
setDefaultR(0+Integer.parseInt(name)-10);
broj.setText(“vrijednost