If-else语句在Android中不起作用
所以,我让我的班级扩展我的活动。在按下按钮时,我正在为internet连接创建新的异步任务,并将引用传递给这个类,在doInBackground的末尾,我调用了类中的函数If-else语句在Android中不起作用,android,if-statement,android-asynctask,Android,If Statement,Android Asynctask,所以,我让我的班级扩展我的活动。在按下按钮时,我正在为internet连接创建新的异步任务,并将引用传递给这个类,在doInBackground的末尾,我调用了类中的函数 private LoginAct act; [……] 就目前而言,一切都很好,但postexecute方法无法正常工作,因为它被支持: public void postexecute(int id) { //it works fine here if(id == 0) { System
private LoginAct act;
[……]
就目前而言,一切都很好,但postexecute方法无法正常工作,因为它被支持:
public void postexecute(int id)
{
//it works fine here
if(id == 0)
{
System.out.println("postexecuting!");
edPas.setError("Nickname and password don't match!");
loadBar.setVisibility(View.GONE);
}
else
{
System.out.println("Less postexecuting!");
onBackPressed();
}
}
问题是,无论id输入是什么,if或else语句都不支持。我不知道问题可能是什么,我看到的所有问题都与我的问题不太接近……代码很好。但是,不允许您从那里对GUI进行更改。您不应该从其他线程更改UI。使用activity的runOnUiThread或AsyncTask的onPostExecute()
@Override
protected void onPostExecute(int id) {
super.onPostExecute(id);
//it works fine here
if(id == 0)
{
System.out.println("postexecuting!");
edPas.setError("Nickname and password don't match!");
loadBar.setVisibility(View.GONE);
}
else
{
System.out.println("Less postexecuting!");
onBackPressed();
}
}
将doInBackground()的返回类型更改为int
现在实现AsyncTask的onPostExecute()
@Override
protected void onPostExecute(int id) {
super.onPostExecute(id);
//it works fine here
if(id == 0)
{
System.out.println("postexecuting!");
edPas.setError("Nickname and password don't match!");
loadBar.setVisibility(View.GONE);
}
else
{
System.out.println("Less postexecuting!");
onBackPressed();
}
}
AsyncTask已经为您提供了一个名为
onPostExecute()
的方法,您不需要为它实现方法,因为您无法在doInBackGround()过程中更改UI
我不知道您的代码是如何编写的,但是在这种情况下,您可以在类的顶部定义一个类变量
private int id;
在doInBackground
中保存它:
@Override
protected Object doInBackground(Object[] params) {
try
{
//LOGIN into account or create new one - returns id (as string str)
id = Integer.parseInt(str.toString());
System.out.println(id);
} catch (Exception e) {
return "ERROR: " + e.getMessage();
}
return null;
}
然后,onPostExecute()
:
您无法从后台线程更新UI。在异步任务完成后,我如何让我的UI执行某些操作?请编辑原始帖子以包含完整的异步任务代码。onPostExecute是您在AsyncTaskMoving“act.postexecute(id);”中为UI执行操作的地方我很好,谢谢。但我仍然想知道,为什么要调用这个函数,而System.out代替“//它在这里工作得很好”起作用了,但如果语句不起作用的话。。。
@Override
protected Object doInBackground(Object[] params) {
try
{
//LOGIN into account or create new one - returns id (as string str)
id = Integer.parseInt(str.toString());
System.out.println(id);
} catch (Exception e) {
return "ERROR: " + e.getMessage();
}
return null;
}
@Override
protected void onPostExecute(typeYouDefinedAsArgument myArgument){
super.onPostExecute(myArgument);
if(id == 0)
{
System.out.println("postexecuting!");
edPas.setError("Nickname and password don't match!");
loadBar.setVisibility(View.GONE);
}
else
{
System.out.println("Less postexecuting!");
onBackPressed();
}