1

私のプログラムでは、サーバーからデータを収集するAsynchTaskを介して、スピナーを介してデータからユーザーが選択するのを待ちます(AlertDialog.Builderは、データをスピナー形式で表示するために使用されます)。

私のコードは次のとおりです。

public class Splash extends Activity {

    protected boolean _active = true;
    protected int _splashTime = 1500;
    protected long startTime = 0;   


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
        startTime = System.currentTimeMillis();
        new InitialSetAsync().execute();

    }

    private class InitialSetAsync extends AsyncTask<String, Integer, String> {

        @Override
        protected String doInBackground(String... params) {
            InitialSetting ins = new InitialSetting(Splash.this);
            ins.doInitialSetting();

            try {
                while ((System.currentTimeMillis() - startTime) < _splashTime) {
                    Thread.sleep(100);
                }

            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
                Intent intent = new Intent(getApplicationContext(),
                        MainActivity.class);
                startActivity(intent);
                Splash.this.finish();

        }

    }

}

スピナー形式のデータ表示部分:

public class InitialSetting {

    private Context context;

    DbTransaction dbTran;
    Process checkProcess;
    String userCountry;
    String country = "";
    String[] availableCountries;
    int flag=0;
    public InitialSetting(Context context) {
        this.context = context;
    }

    public int doInitialSetting() {
            checkProcess = new Process();
        String hasVisit = checkProcess.retrieveFromPreference(context);
        if (hasVisit.equals("true")) {

        } else {
availableCountries = checkProcess.checkAvailableCountries();

            final AlertDialog.Builder ab = new AlertDialog.Builder(context);

            ((Activity) context).runOnUiThread(new Runnable() {
                public void run() {
                    ab.setSingleChoiceItems(availableCountries, -1,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int whichButton) {



                                    country = availableCountries[whichButton];

                                    if (!country.equals("") && country != null) {

                                        Configuration.setCounty(country);

                                        checkProcess.copyDatabaseFromServer(
                                                country, context);
                                        dbTran.storePreference(country);

                                        dialog.cancel();
                                    }

                                }
                            });
                    ab.show();

                }
            });

        }
        return 0;
    }

}

私の場合、ユーザーがスピナーから値を選択してエラーを引き起こす前に、スレッドが実行されています。ユーザーが値を選択するまで非同期タスクを一時停止する方法。

4

0 に答える 0