【问题标题】:Non-static field mFirebaseAnalytics can not be referenced from a static context不能从静态上下文引用非静态字段 mFirebaseAnalytics
【发布时间】:2019-12-19 18:29:14
【问题描述】:

我正在使用 Buildbox。我在 Buildbox 中定义了一个自定义的 openURL 方法。我正在尝试用事件跟踪世界。如何在静态方法中访问非静态 mFirebaseAnalytics 实例?

package com.secrethq.utils;

import java.lang.ref.WeakReference;
import java.io.File;
import java.io.FileFilter;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.regex.Pattern;
import java.nio.IntBuffer;

import com.google.firebase.analytics.FirebaseAnalytics;

import android.app.Activity;


public class PTServicesBridge extends Activity
    implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    private FirebaseAnalytics mFirebaseAnalytics;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
    }


    public static void openUrl( String url ){
        Log.v(TAG, "PTServicesBridge  -- Open URL " + url);

        PTServicesBridge.urlString = url;

        Bundle params = new Bundle();
        params.putString("levelname", url);
        mFirebaseAnalytics.logEvent("levels", params); //Problematic line it gives error.



    }


}

问题线:

 mFirebaseAnalytics.logEvent("levels", params); //Problematic line it gives error.

【问题讨论】:

  • 您不能从静态方法访问非静态变量。从 openUrl 方法中删除 static 关键字。
  • 如果我删除了这个方法不管用,我应该访问它。
  • 不工作是什么意思?
  • 这里没有输入代码:Log.v(TAG, "PTServicesBridge -- Open URL" + url);不工作这些线路。只要我把它变成静态的,它就可以工作
  • 你是从其他类访问openUrl方法吗?

标签: java android firebase firebase-analytics buildbox


【解决方案1】:

我只是挖掘了 buildbox 代码,这里是你如何完成你的任务!

使用 PTServicesBridge.s_activity 获取方法内的 FirebaseAnalytics 实例。

public static void openUrl( String url ){
        Log.v(TAG, "PTServicesBridge  -- Open URL " + url);

        PTServicesBridge.urlString = url;

        Bundle params = new Bundle();
        params.putString("levelname", url);

        // Get FirebaseAnalytics Object
        FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(PTServicesBridge.activity);
        mFirebaseAnalytics.logEvent("levels", params); //Problematic line it gives error.
}

【讨论】:

  • @gurkanstack 必须有一些东西可以在 PTServicesBridge 中为您提供一个活动对象。请检查!
  • 我只是参考了这个链接:ezelia.com/2016/buildbox-hook-android-ios
  • 你太棒了!我通过更改为 FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(activity); 解决了这个问题
猜你喜欢
  • 2011-07-06
  • 1970-01-01
  • 2016-08-18
  • 2019-03-17
  • 2011-11-30
相关资源
最近更新 更多