进程对话框未显示(Android / AsyncTask)

时间:2014-07-16 11:52:24

标签: android android-asynctask

有人请阅读下面给出的代码, 进程对话框未显示, 似乎是一个小错误:D

提前致谢。

public class InternalData extends Activity implements OnClickListener {

    EditText sharedData;
    TextView dataResults;
    FileOutputStream fos;
    String FILENAME = "internalString";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sharedprefs);
        InitializeVars();

    }

    public void InitializeVars() {

        Button save = (Button) findViewById(R.id.bSave);
        Button load = (Button) findViewById(R.id.bLoad);
        sharedData = (EditText) findViewById(R.id.etSharedPrefs);
        dataResults = (TextView) findViewById(R.id.tvSharedPrefs);
        save.setOnClickListener(this);
        load.setOnClickListener(this);

        try {

            fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
            fos.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {

        case R.id.bSave:

            String data = sharedData.getText().toString();

            /*
             * //Saving data via File File f = new File(FILENAME); try { fos =
             * new FileOutputStream(f); fos.close(); } catch(IOException e) {
             * e.printStackTrace(); }
             */

            try {

                fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
                fos.write(data.getBytes());

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

            break;

        case R.id.bLoad:

            new loadSomeStuff().execute(FILENAME);

            break;

        }
    }

    public class loadSomeStuff extends AsyncTask<String, Integer, String> {

        ProgressDialog dialog = new ProgressDialog(InternalData.this);


        protected void onPreExecute(String f) {

        //  dialog = new ProgressDialog(InternalData.this)

            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setMax(100);
            dialog.show();

        }

        @Override
        protected String doInBackground(String... params) {

            // all this can be done without making this whole AsyncTask class,
            // but it will exaust our activity user interface, / slow it down

            String collected = null;
            FileInputStream fis = null;


            for (int i = 0; i < 20; i++) {

                publishProgress(5);

                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }

            dialog.dismiss();

            try {

                fis = openFileInput(FILENAME);
                byte[] dataArray = new byte[fis.available()];

                while (fis.read(dataArray) != -1) {
                    collected = new String(dataArray);
                }

            } catch (IOException e) {
                e.printStackTrace();
            } finally {

                try {
                    fis.close();
                    return collected;

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

            return null;
        }

        protected void onProgressUpdate(Integer... progress) {

            dialog.incrementProgressBy(progress[0]);

        }

        protected void onPostExecute(String result) {

            dataResults.setText(result);

        }

    }

}

1 个答案:

答案 0 :(得分:0)

更改你的onPreExecute()错误使用它,你应该改为

@Override
protected void onPreExecute() {
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    dialog.setMax(100);
    dialog.show();
}