0

私のAndroidアプリケーションでは、ボタンをクリックすると新しいアクティビティが開始され、SDカードから画像情報を取得して表示します。画像のサムネイルの1つをクリックすると、その画像を最初のアクティビティに送信します。startactivityforresult.howを使用してこれを行うにはどうすればよいですか。画像パスを保存して最初のアクティビティに送り返すには、動的にリストしているので、すべての画像からuriを保存するための配列が必要です

最初の活動で-

  public void importFile(View v){

    Intent intent=new Intent(this,ImportFile.class);

    startActivityForResult(intent, 1);

}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode==1)
    {
        String path=data.getDataString();

    }
}

2番目のアクティビティ-

 int j=0;
  File[] imagefile;
 File f = new File("/sdcard");
        File[] files = f.listFiles();
        for(int i = 0; i < files.length; i++) {
            File file1 = files[i];
         imagefile[j]=file1; //here getting  nullpointer exception
             }
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        int j;
        // TODO Auto-generated method stub
        for(j=1;j<idcount;j++){
            if(ch[j].isChecked())
            {
                System.out.println("PPPPPPPPPPPPPPPPPP"+j);
                i=new Intent();
                i.putExtra("file","mmm");//here how can i send image path
                setResult(RESULT_OK, i);
                finish();
            }       
        }
    }    
4

3 に答える 3

0

次のように Import.java Acitivty で sdcard から画像を取得するとします。

File file = new File(getExternalFilesDir(null), "MyFile.jpg");

そのため、ファイル オブジェクトに画像を配置したら、結果データとして使用されるインテントにそのパスを配置するだけで済みます。結果データは「呼び出し元」アクティビティに送り返されます。「呼び出された」アクティビティのある時点で、次のことを行う必要があります。

 Intent resultData = new Intent();
 resultData.putExtra("imagePath", file.getAbsolutePath());
 setResult(RESULT_OK,returnIntent);     
 finish();

あなたのメソッド onActivityResult:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
   super.onActivityResult(requestCode, resultCode, data);

   if(requestCode==RESULT_OK)
   {
       String path = data.getStringExtra("imagePath");           

   }

}

それでおしまい!

于 2013-02-15T12:17:15.987 に答える
0

エクストラでファイル名を設定したので、エクストラから取得してみてください。

文字列パス= data.getStringExtra("ファイル");

于 2013-02-15T11:52:16.007 に答える
0

この答えを試してください:

これを使用すると、Gallery から画像を取得し、それを uri の imageview または arraylist に配置できます。ここで、filepath は、sd カードから選択した写真イメージのパスです。これを Uri の配列リストに直接追加できます。または、image.setImageBitmap(); を使用して画像をビットマップとして設定できます。

Intent intent = new Intent(Intent.ACTION_PICK , android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
    YourActivity.this.startActivityForResult(intent,SELECT_PICTURE);

onActivityResult メソッド:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String filePath;
        Log.i(TAG, "onActivityResult,requestCode" + requestCode);

        if (requestCode == SELECT_PICTURE) {
            try {
                System.out.println("I ma here1");

                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA };

                Cursor cursor = getContentResolver().query(selectedImage,
                        filePathColumn, null, null, null);
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                filePath = cursor.getString(columnIndex);
                Log.i(TAG, "======gallery image path=======:" + filePath);
                // ======gallery image path=======:/mnt/sdcard/wallpaper4.jpg

                // imageViewPhoto.setImageURI(selectedImage);
                cursor.close();
                Bitmap yourSelectedImage = null;
                yourSelectedImage = BitmapFactory.decodeFile(filePath);
                image_sublable.setImageBitmap(yourSelectedImage);
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                yourSelectedImage.compress(CompressFormat.JPEG, 100, os);
                image = os.toByteArray();
                imagefilePath = filePath;
                Log.i(TAG, "image in method=>" + image);

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

ファイルパスを文字列に直接追加して、文字列配列に格納できます。これを使ってみて、ちょっと想像してみてください。

 int j=0;
      String[] imagefile = new String[]{};
           String fileString = filePath; // copy file path into fileString
            String[] files = f.listofString();
          for(int i = 0; i < files.length; i++) {
                String fileString = files[i];
             imagefile[j]=fileString; //here getting  nullpointer exception
                 }

それがあなたを助けることを願っています。

于 2013-02-15T12:36:29.053 に答える