使用Android HttpURLConnection进行Http获取

2019年8月15日 20点热度 0条评论

我是Java和Android开发的新手,并尝试创建一个简单的应用程序,该应用程序应与Web服务器联系并使用http get将一些数据添加到数据库中。

当我在计算机上使用网络浏览器拨打电话时,它工作正常。但是,当我进行在Android模拟器中运行应用程序的通话时,不会添加任何数据。

我已将Internet权限添加到该应用的 list 中。 Logcat不报告任何问题。

谁能帮助我找出问题所在?

这是源代码:

package com.example.httptest;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class HttpTestActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView tv = new TextView(this);
        setContentView(tv);

        try {
            URL url = new URL("http://www.mysite.se/index.asp?data=99");
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.disconnect();
            tv.setText("Hello!");
        }
        catch (MalformedURLException ex) {
            Log.e("httptest",Log.getStackTraceString(ex)); 
        }
        catch (IOException ex) {
            Log.e("httptest",Log.getStackTraceString(ex));
        }   
    }        
}

解决方案如下:

尝试从中获取输入流,然后可以这样获取文本数据:-

    URL url;
    HttpURLConnection urlConnection = null;
    try {
        url = new URL("http://www.mysite.se/index.asp?data=99");

        urlConnection = (HttpURLConnection) url
                .openConnection();

        InputStream in = urlConnection.getInputStream();

        InputStreamReader isw = new InputStreamReader(in);

        int data = isw.read();
        while (data != -1) {
            char current = (char) data;
            data = isw.read();
            System.out.print(current);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (urlConnection != null) {
            urlConnection.disconnect();
        }    
    }

您可能还可以使用其他输入流读取器,例如缓冲读取器。

问题是,当您打开连接时-它不会“拉”任何数据。