-3

私は Android 開発にかなり慣れていないので、基本的なアプリから始めようと思いました。ボタンを押すと、コードに記述された場所にファイルがコピーされます (以下のコードを参照)。インストール ボタンを押して、ファイルがその場所にコピーされたときに、トースト メッセージに「正常にインストールされたか、ファイルのコピー中にエラーが発生しました」と表示するようにします。これをどのように実装しますか?

public class TrialActivity extends Activity {

    private ProgressDialog progressDialog;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        runDialog(5);
    }

    private void runDialog(final int seconds)
        {
            progressDialog = ProgressDialog.show(this, "Please Wait...", "unpacking patch in progress");

            new Thread(new Runnable(){
                    public void run(){
                        try {
                            Thread.sleep(seconds * 1000);
                            progressDialog.dismiss();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();

            ((Button)findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View paramView)
                        {

                        }

                        {

                            InputStream in = null;
                            OutputStream out = null;
                            String filename="savegame.bin";
                            try {

                                in = getResources().openRawResource(R.raw.savegame);
                                out = new FileOutputStream("/sdcard/Android/data/files/" + filename);
                                copyFile(in, out);
                                in.close();
                                in = null;
                                out.flush();
                                out.close();
                                out = null;
                            } catch(Exception e) {
                                Log.e("tag", e.getMessage());
                                Message message = Message.obtain();
                                message.what = 1;  // success message
                                mHandler.sendMessage(message);


                            }

                        }
                    private void copyFile(InputStream in, OutputStream out) throws IOException {
                        byte[] buffer = new byte[1024];
                        int read;
                        while((read = in.read(buffer)) != -1){
                            out.write(buffer, 0, read);

                        }
                    }
                }
                );
        }



    Handler mHandler = new Handler() {

            public void handleMessage( Message msg )
                {
                    Toast toast;
                    switch(msg.what)
                    {
                    case 1: // for success
                        toast = Toast.makeText(getBaseContext(), "Created By MRxBIGxSTUFF", Toast.LENGTH_SHORT);
                        toast.show();
                        break;
                    case 0: // for Error
                        toast = Toast.makeText(getBaseContext(), "Error... Application has shutdown", Toast.LENGTH_LONG);
                        toast.show();
                        break;
                    }
                }
        };
}
4

2 に答える 2

0

プロセスをバックグラウンドで実行するには、AsyncTaskを使用することをお勧めします。これは、コピーファイルのサイズが大きくなるユーザーインターフェイスイベントをフリーズしません。

操作の読み込み中に進行状況バーを表示できます。

public class CopyFiles extends AsyncTask<Void, Void, Void>
{  
@Override
protected void onPreExecute()
{  
    super.onPreExecute();
    dialog.setMessage("Please wait...");
    dialog.setCancelable(false);
    dialog.show();

} 
@Override 
protected void onProgressUpdate(Void... values) {
    super.onProgressUpdate(values);
    // Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
 }

@Override 
protected void onPostExecute(Void result)

{ 
      //Post Execute
       dialog.cancel();
      //Use toast here to toast the message
      //Check condition toast message
      Toast.makeText(getBaseContext(), "Created By MRxBIGxSTUFF", Toast.LENGTH_SHORT);
}
@Override
protected Void doInBackground(Void... params) {

  // Your operation..Dont Edit Any Views here

    return null;
}
} 

これはファイルを処理するための最良の方法の1つだと思います(つまり、コピー、ダウンロードなど)

それが役に立てば幸い

于 2012-09-13T16:18:53.153 に答える
0

トーストを表示するには、自分で作成して表示する必要があります。このような:

CharSequence text = "Hello toast!";
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();

トーストの詳細については、こちらをご覧ください。

そして、あなたのコード/sdcard/WRONGであるハードコードとしてバグがあります。getExternalStorageDirectory()を使用する

于 2012-09-13T16:15:23.667 に答える