android - 确保 Activity 在执行异步任务后开始

标签 android

我想确保我的 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/

相关文章:

android - 创建一个包含固定数量项目的 SQLITE 表

Android View Pager 保留 View 状态

java - 地理编码器不断返回 true

android - 一些特殊字符在mysql数据库中被翻译为 '?'

android - RubyMotion Android 自定义按钮

android - 如何将 Imageview 放入移动应用程序 [XAMARIN,ANDROID]

android - 用android读取xml

android - 工具 : replace not replacing in Android manifest

Android StrictMode 总是提示 FileReader

javascript - Javascript更改音频src