使用HttpURLConnection&;Android上的异步任务
我正在发现如何在Android应用程序中发出HTTP请求,因此我尝试做的第一件事就是测试给定的url是否存在。我只是想让它显示“网页存在”,如果它存在和“网页不存在”,如果它不存在。但什么都没有表现出来。我的代码中一定有错误,但我找不到。下面是代码:使用HttpURLConnection&;Android上的异步任务,android,http,android-asynctask,Android,Http,Android Asynctask,我正在发现如何在Android应用程序中发出HTTP请求,因此我尝试做的第一件事就是测试给定的url是否存在。我只是想让它显示“网页存在”,如果它存在和“网页不存在”,如果它不存在。但什么都没有表现出来。我的代码中一定有错误,但我找不到。下面是代码: package com.nounoursheureux.excalicubeforum; import java.io.IOException; import java.net.HttpURLConnection; import java.net
package com.nounoursheureux.excalicubeforum;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private HttpURLConnection connection;
private TextView text;
private URL url;
private Boolean result;
private HttpTask httpTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = new TextView(this);
httpTask = new HttpTask();
httpTask.execute();
}
final class HttpTask extends AsyncTask<Void, Integer, Boolean> {
private HttpURLConnection connection;
private URL url;
protected void onPreExecute() {
try {
url = new URL("http://www.excalicube.net/");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
connection = (HttpURLConnection)url.openConnection();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
protected Boolean doInBackground(Void... params) {
try {
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK ) {
text.setText("La page existe");
return true;
}
else if (connection.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND ) {
text.setText("La page n'existe pas");
return false;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
}
package com.nounoursheureux.excaliubeforum;
导入java.io.IOException;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v7.app.ActionBarActivity;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类MainActivity扩展了ActionBarActivity{
私有HttpURLConnection;
私有文本查看文本;
私有URL;
私有布尔结果;
私有HttpTask HttpTask;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=新文本视图(此);
httpTask=新的httpTask();
httpTask.execute();
}
最终类HttpTask扩展了AsyncTask{
私有HttpURLConnection;
私有URL;
受保护的void onPreExecute(){
试一试{
url=新url(“http://www.excalicube.net/");
}捕获(格式错误){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
connection=(HttpURLConnection)url.openConnection();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
}
受保护的布尔doInBackground(Void…params){
试一试{
if(connection.getResponseCode()==HttpURLConnection.HTTP\u确定){
text.setText(“La page existe”);
返回true;
}
else if(connection.getResponseCode()==HttpURLConnection.HTTP\u未找到){
text.setText(“不存在的页面”);
返回false;
}
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}
}
}
以及XML布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
因此,我希望文本视图显示答案,但它保持为空谢谢我想您需要发出一个
HTTP请求
,以了解URL是否存在。从您的代码中,我可以说您只是在打开套接字,如果IP地址存在,就会发生这种情况。我建议提出POST/GET请求并查看结果代码
这将是一个例子:
HttpGet req = new HttpGet(yourURL);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(req);
int resultCode = response.getStatusLine().getStatusCode();
评论这行
text.setText("La page existe");
text.setText("La page n'existe pas");
您不能在doInBackground方法内与UI交互。您应该在onPostExecute方法中完成所有与UI相关的工作
如果这能解决你的问题,请接受答案
干杯