所以我的课程扩展了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 语句都不支持。我不知道,问题可能是什么,而我所看到的所有问题都不能解决我的问题......
答案 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()