एक एंड्रॉइड स्टूडियो 3.4 प्रोजेक्ट गतिविधि में जिसमें चार अलग-अलग बटन होते हैं जो क्लिक करने पर अलग-अलग स्ट्रिंग्स मान (झंडे) पास करते हैं। मैं छवि फ़ाइल चयनकर्ता इरादे onActivityResult() में एक चर स्ट्रिंग ध्वज से एक बंडल डेटा पास करने का प्रयास कर रहा हूं

चार बटनों द्वारा लॉन्च किए गए चार अलग-अलग छवि चयनकर्ता हैं, मैं चाहता हूं कि मेरी विधि कुछ करे यदि कोई विशेष स्ट्रिंग ध्वज मान पास हो गया है लेकिन मेरी स्ट्रिंग शून्य के रूप में पारित हो रही है

यहाँ चार बटनों में से एक का कोड है।

        buttonChoose.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    showFileChooser("pic");
                }
            });
    
       private void showFileChooser(final String flg) {
            Intent intent = new Intent();
            intent.putExtra("flg", flg);
            setResult(Activity.RESULT_OK, intent);
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
                filePath = data.getData();
                Log.d(TAG, "filePath 1 >>" + filePath);
    
                try {
                    bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                    String myTag = data.getStringExtra("flg");
    
                    Log.d(TAG, "myTag >>" + myTag);
    
                    if (myTag.equalsIgnoreCase("pic")) {
                        imageView.setImageBitmap(bitmap);
                    } else if (myTag.equalsIgnoreCase("License")) {
                        imageViewLicense.setImageBitmap(bitmap);
                    } else if (myTag.equalsIgnoreCase("RoadWorthiness")) {
                        imageViewRoadWorthiness.setImageBitmap(bitmap);
                    } else if (myTag.equalsIgnoreCase("Insurance")) {
                        imageViewInsurance.setImageBitmap(bitmap);
                    } else {
    
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
````````
2
MIike Eps 16 सितंबर 2019, 06:03

1 उत्तर

सबसे बढ़िया उत्तर

SO समुदाय में सबसे पहले आपका स्वागत है।

संक्षिप्त उत्तर: आप ऐसा नहीं कर सकते

कारण: एकतरफा यात्रा में इरादों का उपयोग किया जाता है; आप राउंड-ट्रिप में एकल इंटेंट का उपयोग नहीं कर सकते हैं, और विशेष रूप से यदि उनमें से एक को सिस्टम द्वारा ट्रिगर किया जाता है।

आपके उदाहरण में, आपने FileChooser गतिविधि घटक को खोलने के लिए जिस आशय का उपयोग किया था, वह onActivityResult() पर वापस किए गए समान नहीं है। बाद वाला डेवलपर द्वारा व्युत्पन्न नहीं किया गया है, लेकिन यह आपके द्वारा FileChooser के साथ बातचीत करने पर Android सिस्टम द्वारा बनाया गया एक नया अलग इरादा है; यदि आप वास्तव में एक फ़ाइल चुनते हैं, तो यह डेटा के साथ अनुकूलित एक इरादा देता है (RESULT_OK के परिणाम के साथ)। और यदि आप कुछ भी नहीं चुनते हैं तो यह (RESULT_CANCELED) के परिणामस्वरूप शून्य हो जाता है।

इससे हमें पता चलता है कि आपके कोड में setResult(Activity.RESULT_OK, intent); का उपयोग करने से कोई फर्क नहीं पड़ता, क्योंकि एंड्रॉइड सिस्टम इसे इस आधार पर बदल देगा कि उपयोगकर्ता फ़ाइल का चयन करता है या नहीं, भले ही आप FileChooser को खोलने के लिए आने वाले इरादे की परवाह किए बिना।

अधिक जानकारी के लिए: https://developer.android.com/training/basics/intents/ परिणाम

आप राज्य को ध्वज के साथ ट्रैक करके या onActivityResult() के अनुरोध कोड का उपयोग करके वह प्राप्त कर सकते हैं जो आप चाहते हैं और प्रत्येक बटन क्लिक के लिए एक अलग मान के साथ ध्वज/अनुरोध कोड सेट करें

अनुरोध कोड के साथ समाधान

private static final int PIC = 100;
private static final int LICENSE = 101;
private static final int ROAD_WORTHINESS = 102;
private static final int INSURANCE = 103;


buttonChoose.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        showFileChooser(PIC);
    }
});

buttonChoose2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        showFileChooser(LICENSE);
    }
});

private void showFileChooser(int requestCode) {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), requestCode);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && data != null && data.getData() != null) {
        filePath = data.getData();
        Log.d(TAG, "filePath 1 >>" + filePath);

        try {
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            String myTag = data.getStringExtra("flg");

            Log.d(TAG, "myTag >>" + myTag);

            switch(requestCode) {
                case PIC:
                    imageView.setImageBitmap(bitmap);
                    break;
                case LICENSE:
                    imageViewLicense.setImageBitmap(bitmap);
                    break;
                case ROAD_WORTHINESS:
                    imageViewRoadWorthiness.setImageBitmap(bitmap);
                    break;
                case INSURANCE:
                    imageViewInsurance.setImageBitmap(bitmap);
                    break;
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
````````

ध्वज के साथ समाधान

private static final int PIC = 100;
private static final int LICENSE = 101;
private static final int ROAD_WORTHINESS = 102;
private static final int INSURANCE = 103;
private int mState;

buttonChoose.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mState = PIC;
        showFileChooser();
    }
});

buttonChoose2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mState = LICENSE;
        showFileChooser();
    }
});

private void showFileChooser() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
        filePath = data.getData();
        Log.d(TAG, "filePath 1 >>" + filePath);

        try {
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            String myTag = data.getStringExtra("flg");

            Log.d(TAG, "myTag >>" + myTag);

            switch(mState) {
                case PIC:
                    imageView.setImageBitmap(bitmap);
                    break;
                case LICENSE:
                    imageViewLicense.setImageBitmap(bitmap);
                    break;
                case ROAD_WORTHINESS:
                    imageViewRoadWorthiness.setImageBitmap(bitmap);
                    break;
                case INSURANCE:
                    imageViewInsurance.setImageBitmap(bitmap);
                    break;
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
````````
2
Zain 17 सितंबर 2019, 03:10