使用 XAMPP 将 android 连接到本地服务器

Posted

技术标签:

【中文标题】使用 XAMPP 将 android 连接到本地服务器【英文标题】:Connecting android to a local server using XAMPP 【发布时间】:2017-03-22 00:30:56 【问题描述】:

我正在尝试将数据从本地服务器获取到 android 设备,我使用的是免费的在线托管服务,在遇到一些不相关的技术问题之前一切正常,因此问题不太可能出在代码本身(只是一个想法)。无论如何,当我使用 XAMPP 迁移到本地服务器时,我的应用程序没有收到任何响应,我从手机浏览器访问了 php 文件,它给出了正确的结果,但应用程序本身完全没有声音。通过 SO 搜索,大多数问题都提到在文件的 URL 中放置正确的 IP 地址。我正在使用 volley,并且我插入了与我在浏览器中访问文件时完全相同的 URL,服务器似乎根本没有响应。

这是我正在使用的 php 代码:

<?php
  include 'dbConnect.php';
$searchTerm='d';
$query = $conn->prepare('SELECT term,id FROM tag WHERE term LIKE :searchTerm');
$query->execute(array(':searchTerm'=>$searchTerm.'%'));
$result=$query->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(array('result'=>$result));
?>

我正在使用 Volley 库来联系服务器,第一个文件是 CustomeAutoCompleteTextViewTextChangedListener.java

@Override
    public void onTextChanged(CharSequence s, int start, int before, int count) 
        try 
            NetworkRequsts networkRequsts = new NetworkRequsts(context);
            networkRequsts.tagsJsonObjectRequest("https://192.168.110.1:8080/Register.php");
        
        catch (Exception e)
        
            e.printStackTrace();
        
    

这是应该发出请求的地方,注意 URL,这是我认为问题所在,因为这是我在更改服务器时在代码中更改的唯一内容。

这是 Volley 请求:

NetworkRequsts.java

JsonObjectRequest tagJsonRequest=new JsonObjectRequest(url,tagSearchObject, new Response.Listener<JSONObject>() 
            @Override
            public void onResponse(JSONObject response) 

                try 
                    Log.d("Search term object",tagSearchObject.toString());
                    Log.d("respone Test", response.length()+" "+response.toString());
                    JASONArrayResponse=response.getJSONArray("result");
                    for(int i=0;i<JASONArrayResponse.length();i++)
                    
                        JSONObject jsonObject=JASONArrayResponse.getJSONObject(i);
                        Log.d("Volley", jsonObject.getString("term"));
                        Log.d("searchTerm",register.tagsAutoCompleteTextView.getText().toString());

                    
                
                catch(JSONException JE)
                
                    JE.printStackTrace();
                
            
        , new Response.ErrorListener() 
            @Override
            public void onErrorResponse(VolleyError error) 
                if (error instanceof ServerError) 
                    Log.e("Volley", "ServerError");
                    Toast.makeText(context.getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG).show();
                

            

        );

【问题讨论】:

为了通过 XAMPP 成功运行应用程序,您需要保持 IP 地址与服务器运行的系统 IP 地址相同,并且系统和移动设备都应连接到同一网络。所以交叉检查这些点。您可能在这里遗漏了一些东西。 使用https 和端口8080 可能会导致问题。 the server doesn't seem to respond at all. 什么意思?在 onResponse() 和 onErrorResponse() 你应该放置更多的日志语句。你没有涵盖所有的可能性。 应用程序没有调用任何异常,log.d 应该显示从服务器获取的 JSON 数组,但日志没有显示任何内容,只是我输入的字符,仅此而已 【参考方案1】:

首先检查服务器是否正常工作,使用localhost在浏览器中加载,如果正常工作,则将ip地址更改为系统ip。然后检查共享受限的网络连接属性。大多数情况下,连接失败的发生是由于防病毒程序或类似的东西限制了共享。授予所有权限后,它将起作用

【讨论】:

我可以从我的 PC(服务器)浏览器和手机浏览器访问该文件,如果是 AV 问题,那么为什么它允许手机浏览器连接但不允许应用程序连接? 您没有设置任何必要的权限。 可能你缺少 android.permission.INTERNET 如果是这种情况,它会给出错误,包括权限 你把jsonObjectRequest添加到requestQueue了吗?

以上是关于使用 XAMPP 将 android 连接到本地服务器的主要内容,如果未能解决你的问题,请参考以下文章

Android - 尝试连接到本地服务器时出错(Xampp)

URL 使用 Android 模拟器连接到 XAMPP 服务器

如何将我的Android模拟器连接到我的本地Web服务器

如何将 xampp 数据库连接到远程服务器?

Android设备无法连接到本地主机中的mysql [关闭]

Android 手机无法连接到安装在 VMware 上的 XAMPP 服务器