Webview - Auflösung "mailto" Befehl

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Androbek, 17.09.2011.

  1. Androbek, 17.09.2011 #1
    Androbek

    Androbek Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    17.09.2011
    Hallo liebe Community,

    habe folgendes Problem. Ich habe eine Html Datei, die nach Eingabe gewisser Formularfelder den mailto Link generiert.
    Die Angaben sollen dann nach Auswahl des E-Mail Programms übernommen werden. Im Browser klappt die auch ohne Probleme.

    Was stimmt an den folgenden Angaben nicht?
    Ich muss dazu sagen, dass Java mich bisher nicht interessiert hat, was sich in der Zukunft sicherlich ändern wird.

    Eclipse hat bei "startActivity(i);" gemeckert und danach automatisch 2 Zeilen hinzugefügt. Ich denke es hängt mit all dem irgendwie zusammen.

    Vielen Dank


    HelloWebViewClient.java
    Code:
    package com.email.view;
    
    import java.io.UnsupportedEncodingException;
    import java.net.URLDecoder;
    
    import android.content.Intent;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    
    public class HelloWebViewClient extends WebViewClient {
    
        @Override
         public boolean shouldOverrideUrlLoading(WebView view, String url) {         
             if (url.startsWith("mailto:")) {                    
                url = url.replaceFirst("mailto:", "");
                    url = url.trim();
                    try {
                    url = URLDecoder.decode(url,"UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
            int subjectStart = url.indexOf("subject=");
                    int subjectStop = url.indexOf("&body=");
                    String subject = url.substring(subjectStart,subjectStop);
                    subject = subject.replace("subject=", "");
                    String bod = url.substring(subjectStop);
                    bod = bod.replace("&body=", "");
                    Intent i = new Intent(Intent.ACTION_SEND);
                    i.setType("test/plain");
                    i.putExtra(Intent.EXTRA_SUBJECT,subject);               
                    i.putExtra(Intent.EXTRA_TEXT, bod);
                    startActivity(i);
                    return true;
    
         } else { 
             view.loadUrl(url);
             return true;
             }
         }
    
        private void startActivity(Intent i) {
            // TODO Auto-generated method stub
            
        }
    
    
    }
    
    WebViewExample.java
    Code:
    package com.email.view;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.webkit.WebView;
    
    public class WebViewExample extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            WebView webView = (WebView) findViewById(R.id.webview);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.loadUrl("http://xxxxxxxxxxxxxxxx/test.html");
    
            webView.setWebViewClient(new HelloWebViewClient());
    
        }
    }
    AndroidManifest.xml
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.email.view"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".WebViewExample"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
        <uses-sdk android:minSdkVersion="5" />
    
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    </manifest> 
     
  2. sixi, 17.09.2011 #2
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Was kommt denn fuer ein Fehler? (logcat!)
    Ansonsten der Type muss sicherlich Text/plain sein und nicht Test/plain
     
  3. Androbek, 18.09.2011 #3
    Androbek

    Androbek Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    17.09.2011
    logcat
    Code:
    I/ActivityManager(   71): Starting: Intent { act=android.intent.action.MAIN cat=
    [android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.email.view/.We
    bViewExample } from pid 372
    W/WindowManager(   71): Failure taking screenshot for (230x143) to layer 21000
    I/ActivityManager(   71): Start proc com.email.view for activity com.ema
    il.view/.WebViewExample: pid=380 uid=10037 gids={3003}
    D/AndroidRuntime(  372): Shutting down VM
    I/AndroidRuntime(  372): NOTE: attach of thread 'Binder Thread #3' failed
    D/dalvikvm(  372): GC_CONCURRENT freed 98K, 83% free 358K/2048K, paused 1ms+0ms
    D/jdwp    (  372): adbd disconnected
    D/TabletStatusBar(  122): lights on
    D/dalvikvm(  380): GC_FOR_ALLOC freed 36K, 4% free 6311K/6531K, paused 74ms
    I/dalvikvm-heap(  380): Grow heap (frag case) to 6.698MB for 513744-byte allocat
    ion
    D/dalvikvm(  380): GC_FOR_ALLOC freed <1K, 4% free 6812K/7047K, paused 61ms
    D/dalvikvm(  380): GC_CONCURRENT freed <1K, 4% free 6812K/7047K, paused 7ms+6ms
    V/TLINE   (  380): new: android.text.TextLine@406c91b8
    W/webcore (  380): Not supported in this case.
    I/ActivityManager(   71): Displayed com.email.view/.WebViewExample: +2s5
    71ms (total +36s889ms)
    I/ActivityManager(   71): Displayed com.android.launcher/com.android.launcher2.L
    auncher: +36s891ms
    D/dalvikvm(  145): GC_EXPLICIT freed 1105K, 8% free 14972K/16135K, paused 4ms+11
    ms
    W/asset   (  145): Asset path /data/app/com.email.view-2.apk is neither
    a directory nor file (type=1).
    W/PackageManager(  145): Failure retrieving resources forcom.email.view
    W/asset   (  145): Asset path /data/app/com.email.view-2.apk is neither
    a directory nor file (type=1).
    W/PackageManager(  145): Failure retrieving resources forcom.email.view
    W/asset   (  145): Asset path /data/app/com.email.view-2.apk is neither
    a directory nor file (type=1).

    Und das sobald man auf den Link klickt:
    Code:
    V/TLINE   (  636): new: android.text.TextLine@406ddef8
    W/webcore (  636): Not supported in this case.
    D/dalvikvm(  145): GC_EXPLICIT freed 5K, 17% free 14160K/17031K, paused 4ms+1096
    ms
    I/ActivityManager(   71): Displayed com.email.view/.WebViewExample: +2s8
    71ms
    D/dalvikvm(  145): GC_EXPLICIT freed <1K, 17% free 14162K/17031K, paused 4ms+4ms
    
    D/AndroidRuntime(  636): Shutting down VM
    W/dalvikvm(  636): threadid=1: thread exiting with uncaught exception (group=0x4
    0014760)
    E/AndroidRuntime(  636): FATAL EXCEPTION: main
    E/AndroidRuntime(  636): java.lang.StringIndexOutOfBoundsException: start=-1 end
    =-1 length=12
    E/AndroidRuntime(  636):        at java.lang.String.startEndAndLength(String.jav
    a:598)
    E/AndroidRuntime(  636):        at java.lang.String.substring(String.java:1561)
    E/AndroidRuntime(  636):        at com.email.view.HelloWebViewClient.sho
    uldOverrideUrlLoading(HelloWebViewClient.java:24)
    E/AndroidRuntime(  636):        at android.webkit.CallbackProxy.uiOverrideUrlLoa
    ding(CallbackProxy.java:222)
    E/AndroidRuntime(  636):        at android.webkit.CallbackProxy.handleMessage(Ca
    llbackProxy.java:322)
    E/AndroidRuntime(  636):        at android.os.Handler.dispatchMessage(Handler.ja
    va:99)
    E/AndroidRuntime(  636):        at android.os.Looper.loop(Looper.java:132)
    E/AndroidRuntime(  636):        at android.app.ActivityThread.main(ActivityThrea
    d.java:4025)
    E/AndroidRuntime(  636):        at java.lang.reflect.Method.invokeNative(Native
    Method)
    E/AndroidRuntime(  636):        at java.lang.reflect.Method.invoke(Method.java:4
    91)
    E/AndroidRuntime(  636):        at com.android.internal.os.ZygoteInit$MethodAndA
    rgsCaller.run(ZygoteInit.java:841)
    E/AndroidRuntime(  636):        at com.android.internal.os.ZygoteInit.main(Zygot
    eInit.java:599)
    E/AndroidRuntime(  636):        at dalvik.system.NativeStart.main(Native Method)
    
    W/ActivityManager(   71):   Force finishing activity com.email.view/.Web
    ViewExample
     
    Zuletzt bearbeitet: 18.09.2011
  4. sixi, 18.09.2011 #4
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    java.lang.StringIndexOutOfBoundsException: start=-1 end=-1 length=12

    -> In Zeile 24 (ka welche von deinen das ist) -> da ist wohl eines von deinen "indexOf(...)" nicht richtig. Wenn der String nicht vorkommt gibt es den Wert "-1" und dementsprechend einen Fehler wenn du den String mit substring beschneidest. Entweder du debuggst das ganze mit Eclipse durch oder machst dir mal ein paar Debug-Ausgaben rein (z.B. System.out.println(url.toString)) in jede zweite, da wirst du den Fehler finden :)
     

Diese Seite empfehlen