尝试调用虚拟方法 'java.lang.Object android.content.Context



伙计们,我创建了这个新类,但当我在主活动中调用这个函数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 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)

初始化vibrate v=new vibrate((;在onCreate((中并调用v.vibrate((;无需将振动作为活动。

相关内容

  • 没有找到相关文章

最新更新