【问题标题】:Android: how to handle network connectivity like play store appAndroid:如何处理网络连接,如 Play 商店应用程序
【发布时间】:2014-03-25 07:00:46
【问题描述】:

我现在已经解决了这个问题

我想像 Play 商店应用一样处理网络连接。

我创建了一个 webview 并想加载一个 URL,比如 www.bing.com

如果网络连接可用 那么 加载网址 别的 使用按钮加载自定义 URL。 结束

  1. 如果按下此按钮时没有连接,我想尝试再次加载 URL 吗?换句话说,我想在用户连接后再次调用此活动。我该怎么做?

    下面是我的代码:

     import android.net.ConnectivityManager; 
     import android.net.NetworkInfo; 
     import android.os.Bundle; 
     import android.app.Activity; 
     import android.view.Menu; 
     import android.view.MenuItem; 
     import android.webkit.WebView; 
     import android.webkit.WebViewClient; 
     import android.widget.Toast; 
     import android.support.v4.app.NavUtils; 
     import android.annotation.TargetApi; 
     import android.content.Context; 
     import android.os.Build;
    
    
    public class WebActivity extends Activity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web);
    
    
        if(isNetworkStatusAvailable (getApplicationContext())) {
    
            Toast.makeText(getApplicationContext(), "Loading...", Toast.LENGTH_SHORT).show();
            WebView myWebView = (WebView) findViewById(R.id.webview);
            myWebView.loadUrl("http://www.bing.com");
    
            myWebView.setWebViewClient(new WebViewClient() {
    
                @Override
                public void onReceivedError(WebView view, int errorCode,
                        String description, String failingUrl) {
                    Toast.makeText(getApplicationContext(), "Internet Connection Unavailable Or " + description , Toast.LENGTH_LONG).show();
    
                    Intent errorIntent = new Intent(WebActivity.this, NetworkErrorActivity.class);
                    startActivity(errorIntent); 
                    finish();
    
                    super.onReceivedError(view, errorCode, description, failingUrl);
                }
             });
    
        } else {
    
            Toast.makeText(getApplicationContext(), "Internet Connection Unavailable.", Toast.LENGTH_LONG).show();
                    Intent errorIntent = new Intent(this, NetworkErrorActivity.class);
                    startActivity(errorIntent); 
                    finish();
    
    
         }
    
        // Show the Up button in the action bar.
        setupActionBar();
    }
    
    public static boolean isNetworkStatusAvailable (Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivityManager != null) 
        {
            NetworkInfo netInfos = connectivityManager.getActiveNetworkInfo();
            if(netInfos != null)
            if(netInfos.isConnected()) 
                return true;
        }
        return false;
    }
    
    }
    

【问题讨论】:

  • 只是说,我不认为 android 上的 play store 应用程序正在使用 web 视图。对于您的问题,可能的方法是当网络不可用时,将您的网络视图替换为包含重试按钮的其他视图(如相对布局)。
  • 我从昨天开始尝试您的解决方案,但不知何故无法使用 webview 中的按钮。我现在使用以下方法解决了这个问题 - 我用 Intent errorIntent = new Intent(this, NetworkErrorActivity.class); 替换了 else 里面的代码开始活动(错误意图);在我的新活动中,我通过按一个按钮再次调用我以前的活动。终于成功了!!
  • “再次调用我之前的活动”是什么意思?如果你试图开始一个新的活动而不是返回到你以前的活动,那会弄乱你的后台堆栈。
  • 我现在已经编辑了我的代码。我在我的 mainActivity 中,我单击了一个将我发送到 webActivity 的按钮。我需要的是当用户没有网络连接时,而不是 webActivity 将他重定向到 errorActivity 说没有可用的网络并向他显示重试按钮。单击此重试按钮时,如果网络可用,则将他发送回 webActivity。我用过完成();避免回栈。您认为这会造成问题吗?

标签: android webview


【解决方案1】:

你必须使用片段。 onCreate 检查互联网连接,如果可用,使用 webview 加载片段,否则使用按钮加载片段。在按钮 OnClick 中再次检查互联网可用性,响应时您可以用 webView 替换片段。

【讨论】:

  • 我仍在学习如何使用片段,但我认为您的解决方案非常有效,因为目前我使用的不是两个片段,而是两个活动。我只是在按钮上遇到了一些问题。现在它工作正常。接下来我会尝试使用片段。
  • 你能解决这个问题吗?你能对此有所了解吗?博客或文章?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 2014-01-16
  • 2019-03-01
  • 2012-07-29
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多