onActivityResult

N

N3cron

Fortgeschrittenes Mitglied
1
Hallo zusammen. Ich hoffe ihr könnt mir nochmals helfen. Ich hatte es hier schon mal als Thema drin, bekomme es aber alleine nicht bewältigt.
Ich möchte wie zb hier im Forum eine datei als Anhang hochladen.
Mein Filechooser öffnet sich, und ich kann ein Foto auswählen. Funktion ist in Ordnung. Sobald ich das Foto ausgewhlt habe bekomme ich per Toast genau den "Filepath" gesagt wo es liegt und wie das JPG heisst.
Als dateianhang steht aber nur eine ziffer dort.
Beispiel test.jpg heisst dann 19881
Obwohl mir per Toast der richtige Pfad und Name gesagt wird. Das ganze scheint irgendwie der "uploadmessage" zu versauen. Ich hoffe ihr könnt mir helfen. Habe Tage lang schon daran gesessen aber bekomme es nicht hin.

Hier der Code

HTML:
    webView.setWebChromeClient(new WebChromeClient() {
            public void openFileChooser(ValueCallback<Uri> uploadMsg) {

                mUploadMessage = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("image/*");
                startActivityForResult(Intent.createChooser(i, "File Chooser"),
                        MainActivity.FILECHOOSER_RESULTCODE);
            }

            // For Android 3.0+
            public void openFileChooser(ValueCallback uploadMsg,
                    String acceptType) {
                mUploadMessage = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("image/*");
                startActivityForResult(Intent.createChooser(i, "File Chooser"),
                        MainActivity.FILECHOOSER_RESULTCODE);

            }

            // For Android 4.1
            public void openFileChooser(ValueCallback<Uri> uploadMsg,
                    String acceptType, String capture) {

                mUploadMessage = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("image/*");
                startActivityForResult(Intent.createChooser(i, "File Chooser"),
                        MainActivity.FILECHOOSER_RESULTCODE);

            }
        });
    }

     @Override
     protected void onActivityResult(int requestCode, int resultCode,
     Intent intent) {
     if (requestCode == FILECHOOSER_RESULTCODE) {
    
     if (null == mUploadMessage)
    
     return;
    
     Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
     : intent.getData();
     if (result != null) {
    
     String filePath = null;
    
     if ("content".equals(result.getScheme())) {
    
     Cursor cursor = this
     .getContentResolver()
     .query(result,
     new String[] { android.provider.MediaStore.Images.ImageColumns.DATA },
     null, null, null);
    
     cursor.moveToFirst();
     filePath = cursor.getString(0);
     cursor.close();
    
     Toast.makeText(this, "Pfad" + filePath, Toast.LENGTH_SHORT)
     .show();
     } else {
    
     filePath = result.getPath();
    
     }
    
     mUploadMessage.onReceiveValue(result);
    
     mUploadMessage = null;
    
     }
    
     }


Danke für Antworten und Hilfe
 
(Edit: ups, hatte etwas falsch gelesen beim vorherigen Text, deshalb hab ich den ersten Teil meiner Antwort gelöscht)

ich denke, es liegt daran, dass du zum einen filePath als Toast anzeigst, aber dann eine andere URI (result) zurückgibst. In result steht natürlich noch der Path des ContentProviders drin.
 
Zuletzt bearbeitet:
Dann hilf mir doch mal. Ich bekomme es einfach nicht hin. Bekomme immer von uploadmessage nur ne Zahl zurück
 
Keiner der es in seiner App nutzt und mal nen Fix nennen kann? Bei google gibt es viel darüber, hab bisher aber keine Lösung gefunden
 
Du hast gesagt, der Toast zeige den korrekten Pfad an. Das heisst, du hast den korrekten Pfad in der Variable filePath.

Nachdem du den Toast angezeigt hast, ignorierst du filePath aber komplett und verwendest wieder eine andere Variable namens result:

Code:
mUploadMessage.onReceiveValue([U]result[/U]);

Wieso verwendest du hier result? Du weisst ja bereits, dass filePath den korrekten Pfad enthält. (Noch ein Tip)
 
Ok. Hab es glaube ich verstanden. Ist das so richtig? Programmiere noch nicht lange. Falls es so richtig ist, funktioniert es immer noch nicht. "Uploadmessage" übergibt mir nur eine Zahl. Kann es nicht verstehen. Ich brauche es dringend. So ein mist. Ich hoffe das ihr mir dort weiter helft das problem zu lösen. Danke!

HTML:
@Override
    protected void onActivityResult(int requestCode, int resultCode,
            Intent intent) {
        if (requestCode == FILECHOOSER_RESULTCODE) {

            if (null == mUploadMessage)

                return;

            Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
                    : intent.getData();
            if (result != null) {

                String filePath = null;

                if ("content".equals(result.getScheme())) {

                    Cursor cursor = this
                            .getContentResolver()
                            .query(result,
                                    new String[] { android.provider.MediaStore.Images.ImageColumns.DATA },
                                    null, null, null);

                    cursor.moveToFirst();
                    filePath = cursor.getString(0);
                    cursor.close();
                     Uri Test = Uri.parse(filePath);
                     mUploadMessage.onReceiveValue(Test);
                     mUploadMessage = null;
                    Toast.makeText(this, "Pfad" + filePath, Toast.LENGTH_SHORT)
                            .show();
                } else {

                    filePath = result.getPath();

                }
                

                
            }
        }
 
Hi. Was ist los. So viele "Klicks" und keiner kann helfen?


Muss mich korrigieren. Wenn ich es mit Uri.parse mache bekomme ich keinen String zurück

Der ursprüngliche Beitrag von 17:49 Uhr wurde um 19:45 Uhr ergänzt:

Nach vielen Tag, glaube ich habe ich es geschafft. Das ganze muss ich nur noch Testen.

Für die die nur gucken und nicht Antworten ;)
Hier die "wahrscheinliche" Lösung. Für die die es gebrauchen können.
Falls es bei Euch klappt, bitte den Danke Button. Dann sehe ich wenigstens ob es anderen etwas gebracht hat

HTML:
    @Override
    protected void onActivityResult(int requestCode, int resultCode,
            Intent intent) {
        if (requestCode == FILECHOOSER_RESULTCODE) {

            if (null == mUploadMessage)

                return;

            Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
                    : intent.getData();
            if (result != null) {

                String filePath = null;

                if ("content".equals(result.getScheme())) {

                    Cursor cursor = this
                            .getContentResolver()
                            .query(result,
                                    new String[] { android.provider.MediaStore.Images.ImageColumns.DATA },
                                    null, null, null);

                    cursor.moveToFirst();
                    filePath = cursor.getString(0);
                    
                    File f = new File(filePath);  //  
                    Uri imageUri = Uri.fromFile(f);     
                    mUploadMessage.onReceiveValue(imageUri);

                
                    cursor.close();
            
                    

                    Toast.makeText(this, "Pfad" + filePath, Toast.LENGTH_SHORT)
                            .show();
                } else {

                    filePath = result.getPath();

                }

            }
        }
 
Zuletzt bearbeitet:

Ähnliche Themen

P
Antworten
4
Aufrufe
1.164
PdXY
P
P
Antworten
5
Aufrufe
877
PdXY
P
C
  • Chris92
Antworten
4
Aufrufe
1.376
BFK
B
Zurück
Oben Unten