0

ユーザーが写真を撮ってからHTTP経由で画像を送信できるAndroidアプリを開発しようとしています。ネイティブカメラを使用しています。

ユーザーが写真を撮って保存ボタンを押すと、アプリが情報を送信して応答を待つ間、黒い画面が表示されます。プログレスダイアログを表示したいのですが、何を試しても黒い画面が表示されたままになり、プログレスダイアログは応答を取得して戻るボタンを押した後にのみ表示されます。setContentView() を使用してみましたが、役に立ちませんでした。スレッドは HTTP リクエスト用です。

カメラの開始と終了のコードは次のとおりです。

protected void startCameraActivity()
{

    File file = new File( _path );
    Uri out = Uri.fromFile( file );

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE );
    intent.putExtra( MediaStore.EXTRA_OUTPUT, out );

    startActivityForResult( intent, 0 );
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{   
    switch( resultCode )
    {
    case 0:
        break;

    case -1:
        m_ProgressDialog = ProgressDialog.show(MainActivity.this, "Please wait...", "Uploading data ...", true, true);
        onPhoto();
        break;
    }
}

protected void onPhoto()
{
    taken = true;


    PipedOutputStream pos = new PipedOutputStream();
    PipedInputStream pis = null;
    try {
        pis = new PipedInputStream(pos);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Sender sender = new Sender(pos);
    Receiver receiver = new Receiver(pis);
    sender.start();
    receiver.start();
    try {
        sender.join();
        receiver.join();
        try {
            field.setText(receiver.getIn().readUTF());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {
        pis.close();
        pos.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
4

2 に答える 2

1

このリンクをチェックしてください:非同期タスクを使用してファイルをサーバーにアップロードするにはどうすればよいですか?

ではonPreExecute()、画像の処理中に表示する内容を定義できます(プログレスバー、スピナーなど)。

于 2012-08-02T19:02:09.907 に答える
0

AsyncTask を使用して、タスクの実行中に ProgressDialog を表示できます

 private class YourTask extends AsyncTask {
        private ProgressDialog dialog;

        private GetNewsTask(Context context) {
            this.dialog = new ProgressDialog(context);
        }

        @Override
        protected void onPreExecute() {
            this.dialog.setMessage(getResources().getString(R.string.loading));
            this.dialog.show();
        }

        @Override
        protected Object doInBackground(Object... objects) {
            // your hard work
            return something;
        }

        @Override
        protected void onPostExecute(Object result) {
            if (this.dialog.isShowing()) this.dialog.dismiss();
            // hanle results

        }

    }
于 2012-08-02T19:29:37.437 に答える