在WebView Android中上传文件

时间:2014-11-16 03:04:12

标签: android webview

我正在尝试使用我的webview上传文件,并从File Upload in WebView找到代码但我无法将代码与我自己的webview集成(每当我打开应用程序时强制关闭)。

继承人java

        import android.app.Activity;
        import android.content.Intent;
        import android.net.Uri;
        import android.os.Bundle;
        import android.view.KeyEvent;
        import android.view.View;
        import android.webkit.CookieManager;
        import android.webkit.ValueCallback;
        import android.webkit.WebChromeClient;
        import android.webkit.WebSettings;
        import android.webkit.WebSettings.PluginState;
        import android.webkit.WebSettings.RenderPriority;
        import android.webkit.WebView;
        import android.webkit.WebViewClient;

        public class Console extends Activity {

            private WebView mWebView;

            // UPLOAD MANAGER PART-1//
            private ValueCallback<Uri> mUploadMessage;
            private final static int FILECHOOSER_RESULTCODE = 1;

            @Override
            protected void onActivityResult(int requestCode, int resultCode,
                    Intent intent) {
                if (requestCode == FILECHOOSER_RESULTCODE) {
                    if (null == mUploadMessage)
                        return;
                    Uri result = intent == null || resultCode != RESULT_OK ? null
                            : intent.getData();
                    mUploadMessage.onReceiveValue(result);
                    mUploadMessage = null;
                }
            }

            // *********************//

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_console);
                CookieManager.getInstance().setAcceptCookie(true);// Enable Cookies

                mWebView = (WebView) findViewById(R.id.webView1);
                mWebView.getSettings().setJavaScriptEnabled(true);// Enable Java Script

                mWebView.loadUrl("http://www.google.com/"); // Set Home page
                mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);// Remove
                                                                            // ScrollBars
                mWebView.getSettings().setDefaultFontSize(12);// Set Font Size
                mWebView.getSettings().setLoadsImagesAutomatically(true);// Enable Image
                                                                            // Loading
                mWebView.getSettings().setPluginState(PluginState.ON);// Enable Flash
                mWebView.getSettings().setRenderPriority(RenderPriority.HIGH); // improves
                                                                                // Feedback
                                                                                // on
                                                                                // touch
                // mWebView.setBackgroundColor(0x00000000);//Transparent Screen When
                // Loading
                // mWebView.getSettings().setBuiltInZoomControls(true);//Set Zoom
                // Controls
                // mWebView.getSettings().setDisplayZoomControls(false);//Always Hide
                // Zoom Controlls(Requires Api 11)

                mWebView.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);// Set Cache
                                                                            // (8mb)
                String appCachePath = getApplicationContext().getCacheDir()
                        .getAbsolutePath();// Set Cache (8mb)
                mWebView.getSettings().setAppCachePath(appCachePath);// Set Cache (8mb)
                mWebView.getSettings().setAllowFileAccess(true);// Set Cache (8mb)
                mWebView.getSettings().setAppCacheEnabled(true);// Set Cache (8mb)
                mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);// Set
                                                                                // Cache
                                                                                // (8mb)

                mWebView.requestFocus(View.FOCUS_DOWN);// Enable WebView Interaction

                // mWebView.setWebViewClient(new WebViewClient() {//Open URL on Error
                // public void onReceivedError(WebView view, int errorCode, String
                // description, String failingUrl) {//Open URL on Error
                // mWebView.loadUrl("http://www.google.com");//Open URL on Error

                // mWebView.loadUrl("file:///android_asset/error_404.jpg"); //Show
                // Offline HTML file or Image on Error
                // }
                // });

                mWebView.setWebViewClient(new WebViewClient());

                // UPLOAD MANAGER PART-2//
                mWebView.setWebChromeClient(new WebChromeClient() {
                    // For Android 3.0-
                    public void openFileChooser(ValueCallback<Uri> uploadMsg) {
                        mUploadMessage = uploadMsg;
                        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                        i.addCategory(Intent.CATEGORY_OPENABLE);
                        i.setType("file/*");
                        Console.this.startActivityForResult(
                                Intent.createChooser(i, "File Chooser"),
                                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("*/*");
                        Console.this.startActivityForResult(
                                Intent.createChooser(i, "File Browser"),
                                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("FILe/*");
                        Console.this.startActivityForResult(
                                Intent.createChooser(i, "File Chooser"),
                                MainActivity.FILECHOOSER_RESULTCODE);
                    }
                });
                setContentView(mWebView);
            }

            // *********************//

            private class HelloWebViewClient extends WebViewClient {
                @Override
                public boolean shouldOverrideUrlLoading(WebView webview, String url) {

                    webview.loadUrl(url);
                    return true;
                }
            }

            @Override
            public boolean onKeyDown(int keyCode, KeyEvent event) {

                if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())

                {
                    mWebView.goBack();
                    return true;
                }
                return super.onKeyDown(keyCode, event);
            }
        }

这是日志猫 -

    11-16 08:21:40.968: E/AndroidRuntime(30304): FATAL EXCEPTION: main

    11-16 08:21:40.968: E/AndroidRuntime(30304): Process: com.example.manage.airpush.com, PID: 30304

    11-16 08:21:40.968: E/AndroidRuntime(30304): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.manage.airpush.com/com.example.manage.airpush.com.Console}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2350)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.app.ActivityThread.access$800(ActivityThread.java:163)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1257)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.os.Handler.dispatchMessage(Handler.java:102)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.os.Looper.loop(Looper.java:157)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.app.ActivityThread.main(ActivityThread.java:5335)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at java.lang.reflect.Method.invokeNative(Native Method)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at java.lang.reflect.Method.invoke(Method.java:515)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at dalvik.system.NativeStart.main(Native Method)

    11-16 08:21:40.968: E/AndroidRuntime(30304): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.view.ViewGroup.addViewInner(ViewGroup.java:3772)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.view.ViewGroup.addView(ViewGroup.java:3621)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.view.ViewGroup.addView(ViewGroup.java:3597)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:359)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:349)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.app.Activity.setContentView(Activity.java:1993)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at com.example.manage.airpush.com.Console.onCreate(Console.java:131)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.app.Activity.performCreate(Activity.java:5389)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256)

    11-16 08:21:40.968: E/AndroidRuntime(30304):    ... 11 more

1 个答案:

答案 0 :(得分:1)

setContentView(mWebView);的目的是什么?

我认为您不需要这样做,因为mWebView已经在View上。