Android改型仅在使用emulator时连接

Android改型仅在使用emulator时连接,android,retrofit,Android,Retrofit,我的计算机中有一个本地服务器,我想使用改造发出请求,如果我使用android emulator没有问题,我发出请求没有问题,但是当我尝试在我的android设备中使用它时(并将ip更改为键入ipconfig时显示的ip) 舱单: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="escol

我的计算机中有一个本地服务器,我想使用改造发出请求,如果我使用android emulator没有问题,我发出请求没有问题,但是当我尝试在我的android设备中使用它时(并将ip更改为键入ipconfig时显示的ip)

舱单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="escoladeltreball.org.decaught">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".TutorialActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>
将客户端改为:

public class RetrofitClient {

    private static Retrofit retrofit = null;

    public static Retrofit getClient(String baseUrl) {

        OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();



        if (retrofit==null) {


            retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .client(clientBuilder.build())
            .addConverterFactory(GsonConverterFactory.create())
            .build();
        }
        return retrofit;
    }
}
最后,按如下方式调用函数

private void signIn() {
    boolean isValid = validate();
    if (isValid) {

        mService.get_tokken(user.getText().toString(), password.getText().toString()).enqueue(new Callback<Tokken>() {
            @Override
            public void onResponse(Call<Tokken> call, Response<Tokken> response) {
                if (response.isSuccessful()) {

                    System.out.println("Te lo imprimo");
                    System.out.println(response.body().toString());
                    Toast.makeText(LoginActivity.this, "tokken recibido", Toast.LENGTH_SHORT).show();
                } else {
                    int statusCode = response.code();
                    // handle request errors depending on status code
                }
            }

            @Override
            public void onFailure(Call<Tokken> call, Throwable t) {
                Toast.makeText(LoginActivity.this, "Error al recibir tokken", Toast.LENGTH_SHORT).show();

                t.printStackTrace();
                Log.d("MainActivity", "error loading from API");

            }
        });

    }
}

问题不在于安卓或改造,而在于服务器,服务器不允许外部连接


@伍吉努吉是对的

这里没有太多问题,但我的假设是,您计算机上的本地服务器仅对您的计算机可用,并且不会暴露在任何地方……甚至对本地网络也是如此。我会尝试搜索您正在使用的任何服务器工具的配置,并找出如何根据您想要完成的任务对其进行配置,或者开始在web环境中运行服务器。这绝对不是改装/Android问题。您的设备和服务器必须在同一网络中谢谢,问题出在服务器上!
public class RetrofitClient {

    private static Retrofit retrofit = null;

    public static Retrofit getClient(String baseUrl) {

        OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();



        if (retrofit==null) {


            retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .client(clientBuilder.build())
            .addConverterFactory(GsonConverterFactory.create())
            .build();
        }
        return retrofit;
    }
}
private void signIn() {
    boolean isValid = validate();
    if (isValid) {

        mService.get_tokken(user.getText().toString(), password.getText().toString()).enqueue(new Callback<Tokken>() {
            @Override
            public void onResponse(Call<Tokken> call, Response<Tokken> response) {
                if (response.isSuccessful()) {

                    System.out.println("Te lo imprimo");
                    System.out.println(response.body().toString());
                    Toast.makeText(LoginActivity.this, "tokken recibido", Toast.LENGTH_SHORT).show();
                } else {
                    int statusCode = response.code();
                    // handle request errors depending on status code
                }
            }

            @Override
            public void onFailure(Call<Tokken> call, Throwable t) {
                Toast.makeText(LoginActivity.this, "Error al recibir tokken", Toast.LENGTH_SHORT).show();

                t.printStackTrace();
                Log.d("MainActivity", "error loading from API");

            }
        });

    }
}
W/System.err: java.net.SocketTimeoutException: failed to connect to /192.168.43.104 (port 8000) from /192.168.43.208 (port 40695) after 10000ms
W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:185)
                  at libcore.io.IoBridge.connect(IoBridge.java:130)
                  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:129)
                  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:356)
                  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
                  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
W/System.err:     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
                  at java.net.Socket.connect(Socket.java:616)
                  at okhttp3.internal.platform.AndroidPlatform.connectSocket(AndroidPlatform.java:71)
                  at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:240)
                  at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:160)
                  at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:257)
W/System.err:     at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135)
                  at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114)
                  at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
                  at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
                  at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
                  at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
                  at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
W/System.err:     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
                  at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
                  at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
                  at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126)
                  at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
                  at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
                  at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
W/System.err:     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:147)
                  at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
                  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
                  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
                  at java.lang.Thread.run(Thread.java:764)
D/MainActivity: error loading from API