0

私のアプリケーションでは、ボタンをクリックすると、アラートダイアログボックスが表示され、ファイル名を取得し、ファイルのユーザーから名前を取得して保存します。しかし、何が起こっているのかというと、ボタンをクリックした後、アラートダイアログボックスが画面の前に表示され、その前にファイルを保存しようとします.しかし、ユーザーがファイルの名前を入力する前にファイルを保存しようとするため、ファイルの保存時にファイル名がnullになります。ユーザーから名前を取得し、その名前を使用してファイルを保存できるように、アラート ボックスを使用する方法を呼び出します。

 public void savebitmap(Bitmap bitmap)
{
    str++;
    AlertDialog.Builder alert = new AlertDialog.Builder(Work.this);
    alert.setMessage("File name :");
    input = new EditText(Work.this);
    input.setLayoutParams(new LayoutParams(100,50));
    alert.setView(input);
    alert.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            NameValue = input.getText().toString();
            System.out.println("   file name.---"+NameValue);
        }

    });
    alert.show();
    System.out.println("file is..."+NameValue);

    try
    {
        System.out.println("in bitmap save...");
        File fn=new File("/sdcard/"+" filename4"+".png");
        FileOutputStream out=new FileOutputStream(fn);
        System.out.println(",,,,,,,,,,,,,,,"+out);
        Toast.makeText(getApplicationContext(), "In Save",Toast.LENGTH_SHORT).show();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90,out);
        out.flush();
        out.close();    
        Toast.makeText(getApplicationContext(), "File is Saved in   "+fn, Toast.LENGTH_SHORT).show();
    }
    catch(Exception e){
        e.printStackTrace();        
    }
}
4

2 に答える 2

1

最初に入力を取得し、次にユーザーがOKを押してファイルを作成する必要があることを確認する必要があります。したがって、 side にコードを記述する必要がありますonClick

これを試して、

public void savebitmap(Bitmap bitmap)
{
    str++;
    AlertDialog.Builder alert = new AlertDialog.Builder(Work.this);
    alert.setMessage("File name :");
    input = new EditText(Work.this);
    input.setLayoutParams(new LayoutParams(100,50));
    alert.setView(input);
    alert.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            NameValue = input.getText().toString();
            System.out.println("   file name.---"+NameValue);
            try
            {
                System.out.println("in bitmap save...");
                File fn=new File("/sdcard/"+" filename4"+".png");
                FileOutputStream out=new FileOutputStream(fn);
                System.out.println(",,,,,,,,,,,,,,,"+out);
                Toast.makeText(getApplicationContext(), "In Save",Toast.LENGTH_SHORT).show();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 90,out);
                out.flush();
                out.close();   

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

    });
    alert.show();
    System.out.println("file is..."+NameValue);


}
于 2013-03-04T05:07:21.367 に答える
1

すべてのファイル保存コードをボタンの onClick イベント内に移動するか、すべてのコードをメソッド内にラップしてから、ボタンのクリック時に次のように呼び出します。

public void savebitmap(Bitmap bitmap){
      //....your code here
        alert.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    NameValue = input.getText().toString();
                    System.out.println("   file name.---"+NameValue);

                    // put your code here to save file on Ok button click
                   saveFileOnSdCard(NameValue);
                }

            });
            alert.show();
    }

    private void saveFileOnSdCard(String str_filename){
      // move yor file saving code here..
    }
于 2013-03-04T05:08:08.003 に答える