0

我正在尝试将 Android App 连接到 java webservice 以获取 pHp 解析值。

PHP脚本是:

<?php
$data = array('name' => 'Froyo', 'version' => 'Android 2.2'); 
print (json_encode($data)); 
?> 

Java WebService 是:

package com.json.php;

import android.app.Activity;
import android.os.Bundle;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import android.widget.TextView;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;


public class JSONExampleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://127.0.0.1/test.php");
        TextView textView = (TextView)findViewById(R.id.textView1);
        try {

            HttpResponse response = httpclient.execute(httppost);
            String jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
            JSONObject object = new JSONObject(jsonResult);

            String name = object.getString("name");
            String verion = object.getString("version");
            textView.setText(name + " - " + verion);

        } 
        catch (JSONException e) {
            e.printStackTrace();
        } 
        catch (ClientProtocolException e) {
            e.printStackTrace();
        } 
        catch (IOException e) {
            e.printStackTrace();
        }


       }
    private StringBuilder inputStreamToString(InputStream is) {
        String rLine = "";
        StringBuilder answer = new StringBuilder();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));

        try {
         while ((rLine = rd.readLine()) != null) {
          answer.append(rLine);
           }
        }

        catch (IOException e) {
            e.printStackTrace();
         }
        return answer;
       }
}

我在HttpPost中都试过了http://127.0.0.1/test.php and http://localhost/test.php,它不起作用。我在浏览器上检查了我的 php 文件,结果很好。我哪里错了?另外我正在使用Mac,由于所有权限问题,这是否与问题有关?

4

3 回答 3

4

看看这个页面:http: //developer.android.com/tools/devices/emulator.html#networkaddresses

您会注意到它们指的是:

  • 10.0.2.2作为主机环回接口的特殊别名(即开发机器上的 127.0.0.1)
  • 127.0.0.1as 被仿真设备自己的环回接口

希望我回答并解决了您的问题:)

于 2013-04-05T13:33:32.483 回答
1

您不应使用 127.0.0.1 或 localhost 因为 Android 模拟器在虚拟机 (QEMU) 中运行,因此此处 127.0.0.1 或 localhost 将是模拟器自己的环回地址。

如果您从 Android 模拟器引用系统上的本地主机,那么您必须使用http://10.0.2.2/. 如果 Web 服务不在您的开发机器上,则使用您的服务器 IP。

如果您的服务器是 Windows,则从命令提示符运行命令“ipconfig”以查找 IP 地址。

参考:模拟器网络

于 2013-04-05T13:31:03.077 回答
0

感谢@silentw ..我想出了如何让它工作!刚刚将 HttpPost 更改为http://10.0.2.2/test.php

于 2013-04-05T13:33:44.363 回答