无法使用 android studio 连接到“xampp server localhost”

Posted

技术标签:

【中文标题】无法使用 android studio 连接到“xampp server localhost”【英文标题】:Can not connect to "xampp server localhost" with android studio 【发布时间】:2019-02-01 02:39:57 【问题描述】:

我尝试使用 AsyncTask 类通过 android studio 连接到我的 localhost xampp。这是 AsyncTask 但它给出了错误提示 Failed to connect to /10.0.2.2:800

我尝试了我的真实 IP 地址 cmd --> ipconfig IPV4 和其他一些技巧,但是 他们没有成功

下面是我的应用结构

AsyncTask 使用类

package app.buil.land.food.doymaj.doymaj;

import android.app.AlertDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;

/**
 * Created by ProgrammingKnowledge on 1/5/2016.
 */
public class backGroundActivities extends AsyncTask<String,Void,String> 
    Context context;
    AlertDialog alertDialog;
    backGroundActivities (Context ctx) 
        context = ctx;
    
    @Override
    protected String doInBackground(String... params) 
        String type = params[0];
        String login_url = "http://10.0.2.2:800/login.php";
        if(type.equals("login")) 
            try 
                String phone_number = params[1];
//                String password = params[2];
                URL url = new URL(login_url);
                HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setDoOutput(true);
                httpURLConnection.setDoInput(true);
                OutputStream outputStream = httpURLConnection.getOutputStream();
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                String post_data = URLEncoder.encode("phone_number","UTF-8")+"="+URLEncoder.encode(phone_number,"UTF-8");
                bufferedWriter.write(post_data);
                bufferedWriter.flush();
                bufferedWriter.close();
                outputStream.close();
                InputStream inputStream = httpURLConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
                String result="";
                String line="";
                while((line = bufferedReader.readLine())!= null) 
                    result += line;
                    Log.e("Line_from_php_server",result);
                
                bufferedReader.close();
                inputStream.close();
                httpURLConnection.disconnect();
                return result;
             catch (MalformedURLException e) 
                e.printStackTrace();


             catch (IOException e) 
                e.printStackTrace();
            
        
        return null;
    

    @Override
    protected void onPreExecute() 
        alertDialog = new AlertDialog.Builder(context).create();
        alertDialog.setTitle("Login Status");
    

    @Override
    protected void onPostExecute(String result) 
        alertDialog.setMessage(result);
        alertDialog.show();
    

    @Override
    protected void onProgressUpdate(Void... values) 
        super.onProgressUpdate(values);
    

这是我的 MainActivity

package app.buil.land.food.doymaj.doymaj;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity 

    EditText phone_Number;
    EditText user_Name;
    EditText pass_Word;
    Button singButton;


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


     //   singButton = (Button)findViewById(R.id.sing_id);
     //   singButton.setOnClickListener(kyListener);
        phone_Number =(EditText)findViewById(R.id.mobile_id);
        user_Name =(EditText)findViewById(R.id.name_id);
        pass_Word =(EditText)findViewById(R.id.p_id);




    

//    Push_Identity db = new Push_Identity(this,"CustomerDatabas.db",null,1);


    public boolean validate(EditText[] fields)
        for(int i = 0; i < fields.length; i++)
            EditText currentField = fields[i];

            if(currentField.getText().toString().length() <= 0)

                switch (i)

                    case 0:

                        Toast.makeText(getApplicationContext(),"شماره تلفن وارد نشده  ",Toast.LENGTH_LONG).show() ;
                        break;



                    case 1:

                        Toast.makeText(getApplicationContext(),"نام کاربری وارد نشده  ",Toast.LENGTH_LONG).show() ;
                        break;


                    case 2:

                        Toast.makeText(getApplicationContext(),"رمز وارد نشده  ",Toast.LENGTH_LONG).show() ;
                        break;

                
                return false;
            
        
        return true;
    



    //private View.OnClickListener kyListener = new View.OnClickListener() 
        public void send_number(View v) 
            // do something when the button is clicked
            // Yes we will handle click here but which button clicked??? We don't know


            boolean fieldsOK = validate(new EditText[]  phone_Number, user_Name, pass_Word );



                 if (fieldsOK ==true)

                          String Phon = phone_Number.getText().toString();
                          Toast.makeText(getApplicationContext(),Phon,Toast.LENGTH_LONG);
                          // the Tooast dose not display anything
                       //    it seems that the EditText is empty buy i enter the value in
                        // in it.
                          String type ="login";

                          backGroundActivities back = new backGroundActivities(this);
                          back.execute(type,Phon);
        //
                 
        
   // ;




