Android не может найти файл / каталог - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь сделать программу Socket между Java (ПК) и Android.Приложение выбирает изображение из галереи и отображает изображение, которое я выбрал.Когда я запускаю программу, я получаю эту ошибку.Я проверил другой пост о FİleNotFOundException, но не смог найти никакого решения. Может ли кто-нибудь мне помочь?

Вот мой код

public class SendfileActivity extends Activity   {
    /** Called when the activity is first created. */

    private static final int SELECT_PICTURE = 1;

    private String selectedImagePath;
    private String yol;
    private ImageView img;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("34");
        img = (ImageView) findViewById(R.id.ivPic);
        System.out.println("36");
        ((Button) findViewById(R.id.bBrowse))
                .setOnClickListener(new OnClickListener() {
                    public void onClick(View arg0) {
                        System.out.println("40");
                        Intent intent = new Intent();
                        intent.setType("image/*");
                        intent.setAction(Intent.ACTION_GET_CONTENT);
                        startActivityForResult(
                                Intent.createChooser(intent, "Select Picture"),
                                SELECT_PICTURE);
                        System.out.println("47");
                    }
                });
        ;
        System.out.println("51");
        Button send = (Button) findViewById(R.id.bSend);
        final TextView status = (TextView) findViewById(R.id.tvStatus);

        send.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                new Thread(new SocketThread()).start();
            }
        });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                Uri selectedImageUri = data.getData();
                yol = selectedImageUri.getPath();
                selectedImagePath = getPath(selectedImageUri);

                        TextView path = (TextView) findViewById(R.id.tvPath);
                path.setText("Image Path : " + yol);
                img.setImageURI(selectedImageUri);

            }
        }
    }

    public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        int column_index = cursor
                .getColumnIndex(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

    class SocketThread implements Runnable {

        @Override
        public void run() {

            Socket sock;
            try {
                sock = new Socket("10.0.2.2", 8080);
                System.out.println("Connecting...");

                // sendfile
                File myFile = new File(yol);

                byte[] mybytearray = new byte[(int) myFile.length()];

                FileInputStream fis = null;
                try {
                    fis = new FileInputStream(myFile);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                BufferedInputStream bis = new BufferedInputStream(fis);
                bis.read(mybytearray, 0, mybytearray.length);
                OutputStream os = sock.getOutputStream();
                System.out.println("Sending...");
                os.write(mybytearray, 0, mybytearray.length);
                os.flush();

                sock.close();
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

И это мой logcat.

W/System.err: java.io.FileNotFoundException: /document/image:78 (No such file or directory)
W/System.err: at java.io.FileInputStream.open(Native Method)
              at java.io.FileInputStream.<init>(FileInputStream.java:146)
              at com.example.murat.dhoproje.SendfileActivity$SocketThread.run(SendfileActivity.java:115)
              at java.lang.Thread.run(Thread.java:761)

1 Ответ

0 голосов
/ 28 мая 2018

java.io.FileNotFoundException: / document / image: 78

Это невозможный несуществующий путь к файловой системе, полученный с помощью

yol = selectedImageUri.getPath ();

Но вы должны сделать это совсем по-другому и использовать InputStream вместо FileInputStream.Так что измените

FileInputStream fis = null;попробуйте {fis = new FileInputStream (myFile);

до

InputStream is = getContentResolver().openInputStream(data.getData());

И сделайте с is то, что вы сделали с fis.

Кстати: не имеет ничего общего с программированием сокетов.Возможно, вы уже пытались открыть этот файл в onActivityResult (), чтобы показать себе и нам проблему.

...