Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用HttpURLConnection&;Android上的异步任务_Android_Http_Android Asynctask - Fatal编程技术网

使用HttpURLConnection&;Android上的异步任务

使用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

我正在发现如何在Android应用程序中发出HTTP请求,因此我尝试做的第一件事就是测试给定的url是否存在。我只是想让它显示“网页存在”,如果它存在和“网页不存在”,如果它不存在。但什么都没有表现出来。我的代码中一定有错误,但我找不到。下面是代码:

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相关的工作

如果这能解决你的问题,请接受答案

干杯