使用HttpURLConnection& Android上的AsyncTask

时间:2014-07-20 13:05:28

标签: android http android-asynctask

我发现如何在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;
        }
    }
}

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>

所以我希望TextView显示答案,但它保持空白

谢谢

2 个答案:

答案 0 :(得分:0)

我想您需要制作一个HTTP request才能知道网址是否存在。从你的代码我会说你只是打开套接字,如果IP地址存在,这将永远发生。我建议发一个POST / GET请求并查看结果代码。

这是一个例子:

HttpGet req = new HttpGet(yourURL);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(req);

int resultCode = response.getStatusLine().getStatusCode();

答案 1 :(得分:0)

评论此行

text.setText("La page existe");
text.setText("La page n'existe pas");

您无法在doInBackground方法内与UI进行交互。您应该在onPostExecute方法中执行所有与UI相关的工作。

如果这解决了您的问题,请接受答案。

...干杯!