>source

내 앱이 기본적으로 그렇게 하는 작업을 하고 있습니다. 내부 저장소에서 이미지를 선택하면 해당 이미지가 사용자 정의 디렉토리에 복사됩니다. 그러나 불행히도 나에게 오류가 발생하고 응용 프로그램이 작동을 멈췄습니다. 여러 자습서를 시도하고 따라했지만 결과를 얻지 못하고 모든 노력 끝에 이것을 여기에 넣었습니다 ...

미리 감사합니다.

오류! 행 번호는 아래 code에 주석 처리되어 있습니다.

자바 code

public class grid extends AppCompatActivity {
Button add;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grid);
        getSupportActionBar().hide();
        add=findViewById(R.id.btnadd2);
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                buttonPickImage();
            }
        });
    }
        public void buttonPickImage()
        {
            Intent i= new Intent();
            i.setType("image/*");
            i.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(i,"Select Image"),101);
        }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode== 101 &
&
 resultCode== RESULT_OK &
&
 data!=null)
        {
            Uri uri= data.getData();
            String path= getRealPathFromURI(this,uri);
            String name= getFileName(uri);
            try {
        //Line No 61
        insertInPrivateStorage(name,path);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    private void insertInPrivateStorage(String name, String path) throws IOException {
        FileOutputStream fos= openFileOutput(name,MODE_APPEND);
//Line No 71
        File file= new File(path);
        byte[] bytes= getBytesFromFile(file);
        fos.write(bytes);
        fos.close();
        Toast.makeText(getApplicationContext(),"File saved in :"+ getFilesDir() + "/"+name,Toast.LENGTH_SHORT).show();
    }
    private byte[] getBytesFromFile(File file) throws IOException {
        byte[] data= FileUtils.readFileToByteArray(file);
        return data;
    }
    private String getFileName(Uri uri)
    {
        String result= null;
        if (uri.getScheme().equals("content")) {
            Cursor cursor= getContentResolver().query(uri, null, null, null, null);
            try {
                if (cursor != null &
&
 cursor.moveToFirst())
                {
                    result= cursor.getString(cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME));
                }
            } finally {
                cursor.close();
            }
        }
        if (result== null) {
            result= uri.getPath();
            int cut= result.lastIndexOf('/');
            if (cut != -1) {
                result= result.substring(cut + 1);
            }
        }
        return result;
    }
    private String getRealPathFromURI(Context context, Uri uri)
    {
        String[] proj= {MediaStore.Images.Media.DATA};
        Cursor cursor= context.getContentResolver().query(uri, proj, null, null,
                null);
        if (cursor != null) {
            int column_index= cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }
        return null;
    }
}

수정 감사합니다 형님

Ahtisham Ahmed2022-01-11 03:31:24

음... 유효한 값 대신 null을 반환한 것은 무엇입니까?

blackapps2022-01-11 07:24:47

이제 경로에서 값을 얻습니다. 예: 8179 하지만 여전히 내부 저장소에 이미지를 저장하지 않고 이제 이 줄에서 오류가 발생합니다. byte[] bytes= fullyReadFileToBytes(file); FileNotFoundException: 8179: 열기 실패: ENOENT(해당 파일 또는 디렉터리 없음)

Ahtisham Ahmed2022-01-11 07:54:25

8179는 무엇입니까? 몰라.

blackapps2022-01-11 08:11:02

이것은 내 경로 변수의 값입니다. 갤러리에서 diff 이미지를 선택하면 변경됩니다.

Ahtisham Ahmed2022-01-11 08:12:19
  • 이전 PHP MySQL -mysql에 업로드된 이미지가 PHP에 표시되지 않음
  • 다음 ASP.Net에서 상위 모델과 함께 모델 컬렉션을 게시하는 방법은 무엇입니까?