【问题标题】:TypeError: Network request failed on Android of React Native app in the debug mode on HUAWEI Y6TypeError: Network request failed on Android of React Native app in the debug mode on HUAWEI Y6
【发布时间】:2020-08-08 09:23:39
【问题描述】:

当我在真实设备 Huawei Y6 上通过 USB 和 Android Studio 在 React Native 应用程序中启动我的应用程序时,获取请求不起作用。我得到 TypeError: Network request failed. 同时,如果我在 android 模拟器上启动我的应用程序,则获取工作。如果我生成一个 APK 文件并在我的华为上安装它之后,获取也可以正常工作。我认为问题可能出在本地主机上。如果有人遇到同样的错误,请告诉我!

ServiceApi 类:

class TeamApiService {
  createTeam = async () => {
    const response = await fetch(AppConstants.CREATE_TEAM, {
      method: 'POST',
      headers: {},
    });
    const { status } = response;

    if (status === STATUS_CODES.SUCCESSFUL) {
      const result = await response.json();

      return result;
    }

    return this.apiErrorHandler(status, 'createTeam');
  };
}

export default new TeamApiService();

【问题讨论】:

    标签: android react-native android-studio debugging react-native-android


    【解决方案1】:

    在main/java文件夹下新建一个类FetchApiClientFactory

    package com.xxxxxxx;
    
    import com.facebook.react.modules.network.OkHttpClientFactory;
    import com.facebook.react.modules.network.OkHttpClientFactory;
    import com.facebook.react.modules.network.OkHttpClientProvider;
    import com.facebook.react.modules.network.ReactCookieJarContainer;
    
    import java.security.cert.CertificateException;
    import java.util.ArrayList;
    
    import java.util.List;
    import android.util.Log;
    
    import java.util.concurrent.TimeUnit;
    
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSession;
    import javax.net.ssl.SSLSocketFactory;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    
    import okhttp3.CipherSuite;
    import okhttp3.ConnectionSpec;
    import okhttp3.OkHttpClient;
    import okhttp3.TlsVersion;
    
    import static android.content.ContentValues.TAG;
    
    
    public class FetchApiClientFactory implements OkHttpClientFactory {
        private static final String TAG = "OkHttpClientFactory";
    
        @Override
        public OkHttpClient createNewNetworkModuleClient() {
            try {
    // Create a trust manager that does not validate certificate chains
                final TrustManager[] trustAllCerts = new TrustManager[]{
                        new X509TrustManager() {
    
                            @Override
                            public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                            }
    
                            @Override
                            public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                            }
    
                            @Override
                            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                                return new java.security.cert.X509Certificate[]{};
                            }
                        }
                };
    
                // Install the all-trusting trust manager
                final SSLContext sslContext = SSLContext.getInstance("SSL");
                sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
                // Create an ssl socket factory with our all-trusting manager
                final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
    
    
                OkHttpClient.Builder builder = new OkHttpClient.Builder()
                        .connectTimeout(0, TimeUnit.MILLISECONDS).readTimeout(0, TimeUnit.MILLISECONDS)
                        .writeTimeout(0, TimeUnit.MILLISECONDS).cookieJar(new ReactCookieJarContainer());
                builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
                builder.hostnameVerifier(new HostnameVerifier() {
                    @Override
                    public boolean verify(String hostname, SSLSession session) {
                        return true;
                    }
                });
    
                OkHttpClient okHttpClient = builder.build();
                return okHttpClient;
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
                throw new RuntimeException(e);
            }
        }
    }
    

    并在 MainApplication.java 中添加这一行

     @Override
      public void onCreate() {
        super.onCreate();
        
        OkHttpClientProvider.setOkHttpClientFactory(new FetchApiClientFactory()); // this line
      }
    

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 2019-04-02
      • 2020-08-02
      • 1970-01-01
      • 2022-12-02
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多