在 Android Emulator 上运行应用程序时,如何在 Ionic React 应用程序中使用社区 HTTP 插件?

我正在开发一个运行在 Capacitor 之上的 Ionic React App。它适用于浏览器中的 axios 请求,但在 Android 上我有CORS问题,这就是我使用的原因community HTTP pluginhttps : //github.com/capacitor-community/http

示例:我单击我的登录按钮。我的电子邮件和密码等数据应该通过 HTTP post 发送,但它捕获了我放在那里的错误: Try again' 。

你知道它为什么会发生吗?

也没有关于 Android Studio 请求的错误日志。只有这些:

    /system_process E/ClipboardService: Denying clipboard access to com.google.android.googlequicksearchbox, application is not in focus nor is it a system service for user 0
    E/netmgr: qemu_pipe_open_ns:62: Could not connect to the ‘pipe:qemud:network’ service: Invalid argument
    E/netmgr: Failed to open QEMU pipe ‘qemud:network’: Invalid argument
    E/wifi_forwarder: qemu_pipe_open_ns:62: Could not connect to the ‘pipe:qemud:wififorward’ service: Invalid argument
    E/wifi_forwarder: RemoteConnection failed to initialize: RemoteConnection failed to open pipe

为了解决这些错误,我在application元素中添加了这个设置

    android:usesCleartextTraffic=“true”

但错误仍然发生。

Android 模拟器已连接到 Internet。

<!-- Permissions -->
    <uses-permission android:name="android.permission.INTERNET" />
 <!-- Network API -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

登录.tsx:

import React from "react";
import { useHistory } from "react-router-dom";
import { useState, useContext } from "react";
import MyContext from "../my-context";
import {
  IonPage,
  IonHeader,
  IonContent,
  IonButton,
  IonInput,
  IonLabel,
  IonItem,
  IonGrid,
  IonCol,
  IonAlert,
} from "@ionic/react";
import { Http, HttpResponse } from "@capacitor-community/http";

const Login = () => {
  const history = useHistory();
  const {
    email,
    setEmail,
    password, 
    setPassword
  } = useContext(MyContext);

     const doLogin = async (e: any) => {
    e.preventDefault();

    const loginData = {
      email: email,
      password: password,
    };

    //https://github.com/capacitor-community/http
    const options = {
      url: "https://xx/login,
      data: loginData,
    };
    const response: HttpResponse = await Http.post(options)

      .then((response) => {

        if (response.data.token) {
          history.push("/home");
          window.location.reload();
        }
        return response.data;
      })
      .catch((error) => {
        setMessage(
          "Try again!"
        );
      setIserror(true);
      });
    };

return (
    <IonPage>
      <IonContent className="ion-padding ion-text-center">
        <IonGrid>
          <IonRow>
            <IonCol>
              <IonAlert
                isOpen={iserror}
                onDidDismiss={() => setIserror(false)}
                header={"Info!"}
                message={message}
                buttons={["Ok"]}
              />
            </IonCol>
          </IonRow>
         
                <h1>Login</h1>
              </IonCardTitle>
          
              <IonItem>
                <IonLabel position="floating">Email</IonLabel>
                <IonInput
                  name="email"
                  type="email"
                  value={email}
                  onIonChange={(e) => setEmail(e.detail.value!)}
                />
              </IonItem>

              <IonItem>
                <IonLabel position="floating">Password</IonLabel>
                <IonInput
                  name="password"
                  type="password"
                  value={password}
                  onIonChange={(e) => setPassword(e.detail.value!)}
                />
              </IonItem>
             
              <IonButton onClick={doLogin}>Login</IonButton>
             
        </IonGrid>
      </IonContent>
    </IonPage>
  );
};

export default Login;

自 3 天以来我一直在解决这个问题,所以任何帮助都会非常非常感激。谢谢!

对于任何感兴趣的人,我找到了解决方案。在此文档https://github.com/capacitor-community/http 中缺少Android 配置

1- 因此,导入并add http plugin输入android\app\src\main\java\\MainActivity.java

package com.myapp.com;

import android.os.Bundle;

import com.getcapacitor.BridgeActivity;
import com.getcapacitor.Plugin;

import java.util.ArrayList;
import com.getcapacitor.plugin.http.Http; //added

public class MainActivity extends BridgeActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Initializes the Bridge
    this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
      // Additional plugins you've installed go here
      // Ex: add(TotallyAwesomePlugin.class);
      add(Http.class); //added
    }});
  }
}

2- 在 Android Studio 中同步 gradle 文件:

File --> Sync Project with Gradle Files

我根据自己的需要编写了请求,现在它运行良好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Android Studio中终止应用程序-在单独的设备上运行的应用程序

如何从Cordova插件类迫使Android应用程序崩溃?

使用Typescript在Ionic 1应用程序中的Cordova插件

如何在React Native Android应用程序中使用JavaScriptCore

Ionic 2-如何在Android上使用后退按钮退出应用程序?

Ionic 3-在Android设备中运行应用程序时找不到文件

运行React应用程序时出错

React Native:运行Android应用程序时出错

在Ionic 4应用程序中使用@ ionic-native / http

在React Native中在android真实设备上运行应用程序时console.log输出在哪里

扫描到打开应用程序时如何在Android上使用NFC标签

如何在Android设备上使用Node js后端运行React Native应用程序?

如何在PC上运行iOS或Android应用程序?

如何在Windows上运行Android应用程序?

如何在应用程序中使用cordova插件

使用Ionic或Android进行应用程序开发

如何在ionic应用程序中添加高级版本插件

如何在Android设备上运行特定的应用程序

无法在 android 上运行 React-native 应用程序

使用 sdk 15 (4.0.4) 在 android 设备上运行 ionic 应用程序

使用带有 jquery 插件的 React 应用程序时出现类型错误

在 android 上构建 ionic 3.20.0 应用程序时不显示缩略图

如何在 IOS 设备上运行我的 Ionic 应用程序(使用 Meteor 后端)?

使用 Ionic 发布应用程序部署 iOS 和 android

在 ionic 3 应用程序中使用 httpClient 模块的 Http 请求失败

在 Linux 中运行 React Native 应用程序时出现 android studio 错误

用于在 Android 9 后台运行应用程序的 Cordova 插件

如何在 React 中使用带有 Ionic 5 应用程序的cordova sqlite 插件?

react-native-firebase (v6):使用辅助应用程序时,应用程序在 ios 上崩溃,在 Android 上运行良好