如何连接到网页,获取状态码以检查网页是否可用

时间:2018-08-10 03:23:40

标签: java android http https

我是android编程的新手,遇到了一些需要帮助的问题,我在这部分上停留了很长时间。

问题:代码已成功编译,但是进行连接检查使其崩溃。您能通过告诉导致问题的原因并为我提供解决方案或帮助改善代码来帮助我吗?谢谢。

过程:该应用通过发送简单的HTTP连接来检查其包名称,以检查其要检查的应用是否存在于Google Play商店中。如果成功连接到Google Play商店中的应用程序页面,它将输出一个字符串,表明该页面存在并且是合法应用程序。

这是我的代码段

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        output3 = findViewById(R.id.output3);
        output3.setMovementMethod(ScrollingMovementMethod.getInstance());
        connection();
    }

public void connection(){

        try {
            String packagename = "com.facebook.katana";
            URL url = new URL("http://play.google.com/store/apps/details?id="+packagename+"&hl=en");

            URLConnection urlConn = url.openConnection();
            HttpURLConnection con = (HttpURLConnection) urlConn;
            con.setUseCaches(false);
            con.setAllowUserInteraction(false);
            con.setRequestMethod("GET");

            con.connect();

            int status = con.getResponseCode();

            if (status == HttpURLConnection.HTTP_NOT_FOUND){
                output3.append("not from google play store");
            }
            if (status == HttpURLConnection.HTTP_OK) {
                output3.append("google App Store");
            }
            if (status != HttpsURLConnection.HTTP_NOT_FOUND && status != HttpsURLConnection.HTTP_OK)
                output3.append("Other Response");

            con.disconnect();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

1 个答案:

答案 0 :(得分:0)

首先,主线程不再支持HTTP请求,因此您必须使用并行线程,或者简单地使用AsyncTask。检查下面的AsyncTask代码。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        output3 = findViewById(R.id.output3);
        output3.setMovementMethod(ScrollingMovementMethod.getInstance());
        AsyncTask.execute(new Runnable() {
        @Override
        public void run() {
            connection();
        }
    });
    }

第二件事是确保清单中添加了Internet权限。