如果 - else语句在Android中不起作用

时间:2017-02-22 17:04:26

标签: android if-statement android-asynctask

所以我的课程扩展了AppCompatActivity。按下按钮,我创建新的异步任务,用于互联网连接传递对此类的引用,并在doInBackground结束时,我在我的类中调用函数。

private LoginAct act;

[...]

@Override
protected Object doInBackground(Object[] params) {
    try
    {
        //LOGIN into account or create new one - returns id (as string str)
        int id = Integer.parseInt(str.toString());
        System.out.println(id);
        //id is fine
        act.postexecute(id);
    } catch (Exception e) {
        return "ERROR: " + e.getMessage();
    }
    return null;
}

至于现在,一切都很好,但是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 语句都不支持。我不知道,问题可能是什么,而我所看到的所有问题都不能解决我的问题......

3 个答案:

答案 0 :(得分:0)

代码很好。虽然,您不能从那里对GUI进行更改。

答案 1 :(得分:0)

您不应该从其他线程更改UI。使用runOnUiThread of activity或使用AsyncTask的onPostExecute()。

将doInBackground()的返回类型更改为int。

@Override
protected int doInBackground(Object[] params) {
int id = some_default_value;
try
{
    //LOGIN into account or create new one - returns id (as string str)
    id = Integer.parseInt(str.toString());
    System.out.println(id);
    //id is fine
    //act.postexecute(id);
} catch (Exception e) {

}
return id;
}

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

答案 2 :(得分:0)

AsyncTask已经为您提供了一个名为onPostExecute()的方法,您可以处理任务的结果,您不需要为它实现一个方法,因为您无法在{{1}期间更改UI }}

我不知道您的代码是怎样的,但在这种情况下,您可以在类的顶部定义一个类变量

doInBackGround()

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