【问题标题】:App crash when setting progressBar visibilty to gone将 progressBar 可见性设置为消失时应用程序崩溃
【发布时间】:2016-06-26 04:41:57
【问题描述】:

嗨,我遇到了这个问题,我根本不明白我有一个选项卡式活动,每个片段都有一个 webview,webview 有一个进度条,显示它们何时加载,但当我设置进度条可见性时应用程序崩溃了,AVD 日志没有显示异常,但是当我发表评论时

    progressBar.setVisibility(View.GONE);

它根本不会崩溃,但进度条总是在那里,如果有人能告诉我问题出在哪里,我会非常感激,谢谢这是我的代码

 package org.lsvbdarija.app;

    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.KeyEvent;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.ProgressBar;

    /**
     * Created by Anas on 20/06/2016.
     */

    public class SocialFragment extends Fragment {

    public WebView mWebView;
    ProgressBar progressBar;

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message message) {
            switch (message.what) {
                case 1: {
                    webViewGoBack();
                }
                break;
            }
        }
    };

    @Nullable
    @Override
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
                             Bundle savedInstanceState) {
        if (!haveNetworkConnection()) {
            getActivity().setContentView(R.layout.activity_splashscreen);
        }

        View v = inflater.inflate(R.layout.social_layout, container, false);
        mWebView = (WebView) v.findViewById(R.id.webview);
        mWebView.loadUrl("http://www.lsvbdarija.com/search/label/%D8%B9%D9%84%D9%88%D9%85");

        // Enable Javascript
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        progressBar = (ProgressBar) getActivity().findViewById(R.id.progressBar);

        // Force links and redirects to open in the WebView instead of in a browser
        mWebView.setWebViewClient(new WebViewClient(){
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                // TODO Auto-generated method stub
                super.onPageStarted(view, url, favicon);
            }

            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                String url2="http://www.lsvbdarija.com/";
                // all links  with in ur site will be open inside the webview
                //links that start ur domain example(http://www.example.com/)
                if (url != null && url.startsWith(url2)){
                    return false;
                }
                // all links that points outside the site will be open in a normal android browser
                else  {
                    view.getContext().startActivity(
                            new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                    return true;
                }
            }
            public void onPageFinished(WebView view, String url) {
                // TODO Auto-generated method stub
                super.onPageFinished(view, url);

              //  progressBar.setVisibility(View.GONE);
            }
        });


        mWebView.setOnKeyListener(new View.OnKeyListener() {

            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
                    handler.sendEmptyMessage(1);
                    return true;
                }
                return false;
            }


        });

        return v;

    }


    private void webViewGoBack() {
        mWebView.goBack();
    }


    private boolean haveNetworkConnection() {
        boolean haveConnectedWifi = false;
        boolean haveConnectedMobile = false;

        ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfo = cm.getAllNetworkInfo();
        for (NetworkInfo ni : netInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                if (ni.isConnected())
                    haveConnectedWifi = true;
            if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                if (ni.isConnected())
                    haveConnectedMobile = true;
        }
        return haveConnectedWifi || haveConnectedMobile;
    }



}

【问题讨论】:

  • 如果应用程序崩溃,logcat 中必须存在异常。确保您没有在看不到异常的地方设置日志过滤。
  • 如果你想要我可以复制日志:/
  • 如果“绝对没有”,那是非常可疑的。如果您使用的是 Android Studio,请确保在 Android Monitor 工具窗口的 logcat 选项卡上,右上角的下拉框中显示“无过滤器”。如果日志显示您的应用程序开始和结束没有异常,那么是的,请发布它。

标签: java android android-fragments webview progress-bar


【解决方案1】:

进度条是在fragment布局还是在activity布局中定义的?如果它在片段中,那么它应该是

progressBar = (ProgressBar) v.findViewById(R.id.progressBar);

【讨论】:

    【解决方案2】:

    将你的 get activity().findviewbyid() 替换为 v.findviewbyid();

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      相关资源
      最近更新 更多