我想确保我的 Activity 在异步任务执行后开始。截至目前,它在异步任务在后台完成之前开始
这是调用新 Activity 的地方。在调用新 Activity 之前,我调用了 PagerAsyncTask。我想确保仅在成功完成 PagerAsyncTask 后才调用新 Activity 。
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
new PagerAsyncTask().execute();
sharedPreferences = getSharedPreferences(Constants.MY_PREFS, 0);
SharedPreferences.Editor editor = getSharedPreferences(Constants.MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putBoolean("hasadd", false);
editor.commit();
Log.e("hi", "dsscdds");
startActivity(new Intent(SplashScreenActivity.this, NavigationActivity.class));
PagerAsyncTask
class PagerAsyncTask extends AsyncTask<String,Void,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
StringBuilder sb=null;
BufferedReader reader=null;
String serverResponse=null;
try {
URL url = new URL("https://enigmatic-woodland-35608.herokuapp.com/pager.json");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setConnectTimeout(5000);
connection.setRequestMethod("GET");
connection.connect();
int statusCode = connection.getResponseCode();
//Log.e("statusCode", "" + statusCode);
if (statusCode == 200) {
sb = new StringBuilder();
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
}
connection.disconnect();
if (sb!=null)
serverResponse=sb.toString();
Log.e("haha", serverResponse);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return serverResponse;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//All your UI operation can be performed here
//Response string can be converted to JSONObject/JSONArray like
try {
//String mr[] = new String[5];
JSONObject response=new JSONObject(s);
Iterator<?> keys = response.keys();
int i=0;
while( keys.hasNext() ) {
String key = (String)keys.next();
Log.e("hi",key);
Log.e("hey",response.getString(key));
// mr[i]=response.getString(key);
// Log.e("e=",mr[i]);
i++;
}
Log.e("I", String.valueOf(i));
Iterator<?> keys1 = response.keys();
mr = new String[i];
int k=0;
while ( keys1.hasNext() )
{
String key = (String)keys1.next();
mr[k++]=response.getString(key);
Log.e("fdvfd",mr[k-1]);
}
for (int j=0;j<mr.length;j++)
{
Log.e("dsd",mr[j]);
}
isComplete=true;
setMr(mr);
setSet(1);
new RestaurantFragment().setmResources(mr);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
最佳答案
有几种方法可以做到这一点
1) 在 onPostExecute() 中使用 startActivity
2) 将 Activity 引用传递给异步任务并从 onPostExecute 调用 Activity 中的某些函数,如所示 here
3) 将函数回调传递给 AsyncTask,如图所示 here .尽管这对您的任务来说过于复杂
关于android - 确保 Activity 在执行异步任务后开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36102983/