方法sendMessage(View view)
在点击按钮时运行。该方法被成功调用,因为t.setText("Checking...");
按预期将文本更改为Checking...
。
问题是,当s= urlConnection.getResponseCode();
没有被注释掉时,应用程序强制关闭。是因为没有建立连接还是错过了代码中的某些内容?
我是Android编程新手,无法使用HttpUrlConnection在Web服务上找到合适的指南或视频教程。我想在继续学习REST,SOAP或其他API之前先了解这一点。
我尝试了什么?
将网址更改为我拥有的子域但仍然崩溃。
- 醇>
在论坛和StackOverflow上搜索并遇到了一个名为AsyncTask的东西。我不确定这里是否有必要,因为我没有在Android Doc中找到这个要求。我从Android Doc学到了大部分连接部分,因为视频教程没有解释清楚。
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会让事情变得更容易,但我想这样做是为了学习目的。如果有人可以引导我找到适当的教程或博客,那将是非常棒的。老实说,在我推荐的教程中,我找不到任何正确解释的内容。
答案 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();