我正在创建一个登录片段,用户最多可以尝试3次登录。
要这样做,我想在fragment
中使用一个计数器,但鉴于此片段还包含用于连接到Internet的asynctask class
,它还需要使用计数器变量。
我知道我可以与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
}
}
}
你会怎么做?
答案 0 :(得分:1)
你可以使用静态变量,它可以在任何地方工作
答案 1 :(得分:1)
在您的示例中,PasswordCheckTask
类是loginfragment
的子类(顺便说一句,惯例是将其命名为LoginFragment
)。因此,您可以在技术上定义counter
的变量LoginFragment
,并且两者都可以访问它。
但是,请注意您在这里处理线程,因此您应该使用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
中的计数器,所以你可以在其中定义它,除非我错过了什么。
答案 2 :(得分:0)
您可以创建一个Utils
类,并在其中定义一个public static int
变量,您可以从代码中的任何位置访问该变量。