簡體   English   中英

嘗試調用虛擬方法 'java.lang.Object android.content.Context

[英]Attempt to invoke virtual method 'java.lang.Object android.content.Context

伙計們,我創建了這個新類,但是當我在 Main Activity 中調用此函數 vibrate 時出現錯誤

public class vibrate  extends Activity{

public void vibrate() {
        try {
            Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            // Vibrate for 500 milliseconds
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                v.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
            } else {
                //deprecated in API 26
                v.vibrate(200);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
}

這就是我對這門課的稱呼

 vibrate v = new vibrate() ;
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        v.vibrate();
       
    }

這是錯誤

W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference

vibrate是 Activity 的子類,當您創建這樣的實例時,您正在創建一個活動。 但這不是創建活動的正確方法。

vibrate v = new vibrate()

您必須在AndroidManifest.xml文件中聲明您的活動,並使用意圖調用該活動。

Intent intent = new Intent(this, vibrate.class);
startActivity(intent);

但是要使用振動器,你只需要這樣做。

public class VibrateActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vibrate();
    }

    private void vibrate() {
        Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        if (vibrator != null) {
            // Vibrate for 500 milliseconds
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                v.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
            } else {
                //deprecated in API 26
                v.vibrate(200);
            }
        }
}

不要忘記在 AndroidManifest.xml 文件中包含權限:

<uses-permission android:name="android.permission.VIBRATE"/>

更新:
使用單獨的類而不在活動中做。

public class Vibrate extends Activity {

    public void vibrate(Context context) {
        Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        if (vibrator != null) {
            // Vibrate for 500 milliseconds
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                v.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
            } else {
                //deprecated in API 26
                v.vibrate(200);
            }
        }
}

並在您的活動中像這樣使用它。

Vibrate vibrate = new Vibrate();
vibrate.vibrate(this)

初始化振動 v = new vibrate(); 在 onCreate() 中調用 v.vibrate(); 無需將振動作為活動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM