public class MainActivity extends AppCompatActivity {
private static final String TAG = "Main";
private Handler mainHandler = new Handler();
public static Context cont;
private long BPressedTime;
public static Toast Toaster;
private EditText EditText1, EditText2;
private TextView Head;
private Button Login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText1 = (EditText)findViewById(R.id.EditText1);
EditText2 = (EditText)findViewById(R.id.EditText2);
Head = (TextView)findViewById(R.id.Head);
Login = (Button)findViewById(R.id.Login);
cont = getApplicationContext();
Login.setOnClickListener(new ViewListeners(EditText1, EditText2, Head, Login, getApplicationContext(), Toaster));
}
public void runonui(Runnable run){
Thread thread = new Thread(run);
runOnUiThread(thread);
}
public class ViewListeners extends FireBaseConsole implements View.OnClickListener{
private static final String TAG = "View";
private FireBaseConsole FireBase;
private Thread thread;
private long ErrorTime;
private EditText E1, E2;
private Button B1;
private TextView T1;
private Context cont;
public ViewListeners(EditText E1, EditText E2, TextView T1, Button B1, Context cont, Toast Toaster){
this.B1 = B1;
this.E1 = E1;
this.E2 = E2;
this.T1 = T1;
this.cont = cont;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.Login:
String usr, psw, send;
usr = this.E1.getText().toString();
psw = this.E2.getText().toString();
if(!usr.equals("") && !psw.equals("") && usr != null && psw != null){
send = usr + " " + psw;
Runnable run = new GenRun<TextView>(this.T1, (Object)send);
runonui(run);//Starting the thread
}else if(this.cont != null){
if(ErrorTime + 1000 < System.currentTimeMillis()){
MainActivity.TToast("Incorrect email or password.");
}
ErrorTime = System.currentTimeMillis();
}
break;
default:
break;
}
}
}
public class GenRun <T> implements Runnable {
private final static String TAG = "GenRun";
private T obj;
private Object extra;
public boolean isAlive;
public GenRun(T obj, Object ex){
this.obj = obj;
this.extra = ex;
isAlive = true;
}
@Override
public void run(){
if(this.obj instanceof View)
if(this.obj instanceof TextView) {
try {//Here is the problem, it only shows the text ="2"
for (int i = 0; i < 3; i++) {
((TextView)this.obj).setText(" " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
代码就像一个登录活动。 如果单击该按钮,并且密码和用户名已填满,则应该启动一个线程以更改TextView。为了进行测试,我尝试使用for循环更改它,并在每次迭代之间使用睡眠将i = 0更改为i = 2。我不知道为什么它不起作用。
问题: 它只打印“ 2”
想要的输出: 打印:“ 0”,“ 1”,“ 2”,两者之间有第二个区别。