【问题标题】:Show message if connection refused on Android如果在 Android 上连接被拒绝,则显示消息
【发布时间】:2015-05-02 18:56:23
【问题描述】:

我目前正在开发一个需要 HTTP 连接的 Android 应用程序。我正在使用物理设备来测试我的应用程序。如果我的设备上的无线连接未打开并且我启动了应用程序,它显然会崩溃并告诉我“不幸的是,我的应用程序已停止”。 .然后有这个堆栈跟踪告诉我与我的 URL 的连接被拒绝。到目前为止,一切都很好。现在,我需要的是,当我的设备上没有互联网连接时,我的应用程序不会崩溃,而是希望它显示一个对话框并保持应用程序运行。 我也在使用 Json。

这是我的代码的一部分:

        protected String doInBackground(String... args) {
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        // getting JSON string from URL
        JSONObject json = jParser.makeHttpRequest(url_all_restaurants, "GET", params);
        System.out.println(json.toString());
        if (json==null) {
            Toast.makeText(getApplicationContext(), "No internet connection", Toast.LENGTH_SHORT).show();

        }
        else {

            // Check your log cat for JSON reponse
            Log.d("All Products: ", json.toString());
        }

            try {
                // Checking for SUCCESS TAG
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    // products found
                    // Getting Array of Products
                    Jrestaurants = json.getJSONArray(TAG_RESTAURANTS);

                    // looping through All Products
                    for (int i = 0; i < Jrestaurants.length(); i++) {
                        JSONObject c = Jrestaurants.getJSONObject(i);

                        // Storing each json item in variable
                        String name = c.getString("name");
                        String description = c.getString("description");
                        String address = c.getString("address");
                        String rating = c.getString("rating");
                        String open = c.getString("open");
                        String close = c.getString("close");
                        double lat = c.getDouble("latitude");
                        double longit = c.getDouble("longitude");

                        Restaurant r = new Restaurant(name, description, address, rating, open, close, lat, longit);
                        //   Restaurant r2 = new Restaurant("Nobori Japanese Restaurant","0364 144 626","Plopilor 57-62 Street","4.2","10:00 am","11:30 pm",46.762555,23.556854);

                        restaurants.add(r.getName());
                        //  restaurants.add(r2.getName());

                        restaurantsMap.put(r.getName(), r);
                        //restaurantsMap.put(r2.getName(),r2);
                    }
                } else {


                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

我尝试检查json 是否为空,但这不起作用。我不确定要检查什么以及在哪里检查。

【问题讨论】:

    标签: android json http


    【解决方案1】:

    在你的类中创建这个方法:

    public static boolean isNetworkAvailable(Context context) {
        return ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo() != null;
    }
    

    调用这个方法并在if条件下执行你的asycTask:

    if (isNetworkAvailable(context)) {
        // available network
        new MyTask().execute(""); // like this
    } else {
        // no network
    }
    //<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    

    【讨论】:

    • 我可能错了,但我认为您的代码只告诉您您已连接到网络,但如果网络有互联网连接,则不会。
    • 是的,但是我已经在网络连接时执行了任务,只有它简单的方法只是确定连接是否可用,如果可用,请调用您的 Web 服务,否则显示 Toast 消息并且不调用 Web 服务,您将永远不会得到异常
    【解决方案2】:

    清单添加:

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    

    ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    boolean internet = netInfo != null && netInfo.isConnected();
    
    if(internet) {
        JSONObject json = jParser.makeHttpRequest(url_all_restaurants, "GET", params);
        //....
    } else {
        //show dialog
    }
    

    【讨论】:

    • 究竟发生了什么?
    • 老样子org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.2.102 refused
    • 您是否在清单中请求了许可?你能告诉我你是如何编辑代码的吗?
    • 当我把它放在我的方法中时它不起作用,但我在执行我的任务之前把代码放在onCreate 中并且它起作用了。谢谢先生:D
    • 它也应该在你的方法中工作,只需引用活动的上下文......但它通常在'onCreate'中更好。
    猜你喜欢
    • 2017-01-25
    • 2017-12-29
    • 2014-06-28
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多