If-else语句在Android中不起作用

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

所以,我让我的班级扩展我的活动。在按下按钮时,我正在为internet连接创建新的异步任务,并将引用传递给这个类,在doInBackground的末尾,我调用了类中的函数

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();
}