当前位置: 首页 > 知识库问答 >
问题:

不能从静态内容[重复]引用非静态方法checkWriteStoragePermission()

南宫才艺
2023-03-14

我正在尝试调用一个位于类的片段中的方法。现在我得到一个错误:非静态方法checkWriteStoragePermission()不能从静态内容引用。我真的没主意了。我搜索了两天没有任何结果。

我试图在其中调用方法的类:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

public static String sRecordDate;

public void onMessageReceived(RemoteMessage remoteMessage) {

    Intent intent = new Intent(this,MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
    notificationBuilder.setContentTitle("FCM NOTIFICATION");
    notificationBuilder.setContentText(remoteMessage.getNotification().getBody());
    notificationBuilder.setAutoCancel(true);
    notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
    notificationBuilder.setContentIntent(pendingIntent);
    NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0,notificationBuilder.build());

    for (Map.Entry<String, String> entry : remoteMessage.getData().entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();

        Log.d(":", "key, " + key + " value " + value);

        sRecordDate = value;

        RecordingMode.checkWriteStoragePermission(); //HERE I AM GETIING THE ERROR
    }
}

Fragment类中的方法:

    public void checkWriteStoragePermission() {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if(ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            mIsRecording = true;
            try {
                createVideoFileName();
            } catch (IOException e) {
                e.printStackTrace();
            }
            startRecord();
            mMediaRecorder.start();
            mChronometer.setBase(SystemClock.elapsedRealtime());
            mChronometer.setVisibility(View.VISIBLE);
            mChronometer.start();
        } else {
            if(shouldShowRequestPermissionRationale(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                Toast.makeText(getActivity(), "app needs to be able to save videos", Toast.LENGTH_SHORT).show();
            }
            requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL_STORAGE_PERMISSION_RESULT);
        }
    } else {
        mIsRecording = true;
        try {
            createVideoFileName();
        } catch (IOException e) {
            e.printStackTrace();
        }
        startRecord();
        mMediaRecorder.start();
        mChronometer.setBase(SystemClock.elapsedRealtime());
        mChronometer.setVisibility(View.VISIBLE);
        mChronometer.start();
    }
}

我怎么能轻松搞定这个?因为我无法将其转换为静态方法。

亲切的问候,

共有2个答案

孔硕
2023-03-14

您的方法CheckWriteStoragePermission不是静态,但您尝试直接从服务调用它。尝试像这样编辑方法

public static void checkWriteStoragePermission() {
....
}
马和硕
2023-03-14

但是您正在使用这个方法,就像它是静态方法一样(通过类的名称调用它),创建具有这个方法的类的实例,并在该实例上调用它。你说它是“片段”类,那么:

Fragment fragment = new Fragment();
fragment.checkWriteStoragePermission();
 类似资料:
  • 我试图在jTextArea中显示分析文本的结果,我正在通过Netbeans编写这个程序。下面是我试图修复的代码,以便在jTextArea3中显示结果,但其显示的非静态变量不能从静态内容错误中引用。因为在Netbeans中,jTextArea代码将自动生成,所以我无法更改任何内容。请帮帮我

  • 问题内容: 我无法编译以下代码: 出现以下错误: 无法从静态内容引用非静态方法calcArea(int,int) 这是什么意思?我该如何解决该问题..? 编辑: 根据您的建议,我创建了一个新的test()实例,如下所示: 这样对吗?如果我这样做有什么区别… 问题答案: Nanne提出的建议绝对可以解决您的问题。但是,我认为如果现在就养成习惯,在学习Java的早期阶段,尝试尽可能少地使用静态方法(例

  • 下面的代码出现在我试图创建的包的主类中。它引用了一个名为Journey的helper类中的对象和方法。在用星号标记的行中调用方法时,我得到一个“Non static method conly be referenced from static context”错误。这使我感到困惑,因为我的印象是,在第二行中创建的Journey对象“ThisJourney”构成了类的一个实例,因此意味着上下文不是静

  • 问题出现在< code>openConnection()中。我已经尝试了所有的解决方案,它们都不起作用。有没有人能救救我,把解决方案写的详细一点,让我能看懂?

  • 问题内容: 我想一劳永逸地理解这一点。 为此,请原谅下面粘贴的大量代码,但是我不想遗漏任何细节。 我唯一更改的是加载的URL。但这不会导致错误。 我想将我的函数称为“ readPosiitons ”。简单的解决方案,使其静态。真正的解决方案,我不确定。 请帮助我更好地了解如何以正确的方式解决此错误。 谢谢!! 问题答案: 真正的解决方案?不要在方法中放太多东西。那是给菜鸟的。 Java是一种面向对

  • 所以我尝试绑定我的Numpad键,以便在计算器应用程序中使用它们,但当我尝试从主窗口以字符串形式发送keyEvent时。java到我的MainWindowController公共void方法它给了我一个错误“不能从静态上下文引用非静态方法”,即使我的类都不是静态的?以下是主窗口代码: } 这里是MainWindowController文件(看keyPress方法)