如何在 oncreate 完成后 post http?
How to post http after oncreate complete?
我有一个 MainActivity
,里面有 onCreate
方法。在 class 中,它应该将 layout
和 post 数据加载到 server
。只要activity开始,就变成空白,只去下一个activitySignUpActivity
。我需要的是 MainActivity
布局将首先显示,然后 execute
httpPost
。
这是我的代码
public class MainActivity extends Activity {
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
context = this;
new MainAsyncTask().execute(""); // where should i put this code? here??
}
private class MainAsyncTask extends AsyncTask<Object, Integer, String> {
@Override
protected String doInBackground(Object... params) {
String result = null;
String url = "some url";
Log.i("Post", "Post HTTP");
HttpPostHelper.postData(url); // method to post the http. i made myself
intent = new Intent(context, SignUpActivity.class);
startActivity(intent);
return result;
}
}
}
我只想在布局完全显示在设备上后执行 MainAsyncTask.execute("")
。
已解决
我移动 new MainAsyncTask().execute("");
并将其添加到此处,它工作正常:
@Override
protected void onStart() {
super.onStart();
new MainAsyncTask().execute("");
}
调用 AsynTask
似乎没问题,但你不应该在 doInBackground()
中调用你的意图
在onPostExecute()
方法中调用
protected void onPostExecute(String result){
intent = new Intent(context, SignUpActivity.class);
startActivity(intent);
}
尝试 activity
的 onStart() 方法
您可以在 startActivity
之前尝试 Thread.sleep
,以便给主布局一些时间来加载和显示。您还应该在 onPostExecute
.
中调用 startActivity
根据您的代码,它应该是这样的。注意@doinbackground()
,因为这里不正确。
public class MainActivity extends Activity {
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
context = this;
new MainAsyncTask().execute(""); // where should i put this code? here??
}
private class MainAsyncTask extends AsyncTask<Object, Integer, String> {
protected void onPreExecute( ){
//start Progressbar
progressBar.show();
}
@Override
protected String doInBackground(Object... params) {
String result = null;
String url = "some url";
Log.i("Post", "Post HTTP");
HttpPostHelper.postData(url); // method to post the http. i made myself
return result;
}
protected void onPostExecute(String result){
//stuff u want in main thread
progressBar.cancell();
intent = new Intent(context, SignUpActivity.class);
startActivity(intent);
}
}
}
我有一个 MainActivity
,里面有 onCreate
方法。在 class 中,它应该将 layout
和 post 数据加载到 server
。只要activity开始,就变成空白,只去下一个activitySignUpActivity
。我需要的是 MainActivity
布局将首先显示,然后 execute
httpPost
。
这是我的代码
public class MainActivity extends Activity {
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
context = this;
new MainAsyncTask().execute(""); // where should i put this code? here??
}
private class MainAsyncTask extends AsyncTask<Object, Integer, String> {
@Override
protected String doInBackground(Object... params) {
String result = null;
String url = "some url";
Log.i("Post", "Post HTTP");
HttpPostHelper.postData(url); // method to post the http. i made myself
intent = new Intent(context, SignUpActivity.class);
startActivity(intent);
return result;
}
}
}
我只想在布局完全显示在设备上后执行 MainAsyncTask.execute("")
。
已解决
我移动 new MainAsyncTask().execute("");
并将其添加到此处,它工作正常:
@Override
protected void onStart() {
super.onStart();
new MainAsyncTask().execute("");
}
调用 AsynTask
似乎没问题,但你不应该在 doInBackground()
在onPostExecute()
方法中调用
protected void onPostExecute(String result){
intent = new Intent(context, SignUpActivity.class);
startActivity(intent);
}
尝试 activity
的 onStart() 方法您可以在 startActivity
之前尝试 Thread.sleep
,以便给主布局一些时间来加载和显示。您还应该在 onPostExecute
.
startActivity
根据您的代码,它应该是这样的。注意@doinbackground()
,因为这里不正确。
public class MainActivity extends Activity {
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
context = this;
new MainAsyncTask().execute(""); // where should i put this code? here??
}
private class MainAsyncTask extends AsyncTask<Object, Integer, String> {
protected void onPreExecute( ){
//start Progressbar
progressBar.show();
}
@Override
protected String doInBackground(Object... params) {
String result = null;
String url = "some url";
Log.i("Post", "Post HTTP");
HttpPostHelper.postData(url); // method to post the http. i made myself
return result;
}
protected void onPostExecute(String result){
//stuff u want in main thread
progressBar.cancell();
intent = new Intent(context, SignUpActivity.class);
startActivity(intent);
}
}
}