【问题标题】:onActivityResult() is not working in fragment " OUTPUT: You haven't picked Image "onActivityResult() 在片段“输出:您尚未选择图像”中不起作用
【发布时间】:2018-12-23 19:42:06
【问题描述】:

这是我的代码,当我运行代码时,输​​出将是“**你还没有选择图像”**

我目前在此应用中使用的 sdk

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.letsget.humanitysavior"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

这是清单权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />

这是片段代码

public class NewPostPublicFragment extends Fragment {

    public NewPostPublicFragment() {
        // Required empty public constructor
    }

    private int PICK_IMAGE_MULTIPLE = 3;
    String imageEncoded;
    List<String> imagesEncodedList;
    private GridView gvGallery;
    private NewPostImagesAdapter galleryAdapter;
    CarouselView carouselView;

    private ArrayList<Uri> mArrayUri;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_new_post_public, container, false);

        gvGallery = view.findViewById(R.id.gridview);
        ImageView selectimgicon = view.findViewById(R.id.selectimgicon);
        ImageView selectvideoicon = view.findViewById(R.id.selectvideoicon);
        ImageView selectcameraicon = view.findViewById(R.id.selectcameraicon);
        carouselView = view.findViewById(R.id.carouselview);
        final TextInputEditText postcategories = view.findViewById(R.id.postcategories);

        //carouselView.setPageCount(mThumbIds.length);
        //carouselView.setImageListener(imageListener);

        //for image selection
        selectimgicon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //LOGIC FOR PROFILE PICTURE
                selectImagesFromGallery();
            }
        });

        postcategories.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final CharSequence[] items = { "Book", "Cloth", "Electronic", "Furniture", "Bag", "Social Post", "Other" };

                AlertDialog.Builder postCategoryBuilder = new AlertDialog.Builder(v.getContext(),AlertDialog.THEME_HOLO_LIGHT);
                postCategoryBuilder.setTitle("Select Post Category");
                postCategoryBuilder.setIcon(R.mipmap.categoryicon);
                postCategoryBuilder.setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // the user clicked on colors[which]
                        postcategories.setText(items[which]);
                    }
                });
                postCategoryBuilder.show();
            }
        });

        return view;
    }

    ImageListener imageListener = new ImageListener() {
        @Override
        public void setImageForPosition(int position, ImageView imageView) {
            //imageView.setImageResource(mThumbIds[position]);
            imageView.setImageURI(mArrayUri.get(position));
        }
    };

    private void selectImagesFromGallery() {

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Image"), PICK_IMAGE_MULTIPLE);

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        try {

            Log.v(TAG, "requestCode=" + requestCode + ", resultCode = "+ resultCode + ", data = " + data);
            // When an Image is picked
            if (requestCode == PICK_IMAGE_MULTIPLE && resultCode == RESULT_OK && data != null) {
                // Get the Image from data

                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                imagesEncodedList = new ArrayList<String>();
                if(data.getData()!=null){

                    Uri mImageUri = data.getData();

                    // Get the cursor
                    Cursor cursor = getActivity().getContentResolver().query(mImageUri,
                            filePathColumn, null, null, null);
                    // Move to first row
                    cursor.moveToFirst();

                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    imageEncoded  = cursor.getString(columnIndex);
                    cursor.close();

                    ArrayList<Uri> mArrayUri = new ArrayList<Uri>();
                    mArrayUri.add(mImageUri);
                    galleryAdapter = new NewPostImagesAdapter(getActivity().getApplicationContext(),mArrayUri);
                    gvGallery.setAdapter(galleryAdapter);
                    gvGallery.setVerticalSpacing(gvGallery.getHorizontalSpacing());
                    ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) gvGallery
                            .getLayoutParams();
                    mlp.setMargins(0, gvGallery.getHorizontalSpacing(), 0, 0);

                    carouselView.setPageCount(mArrayUri.size());
                    carouselView.setImageListener(imageListener);

                } else {
                    if (data.getClipData() != null) {
                        ClipData mClipData = data.getClipData();
                        ArrayList<Uri> mArrayUri = new ArrayList<Uri>();
                        for (int i = 0; i < mClipData.getItemCount(); i++) {

                            ClipData.Item item = mClipData.getItemAt(i);
                            Uri uri = item.getUri();
                            mArrayUri.add(uri);
                            // Get the cursor
                            Cursor cursor = getActivity().getContentResolver().query(uri, filePathColumn, null, null, null);
                            // Move to first row
                            cursor.moveToFirst();

                            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                            imageEncoded  = cursor.getString(columnIndex);
                            imagesEncodedList.add(imageEncoded);
                            cursor.close();

                            galleryAdapter = new NewPostImagesAdapter(getActivity().getApplicationContext(),mArrayUri);
                            gvGallery.setAdapter(galleryAdapter);
                            gvGallery.setVerticalSpacing(gvGallery.getHorizontalSpacing());
                            ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) gvGallery
                                    .getLayoutParams();
                            mlp.setMargins(0, gvGallery.getHorizontalSpacing(), 0, 0);

                        }
                        Log.v("LOG_TAG", "Selected Images" + mArrayUri.size());
                    }
                }
            } else {
                Toast.makeText(getContext(), "You haven't picked Image",
                        Toast.LENGTH_LONG).show();
            }
        } catch (Exception e) {
            Toast.makeText(getContext(), "Something went wrong", Toast.LENGTH_LONG)
                    .show();
        }
    }
}

当我运行这个应用程序并点击图像按钮时,它会打开图库并选择图像,然后当我按下完成按钮时,它不会显示图像它只是显示你没有选择图像的 toast 消息

【问题讨论】:

  • 详细日志的输出是什么?
  • requestCode=3, resultCode = -1, data = image*.....
  • 这是我在 onActivityResult 方法中使用的日志输出
  • 好像一切正​​常,试试把super.onActivityResult去掉
  • 您是否设置了必要的权限?

标签: android android-studio android-fragments android-intent android-fragmentactivity


【解决方案1】:

检查这些步骤:

  1. AndroidManifest.xml 中授予使用相机的权限
  2. 使用此代码正确获取图像

      String RequestCode=123; 
    
      @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) 
         {
             super.onActivityResult(requestCode, resultCode, data);
    
         if(requestCode == RequestCode && resultCode== RESULT.OK){
              //Here get your image code
         }
    
      }
    
  3. 还要检查 Toast 在您的 OnActivityResult() 方法中并检查 if 条件是真还是假。可能您的if 条件为假,这就是未从图库收到图像的原因。

【讨论】:

  • codition 是错误的我不知道为什么因为 log.v 显示结果 this requestCode=3, resultCode = -1, data = image*..... 根据 log.v 结果这个条件是真的,但它仍然是假的
  • 再做一步。在 setResult() 方法的帮助下设置调用函数 startActivityForResult() 的结果值
  • 也可以根据stackoverflow.com/questions/33838890/…进行检查和尝试
猜你喜欢
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 2011-09-03
相关资源
最近更新 更多