如何在 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);

    }
}

}