【问题标题】:How do I respond to user if I have no internet connection?如果我没有互联网连接,我该如何回应用户?
【发布时间】:2013-05-22 16:08:47
【问题描述】:

我正在尝试编写可以读取 JSONArray 的代码,但有可能互联网服务器已关闭并且设备无法连接,或者设备上没有互联网连接。

我如何优雅地响应用户,因为我的异常捕获块中的返回语句似乎不起作用。

这是我的代码。

public JSONArray getJSONFromUrl(String url) {

    JSONArray jArray = null;

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        if(httpResponse.getStatusLine().getStatusCode() == 200){
            // Connection was established. Get the content. 
            HttpEntity httpEntity = httpResponse.getEntity();

            // A Simple JSON Response Read
            istream = httpEntity.getContent();
        } else {
            throw new RuntimeException("Failed : HTTP error code : "
                   + httpResponse.getStatusLine().getStatusCode());
        }

        if(BuildConfig.DEBUG){
            Log.d(Constants.LOG, "httpEntity : ");
        }

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        return;
    } catch (ClientProtocolException e) {
        e.printStackTrace();
        return;
    } catch (IOException e) {
        e.printStackTrace();
        return;
    }

【问题讨论】:

    标签: android json http user-interface


    【解决方案1】:

    只需使用Toast 说明问题所在。例如“无法建立连接”

    【讨论】:

      【解决方案2】:

      这是我的做法:

          ConnectivityManager cm = (ConnectivityManager)this.getSystemService(CONNECTIVITY_SERVICE);
          NetworkInfo ni =cm.getActiveNetworkInfo(); 
              if(ni==null){
      final Dialog dialog = new Dialog(MainActivity.this);
                  dialog.setContentView(R.layout.dialog);
                  dialog.setTitle("No Internet Connection");
                  dialog.show();
                  dialog.setCancelable(false);
                  Button settings = (Button) dialog.findViewById(R.id.settings);
                  Button exit = (Button) dialog.findViewById(R.id.exitApp);
                  Button retry = (Button) dialog.findViewById(R.id.retry);
                  settings.setOnClickListener(new OnClickListener(){
      
                      @Override
                      public void onClick(View arg0) {
                          startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
                      }
      
                  });
                  exit.setOnClickListener(new OnClickListener(){
      
                      @Override
                      public void onClick(View arg0) {
                      dialog.cancel();    
                      MainActivity.this.finish();
                      }
      
                  });
                  retry.setOnClickListener(new OnClickListener(){
      
                      @Override
                      public void onClick(View arg0) {
                      dialog.cancel();    
                      MainActivity.this.finish();
                      Intent newActivity = new Intent(getApplicationContext(), MainActivity.class);
                      startActivity(newActivity);
                      }
      
                  });
      

      【讨论】:

        【解决方案3】:

        如果有的话,catch 将如何工作

        throw new RuntimeException("Failed : HTTP error code : "
                       + httpResponse.getStatusLine().getStatusCode());
        

        如果你的代码告诉操作系统抛出它会抛出,你还能期待什么?

        【讨论】:

        • 感谢@Siddarth - 我不知道该怎么做,因为网站关闭了,我的应用程序实际上失败并关闭了。这就是我试图抛出一些东西并抓住它的原因,这样我就可以在响应用户网站关闭后优雅地结束我的应用程序。要拥有良好的用户界面,最好使用 msg 响应用户,然后让应用崩溃。
        • 和 iPhone 一样,我什么都不会回应,只是默默地关闭。但是,如果设备互联网出现故障,那么我会发送一条消息“检查您的互联网连接”,然后关闭。
        猜你喜欢
        • 1970-01-01
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        • 1970-01-01
        • 2021-12-25
        相关资源
        最近更新 更多