我的Android MainActivity
及其setContentView
。视图是黑/蓝渐变背景和ImageView
。这是我的onCreate
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* Activity elements
* */
ImageView rt_logo = (ImageView) findViewById(R.id.rt_logo);
/**
* Activity variables
* */
HttpGetRequest httpGetRequest = new HttpGetRequest(rt_logo);
try {
URI uri = new URI("http://www.myurl.com");
URI[] uris = {uri};
response = httpGetRequest.execute(uris).get();
[...]
}
要检索页面代码,我会AsyncTask
。对于调试,我使用睡眠5秒钟。
ImageView rt_logo;
public HttpGetRequest(ImageView _rt_logo) {
rt_logo = _rt_logo;
}
@Override
protected String doInBackground(URI... uris) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(uris[0]);
[...]
SystemClock.sleep(5000);
getString = stringBuffer.toString();
return getString;
}
我的问题是,在黑色/蓝色渐变和徽标显示之前我得到一个白色屏幕5秒,我想在AsyncTask
之后。
为什么我不能在应用启动时获得它?
感谢。
答案 0 :(得分:0)
目前尚不清楚你正在尝试用睡眠做什么()。但是,既然你已经在'AsyncTask'的doInBackground方法中提到它,那么只有在Async任务启动后才会执行它。如果您想在启动应用程序时遇到延迟,您可能应该在AsyncTask之外的onCreate()方法中编写延迟。
答案 1 :(得分:0)
像Siddharth一样,我也对你想要做的事感到困惑。你正在做的事情并非完全错误,这基本上是启动线程,等待5秒,然后从你的Http请求中获取信息。这不应该导致背景不出现。但我确实怀疑;这一行:
response = httpGetRequest.execute(uris).get();
您期待结果。由于它是一个单独的线程,你可能没有想到的反应。实际上它甚至可能是空的(直到我看到所有代码才会知道)。无论如何,我会检查,因为如果你正在做一些可能导致响应延迟的事情。很高兴看到onCreate
的其余内容。
答案 2 :(得分:0)
我找到了一种执行AsyncTask onCreate()的方法,但仍然有我的内容。
正如Andy所说,MainActivity不能指望来自AsyncTask的价值,否则它会在显示内容之前等待。所以在onCreate中,将参数中的活动提供给AsyncTask并执行它。
HttpGetRequest httpGetRequest = new HttpGetRequest(MainActivity.this);
try {
URI uri = new URI("http://www.domain.com/live.html");
URI[] uris = {uri};
httpGetRequest.execute(uris);
} catch (URISyntaxException e) {
Log.e(TAG, "Wrong URI syntax : " + e.getMessage());
e.printStackTrace();
}
然后,在AsyncTask中,创建一个onPostExecute方法。在其中,完成MainActivity并调用另一个。如果您希望用户看不到它,请在活动开始时禁用动画。
Activity activity;
public HttpGetRequest(Activity activity) {
this.activity = activity;
}
public void onPostExecute(String response) {
Bundle bundle = new Bundle();
bundle.putString("response", response);
Intent intent = new Intent(this.activity, LiveActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.putExtras(bundle);
this.activity.startActivity(intent);
}
向您的新活动发送AsyncTask响应,就是这样!