XML

        <EditText
            android:id="@+id/mobile_id"
            android:layout_
            android:layout_
            android:background="@drawable/customized_edtitext"
            android:drawablePadding="15dp"
            android:paddingRight="10dp"
            android:paddingLeft="15dp"
            android:drawableRight="@drawable/ic_smartphone"
            android:elevation="2dp"
            android:textStyle="bold"
            android:hint="@string/register_phone_commnet"
            android:fontFamily="@font/iransansmedium"
            android:textSize="12sp"


            />


        <EditText
            android:id="@+id/name_id"
            android:layout_
            android:layout_
            android:layout_below="@id/mobile_id"
            android:background="@drawable/customized_edtitext1"
            android:drawablePadding="15dp"
            android:paddingRight="10dp"
            android:paddingLeft="15dp"
            android:drawableRight="@mipmap/ic_user"
            android:elevation="2dp"
            android:textStyle="bold"
            android:hint="@string/register_user_commnet"
            android:fontFamily="@font/iransansmedium"
            android:textSize="12dp" />

        <EditText
            android:id="@+id/p_id"
            android:layout_
            android:layout_
            android:layout_below="@+id/name_id"
            android:background="@drawable/customized_edtitext2"
            android:drawablePadding="15dp"
            android:paddingRight="10dp"
            android:paddingLeft="15dp"
            android:drawableRight="@mipmap/ic_unlocked"
            android:elevation="2dp"
            android:textStyle="bold"
            android:hint="@string/register_pass_commnet"
            android:fontFamily="@font/iransansmedium"
            android:textSize="12sp"
            android:paddingEnd="10dp" />

这是我的 php 页面的 url enter image description here

还有更多信息:我安装了 Genymotion,还安装了 bluestack 和 VirtaulBox。他们对端口有冲突吗?我的意思是这些软件会导致 Apache xampp 及其端口冲突吗?

【问题讨论】:

您确定您的 apache 服务器侦听端口 800?通常,您会找到类似 80 的内容。 谢谢 我如何找到 apache 服务器是否监听 800 端口? 我的意思是如何找到apache服务器监听的端口? 您添加了来自浏览器的屏幕截图。那一个有效吗? - 接下来尝试从移动设备上的浏览器访问该页面。 是的,提供的链接有效 【参考方案1】:

我的 Xampp 正在使用 Port: 80,如下图所示。所以在IP地址下面写http://10.0.2.2:80/对我有用。

【讨论】:

【参考方案2】:

此答案假定浏览器屏幕截图显示页面加载成功。我相信,错误页面有点灰。


手头可能存在防火墙问题。由于您使用的是非标准端口,因此与 XAMPP 一起安装的防火墙例外可能不会涵盖该端口。

转到 Windows 防火墙高级设置 -> 入站规则。现在添加一个规则,允许 TCP 端口 800 上的流量。确保取消选中公共配置文件,这样如果您在公共 wifi 上,任何人都无法连接到此应用程序。

现在使用智能手机上的浏览器检查您的 PHP 应用程序是否可以访问。

【讨论】:

感谢我如何使用手机检查我是否可以访问 php 文件。我的意思是我应该将真正的手机连接到我的笔记本电脑,或者我可以通过 wifi 连接到带有手机的笔记本电脑跨度> 只需使用笔记本电脑连接的 Wifi。用浏览器访问php文件【参考方案3】:

如果您有 wifi 并且您的计算机和真实设备(移动设备)连接到同一个 wifi,您可以使用NGROK 软件工具在您的真实设备中运行和调试您的应用程序。

运行 ngrok.exe 并输入 ngrok http 80,它会为您提供如下图所示的地址。

只需在您的应用中使用您使用 IP 地址的网址即可。 最好用。

【讨论】:

我在笔记本电脑上使用 Wifi,我在 Genymotion 上运行我的应用程序 这种情况下也可以使用ngrok

以上是关于无法使用 android studio 连接到“xampp server localhost”的主要内容,如果未能解决你的问题,请参考以下文章

最近的 Android Studio 无法连接到 Firebase?

无法将 Android Studio 连接到我的手机或 Bluestacks

我无法使用带有 Android Studio 的 JDBC 连接到 SQL Server Express

Android studio - 无法连接到LDAP服务器

可以使用颤振在 VS Code 和 Android Studio 中启动但无法连接到模拟器

Wi-fi无法连接到Android Studio模拟器