我做了一个简单的android示例,使用AsyncLoader读取html并将页面值放在Textfield上。

以前,它运行良好。现在,我向其中添加了服务,并且发现AsyncLoader失败。 AsyncLoader.onPostExecute将永远不会执行...

这是代码...

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AirCondition = (TextView)findViewById(R.id.air);
    AsyncLoader load = new AsyncLoader();
    load.execute();
    StartService();
}
public class AsyncLoader extends AsyncTask<Void, Void, Boolean> {
    protected Boolean doInBackground(Void... params) {
        try {
            air = CommonMethod.GetAirCondition();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    protected void onPreExecute() {}
    protected void onPostExecute(Boolean result) {
        if (result) {
            AirCondition.setText(air);
        }
    }
}


这是我声明的服务onStartCommand ...

public int onStartCommand(Intent intent, int flags, int startId){
    try{
        while(true)
        {
            Thread.sleep(10000);
            new Thread(){
                public void run()
                {
                    String result = CommonMethod.GetAirCondition();
                    if(Integer.parseInt(result.trim()) > 10)
                    {
                        Log.i("Allen","fuck");
                    }
                }
            }.start();
        }
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
    return 0;
}

最佳答案

您的onPostExecute()doInBackground()应该用@override注释:

@Override
protected void onPostExecute(Boolean result) {
    ...


您的onPreExecute()可以删除,因为默认实现不执行任何操作。

09-11 19:27