'尝试调用虚方法\ android ;.content.Context android.app.Application.getApplicationContext()\'在null对象引用'

时间:2018-02-15 22:37:10

标签: react-native appsflyer-android-sdk

我在反应原生应用中使用https://github.com/AppsFlyerSDK/react-native-appsflyer

  • 我成功设置了iOS部分并成功运行了集成测试
  • 但我正在努力应对Android集成。

第一个问题:

  • 当我在我的设备上构建应用程序时,我收到此错误:

'Attempt to invoke virtual method \'android.content.Context android.app.Application.getApplicationContext()\' on a null object reference'

appsFlyer.initSdk

第二个问题:

  • 当我运行Android SDK集成测试时:

我得到了这个结果(见截图)

enter image description here

这是我的代码:

```

...
...

// appsFlyer options
const options = {
  devKey: 'Bl9i45ho07lp43',
  isDebug: true,
};

if (Platform.OS === 'ios') {
  options.appId = '1165972436';
}

this.onInstallConversionDataCanceller = appsFlyer.onInstallConversionData(
 (data) => {
   console.log(data);
 }
);

appsFlyer.initSdk(options,
  (result) => {
    console.log(result);
 },
  (error) => {
    console.error('error inside appsFlyer.initSdk ==>', error);
 }
);

.....
.....

class App extends React.PureComponent {


  state = {
    appState: AppState.currentState,
  }

  componentDidMount() {
    AppState.addEventListener('change', this._handleAppStateChange);
  }

  componentWillUnmount() {
    if (this.onInstallConversionDataCanceller) {
      this.onInstallConversionDataCanceller();
    }
    AppState.removeEventListener('change', this._handleAppStateChange);
  }

  _handleAppStateChange = (nextAppState) => {
    if (this.state.appState.match(/inactive|background/) && nextAppState === 'active') {
      if (Platform.OS === 'ios') {
        appsFlyer.trackAppLaunch();
      }
   }

  if (this.state.appState.match(/active|foreground/) && nextAppState === 'background') {
    if (this.onInstallConversionDataCanceller) {
      this.onInstallConversionDataCanceller();
    }
  }

  this.setState({ appState: nextAppState });
 }
}

```

1 个答案:

答案 0 :(得分:1)

我找到了解决方案:

  • 最初,我是通过添加来关注文档的 new RNAppsFlyerPackage(MainApplication.this)中的getPackages()方法内MainApplication.java,但我一直有错误说我无法使用RNAppsFlyerPackage()的参数

  • 我不得不删除参数,以便我可以构建项目,但这并没有进行Android集成测试

1 - 解决方案是清理项目

2 - 使用以下命令删除node_modules:

rm -rf /node_modules

3-之后,我被提示在方法

中使用参数

new RNAppsFlyerPackage(MainApplication.this)

现在Android集成测试正在传递