HttpUrlConnection App在ICS

时间:2018-03-12 15:14:27

标签: android httpurlconnection android-webservice

方法sendMessage(View view)在点击按钮时运行。该方法被成功调用,因为t.setText("Checking...");按预期将文本更改为Checking...

问题是,当s= urlConnection.getResponseCode();没有被注释掉时,应用程序强制关闭。是因为没有建立连接还是错过了代码中的某些内容?

我是Android编程新手,无法使用HttpUrlConnection在Web服务上找到合适的指南或视频教程。我想在继续学习REST,SOAP或其他API之前先了解这一点。

我尝试了什么?

  
      
  1. 将网址更改为我拥有的子域但仍然崩溃。

  2.   
  3. 在论坛和StackOverflow上搜索并遇到了一个名为AsyncTask的东西。我不确定这里是否有必要,因为我没有在Android Doc中找到这个要求。我从Android Doc学到了大部分连接部分,因为视频教程没有解释清楚。

  4.   
    public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

    }
    public void sendMessage(View view) throws IOException {

        TextView t=findViewById(R.id.hello2);
        t.setText("Checking...");
        URL url = new URL("http://google.com");
       HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        try {

            int s=0;
            s= urlConnection.getResponseCode();
            t.setText("Nice.");
        } finally {
            urlConnection.disconnect();
        }
     }
}

我知道使用REST和SOAP之类的API会让事情变得更容易,但我想这样做是为了学习目的。如果有人可以引导我找到适当的教程或博客,那将是非常棒的。老实说,在我推荐的教程中,我找不到任何正确解释的内容。

1 个答案:

答案 0 :(得分:2)

肯定你不能这样做,为什么?

由于android中的主线程是UI线程,它不能像网络线程那样长时间操作,它不能等待它,但是任何显式线程都无权访问UI线程那么应该是什么你做 ?

你必须制作异步方法,并且应该在名为AsyncTask的类中调用httpUrlConnection 如果你确实需要在内部异步方法中编辑UI线程中的某个组件,那么你必须使用Handlers来编辑其中的一些组件,所以你的代码只有在你做了类似的事情时才能工作< / p>

new AsyncTask<Void, Void, Void>() {

    @Override
    protected Void doInBackground( Void... voids ) {
        HttpURLConnection urlConnection = (HttpURLConnection) 
        url.openConnection();
        return null;
    }
}.execute();