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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (93)

我刚接触到android编程,我遇到了一些需要帮助的问题,我已经坚持了很长一段时间。

问题:代码已成功编译,但是要进行检查连接会使其崩溃。你能告诉我导致问题的原因并建议我解决方案或帮助改进我的代码吗?谢谢。

处理:应用程序通过发送简单的HTTP连接检查其包名称,检查是否存在要检查的应用程序是否存在于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();
        }
    }
提问于
用户回答回答于

首先,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();
        }
    });
    }

第二件事是确保在manifest中添加了Internet权限。

扫码关注云+社区

领取腾讯云代金券