从Android

时间:2017-02-11 21:14:56

标签: android file server uri

我正在尝试从图像中获取路径以便稍后将其发送到服务器。问题是,当我尝试获取它时,我的代码不起作用(你会看到有一个额外的}。这是因为来自OnCreate的代码结束然后我踩掉其他函数):

enviar.setOnClickListener(new View.OnClickListener() {
            String datos="";
            //Bundle extras=getIntent().getExtras();
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");
                startActivityForResult(intent, 0);
                //Uri imagen=intent.getData();
                //datos=imagen.getPath();
                //mostrar.setText(datos);
            }
        });
    }

    private String getRealPathFromURI(Uri contentURI) {
        String result;
        Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
        if (cursor == null) {
            result = contentURI.getPath();
        } else {
            cursor.moveToFirst();
            int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
            result = cursor.getString(idx);
            cursor.close();
        }
        return result;
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

        switch(requestCode) {
            case 0:
                if(resultCode == this.RESULT_OK){
                    try {
                        final Uri imageUri = imageReturnedIntent.getData();
                        String path = getRealPathFromURI(imageUri);
                        mostrar.setText(path);
                    }
                    catch (Exception e) {
                        Log.e("Erroreeeee: ", e.getMessage());
                    }
                }
                break;
        }
    }

1 个答案:

答案 0 :(得分:0)

你有两个问题。

第一个是startActivityForResult()不是即时的。您在下一个陈述中没有任何结果。

因此,欢迎致电startActivityForResult(),就像我在this sample app中所做的那样:

private void get() {
    Intent i=
      new Intent()
        .setType("image/png")
        .setAction(Intent.ACTION_GET_CONTENT)
        .addCategory(Intent.CATEGORY_OPENABLE);

    startActivityForResult(i, REQUEST_GET);
}

您的结果已发送至onActivityResult()

  @Override
  public void onActivityResult(int requestCode, int resultCode,
                               Intent resultData) {
    if (resultCode==Activity.RESULT_OK) {
      Uri image=resultData.getData();
      // do something
    }
  }

你的第二个问题是你在考虑选择一个文件。你不是。您正在使用用户决定处理ACTION_GET_CONTENT的任何活动来挑选一段内容。如果getPath()的方案是Urifile只有意义,而且这种方案不太可能。没有可靠的方法来获取任意Uri的文件系统路径,原因很简单,Uri不必指向文件。

理想情况下,您的“上传到服务器”逻辑可以使用InputStream。在这种情况下,请在openInputStream()上致电ContentResolver,以获取InputStream标识的内容Uri。如果“上传到服务器”逻辑仅适用于文件,请使用InputStream将内容复制到您控制的某个临时文件(例如,在getCacheDir()中),然后使用该临时文件上传。完成后删除临时文件。