Android连接到localhost

Ale*_*xDG 18 java android json wamp localhost

我正在尝试将我的Android应用程序连接到本地主机URL,这要归功于wamp服务器,但它不起作用.我的目标是获取json数据并解析这些数据.对于我的测试,我使用的设备不是模拟器,我在AndroidManifest.xml中使用权限:

<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)

我的网址看起来像这样:

String url = "http://10.0.2.2:8080/tests/PhpProject1/connectionBDD.php";
Run Code Online (Sandbox Code Playgroud)

我试过了 :

http://localhost/
http://10.0.2.2:8080/
http://10.0.2.2/
Run Code Online (Sandbox Code Playgroud)

但它到目前为止从未奏效:

    java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 80): connect failed: ECONNREFUSED (Connection refused)

    failed to connect to /10.0.2.2 (port 8080): connect failed: ETIMEDOUT (Connection timed out)

    java.net.ConnectException: failed to connect to /10.0.2.2 (port 80): connect failed: ETIMEDOUT (Connection timed out)
Run Code Online (Sandbox Code Playgroud)

然后我尝试在互联网上找到一个json url测试:http://headers.jsontest.com/

它工作得很好,我在这个地址得到了json数据.所以我想我的代码很好,这里的问题是我的localhost网址,我不知道应该是什么样的确切形式..我读了很多关于它的线程,但我没有找到解决方案.

这是我的代码:

主要活动 :

public class MainActivity extends Activity {
    private String url = "http://10.0.2.2:8080/tests/PhpProject1/connectionBDD.php";

    private ListView lv = null;
    private Button bGetData;

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

        final JsonDownloaderTask task = new JsonDownloaderTask(this);
        lv = (ListView) findViewById(R.id.list);

        bGetData = (Button)findViewById(R.id.getdata);
        bGetData.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {               
                task.execute(url);                      
            }
        });
    }

    public void jsonTaskComplete(JSONArray data){
        //todo
    }   
}
Run Code Online (Sandbox Code Playgroud)

AsyncTask:

public class JsonDownloaderTask extends AsyncTask<String, String, JSONArray> {

    MainActivity ma;

    public JsonDownloaderTask(MainActivity main){
        ma = main;
    }

    @Override
    protected JSONArray doInBackground(String... url) {
        JSONParser jParser = new JSONParser();
        // Getting JSON from URL
        JSONArray jsonArray = null;
        try {
            jsonArray = jParser.getJSONFromUrl(url[0]);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return jsonArray;        
    }

    protected void onPostExecute(JSONArray data){

        ma.jsonTaskComplete(data);
    }
}
Run Code Online (Sandbox Code Playgroud)

JSONParser:

public class JSONParser {
    String data = "";
    JSONArray jsonArray = null;        
    InputStream is = null;

    public JSONParser(){}

    // Method to download json data from url
    public JSONArray getJSONFromUrl(String strUrl) throws IOException{
        try{
            URL url = new URL(strUrl);

            // Creating an http connection to communicate with url
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            // Connecting to url
            urlConnection.connect();

            // Reading data from url
            is = urlConnection.getInputStream();

            BufferedReader br = new BufferedReader(new InputStreamReader(is));

            StringBuffer sb  = new StringBuffer();

            String line = "";
            while( ( line = br.readLine())  != null){
                sb.append(line);
            }
            is.close();
            data = sb.toString();

            //br.close();

            jsonArray = new JSONArray(data);

        }catch(Exception e){
            Log.d("Exception while downloading url", e.toString());
        }finally{
            is.close();
        }

        return jsonArray;
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 11

IP地址10.0.2.2用于从仿真器获取数据.Localhost将始终指向运行该应用程序的模拟器/ android设备.要让您的设备从您的电脑上获取数据,它应该在同一个网络中(通过WiFi连接到您的路由器),您应该使用您的电脑的本地IP地址(通常是192.168.1.x号码).


Mic*_*yan 5

如果您尝试连接到"localhost",它将解析为Android设备,而不是您自己的localhost(除非您在模拟器中运行).我建议开发的是在操作栏中添加一个溢出菜单,其中包含一个名为"Settings"的条目,该条目提供用于指定应用程序设置的Settings活动,并在"Settings"中有一个"Developer options"条目,可让您指定要使用的自定义服务器地址.在开发过程中,您可以使用此选项为您的应用输入自定义服务器地址.(您将需要一个实际的服务器地址,实际上可以通过Internet访问,而不是使用localhost).


Aja*_*y S 4

首先,您必须在 eclipse 设置中绑定运行服务器的机器的 IP 地址。

你可以这样做。

Eclipse 运行配置

右键单击PHPEclipse 中的项目,然后单击“运行配置”,然后在“Web Application位置”中找到该Argument选项卡。现在这里给出运行服务器的机器的端口和 LAN IP 地址。

像这样--port=8888 --address=192.168.1.6然后将 URL 更新为http://192.168.1.6:8080/tests/PhpProject1/connectionBDD.php

在我的例子中,这是我的 LAN IP 地址 192.168.1.6,您必须使用类似 的网络命令找到它ipconfigifconfig并使用该 IP 地址。

  • 我怎样才能在Android Studio上做到这一点? (2认同)