在调用setDisplayChild()时查看鳍状肢崩溃;在文件准备好与addjavascriptinterface,请帮助

时间:2012-09-17 20:00:05

标签: android jquery webview crash viewflipper

我正在构建一个应用程序项目(我的第二个),让我们说,它显示一个启动加载屏幕,同时它等待第二个viewflipper布局与webview加载网页。加载的html网页调用我的android java中的一个函数应该vf.setDisplayedChild(TWO);,但它不会!我用吐司测试了这个而不是前面提到的功能?!这显示很好。但是,如果我将它设置回到displaychild,我的加载屏幕会崩溃并返回到我的main.xml活动,然后使用viewflipper重新启动活动并在崩溃和重新加载之间循环!

我怀疑它与oncreate函数中的vf控件有关,而vf.displaychild调用是在公共javascriptinterface类中?!!!但是没有足够的知识去做更多。

我研究了某种布尔变化监听器,但不认为这是值得做的。

我的代码:

package com.......;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Toast;
import android.widget.ViewFlipper;


public class Webview  extends Activity {


    ViewFlipper vf;
    private final int ONE = 0;
    private final int TWO = 1;
        private WebView webView;

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);


            setContentView(R.layout.vf);

            vf=(ViewFlipper)findViewById(R.id.flipper);    
            vf.addView(View.inflate(this, R.layout.load, null), ONE);
            vf.addView(View.inflate(this, R.layout.webview, null), TWO);
                vf.setDisplayedChild(ONE);



            webView = (WebView) findViewById(R.id.webView1);

            webView.getSettings().setJavaScriptEnabled(true);

            webView.getSettings().setBuiltInZoomControls(false);
            webView.setWebChromeClient(new WebChromeClient());
            webView.getSettings().setSupportZoom(false);
            webView.addJavascriptInterface(new JSI(this), "android");
            webView.loadUrl("my wamp dir");

            //failsafe if not shown
            new Handler().postDelayed(new Runnable() {
                @Override
                    public void run() {
                    Toast.makeText(getApplicationContext(), "Sorry There was a problem!\nPlease check your Data/WI-FI connection.", Toast.LENGTH_SHORT).show();
                    finish();
                    }
                }, 30000);




        }



        public class JSI
        {
            Context mContext;

            /** Instantiate the interface and set the context */
            JSI(Context c) {
                mContext = c;
            }

        public void loaded()
        {

            vf.setDisplayedChild(TWO);
            //Toast.makeText(mContext, "Showing!", Toast.LENGTH_SHORT).show();

        }
        }

    }

当然,该函数在jquery / script ready函数中调用为:

android.loaded();

任何有助于回答的帮助!

EDIT ------------------------- 已经找到了调试器并且我得到了一个例外:只有一个线程可以访问它的设置视图!

1 个答案:

答案 0 :(得分:0)

AAAH我不知道runOnUiThread() 这排序了!

public void Activated()
        {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                   vf.setDisplayedChild(TWO);
                }
            });

并且注意到我忘记了我的处理程序延迟执行,如果语句变量错误检查我认为。