Android 使用HTTP访问web服务器

Android 使用HTTP访问web服务器,android,android-asynctask,Android,Android Asynctask,我正在尝试使用AsyncTask和默认Http客户端访问位于web服务器上的php文件 我不断地发现这个错误: 无法解析主机“主机名”:没有与主机名关联的地址 这是我尝试访问的活动: public class MainActivity extends Activity { Button b1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

我正在尝试使用AsyncTask和默认Http客户端访问位于web服务器上的php文件

我不断地发现这个错误:

无法解析主机“主机名”:没有与主机名关联的地址

这是我尝试访问的活动:

public class MainActivity extends Activity {

Button b1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    b1 = (Button)findViewById(R.id.button1);
    b1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            new HTTPTask().execute();
        }
    });
}

private class HTTPTask extends AsyncTask<String, Void, Boolean>{

    @Override
    protected Boolean doInBackground(String... params) {

        //location of file to retrieve
        String url = "http://hostname/12345/db_connect.php";
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();


        try{
            HttpClient httpclient = new DefaultHttpClient();

            HttpPost httppost = new HttpPost(url);

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            httpclient.execute(httppost);
            return true;
        }catch(Exception e){
            Log.e("log_tag", "Error in Connection " + e.toString());
            return false;
        }

    }

    @Override
    protected void onPostExecute(Boolean result) {
        super.onPostExecute(result);
        if(result){
            Toast.makeText(getApplicationContext(), "Connection Established!", Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(getApplicationContext(), "Connection Failed!", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        Toast.makeText(getApplicationContext(), "Connection initiating...", Toast.LENGTH_SHORT).show();
    }

}
公共类MainActivity扩展活动{
按钮b1;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(按钮)findViewById(R.id.button1);
b1.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
新建HTTPTask().execute();
}
});
}
私有类HTTPTask扩展了AsyncTask{
@凌驾
受保护的布尔doInBackground(字符串…参数){
//要检索的文件的位置
字符串url=”http://hostname/12345/db_connect.php";
ArrayList nameValuePairs=新的ArrayList();
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
返回true;
}捕获(例外e){
Log.e(“Log_标记”,“连接错误”+e.toString());
返回false;
}
}
@凌驾
受保护的void onPostExecute(布尔结果){
super.onPostExecute(结果);
如果(结果){
Toast.makeText(getApplicationContext(),“已建立连接!”,Toast.LENGTH\u SHORT.show();
}否则{
Toast.makeText(getApplicationContext(),“连接失败!”,Toast.LENGTH\u SHORT.show();
}
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
Toast.makeText(getApplicationContext(),“连接启动…”,Toast.LENGTH\u SHORT.show();
}
}
}

我还向清单文件中添加了以下内容:

 <uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

我只是想不出会是什么?我在大学里用一台机器工作,我猜可能是大楼里的保安?非常感谢您的帮助

舱单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dbconnectiontest"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

检查此解决方案

希望它能解决你的问题

将这一行添加到
AndroidManifest.xml
文件中,就在
标记之后和
标记之前:

 <uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

编辑:


如果它不工作,则此
未知后异常错误消息的最常见原因是
。另一个可能的原因是您的internet连接实际上已断开,您可以使用“
ping
”命令进行测试。

在此添加您的完整清单文件我ping了主机,主机成功发送了4个数据包。我想知道这是否与我的校园安全有关,你看到的校园里有一个web服务器。我刚刚将url更改为www.google.com,没有错误,连接成功建立。我明天得和IT部门谈谈,解决这个问题。谢谢你的帮助,迪克西!