gpt4 book ai didi

java - 如何在两个不同的类中使用同一个计数器

转载 作者:行者123 更新时间:2023-12-02 03:55:05 25 4
gpt4 key购买 nike

我正在创建一个登录 fragment ,用户最多可以尝试登录 3 次。

为此,我想在 fragment 中使用计数器,但考虑到该 fragment 还包含用于连接到互联网的 asynctask 类,它还需要使用计数器变量。

我知道我可以使用SharedPreferences,但我想知道是否有更好的方法。

代码如下:

public class loginfragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//CONNECT TO INTERNET!!
task=new PasswordCheckTask();
task.execute();
//END CONNECT TO INTERNET!!
}
});
}

class PasswordCheckTask extends AsyncTask<Void, Void, Void> {

@Override
protected void onPostExecute(Void result) {

if (success == "1"){
Intent xx = new Intent(getContext().getApplicationContext(), ArduinoFirst.class);
xx.putExtra("position", position);
startActivity(xx);
counter=3; //Counter goes back to 3
} else if (counter!=0) {
counter=counter-1 //One less try
}
}
}

你会怎么做?

最佳答案

在您的示例中,PasswordCheckTask 类是 loginfragment 的子类(顺便说一句,约定将其命名为 LoginFragment)。因此,从技术上讲,您可以定义 LoginFragment 的变量 counter,并且两者都可以访问它。

但是,请注意,您在这里处理的是线程,因此您应该使用 AtomicInteger 之类的东西,或者使用 synchronized 关键字包装对其的调用。

示例:

public class LoginFragment extends Fragment {

private AtomicInteger counter = new AtomicInteger();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//CONNECT TO INTERNET!!
task=new PasswordCheckTask();
task.execute();
//END CONNECT TO INTERNET!!
}
});
}

class PasswordCheckTask extends AsyncTask<Void, Void, Void> {

@Override
protected void onPostExecute(Void result) {

if (success == "1"){
Intent xx = new Intent(getContext().getApplicationContext(), ArduinoFirst.class);
xx.putExtra("position", position);
startActivity(xx);
counter.set(3);
} else if (counter.get() != 0) {
counter.getAndDecrement();
}
}
}

但是,我只看到您在子类 PasswordCheckTask 中使用计数器,因此您可以在其中定义它,除非我错过了某些内容。

关于java - 如何在两个不同的类中使用同一个计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35573491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com