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

huangapple go评论102阅读模式
英文:

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

问题

  1. guys我创建了这个新类但是当我在MainActivity中调用这个vibrate函数时出现了错误
  2. public class vibrate extends Activity {
  3. public void vibrate() {
  4. try {
  5. Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
  6. // 震动500毫秒
  7. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  8. v.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
  9. } else {
  10. // 在API 26中已弃用
  11. v.vibrate(200);
  12. }
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. }
  16. }
  17. }

这是我调用这个类的方式

  1. vibrate v = new vibrate();
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. v.vibrate();
  6. }

这是错误信息

  1. W/System.err: java.lang.NullPointerException: 尝试调用空对象引用上的 'java.lang.Object android.content.Context.getSystemService(java.lang.String)'
英文:

guys i make this new class but when i call this function vibrate in Main Activity i have error

  1. public class vibrate extends Activity{
  2. public void vibrate() {
  3. try {
  4. Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
  5. // Vibrate for 500 milliseconds
  6. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  7. v.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
  8. } else {
  9. //deprecated in API 26
  10. v.vibrate(200);
  11. }
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. }
  15. }

and this how i called this class

  1. vibrate v = new vibrate() ;
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. v.vibrate();
  6. }

this is the error

  1. 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

答案1

得分: 1

Class vibrate 是 Activity 的子类,当你像这样创建一个实例时,你正在创建一个 activity。但这不是正确的创建 activity 的方式。

  1. vibrate v = new vibrate()

你必须在 AndroidManifest.xml 文件中声明你的 activity,并通过使用 intent 来调用该 activity。

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

但是要使用 Vibrator,你只需要这样做。

  1. public class VibrateActivity extends Activity {
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. vibrate();
  6. }
  7. private void vibrate() {
  8. Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
  9. if (vibrator != null) {
  10. // 震动 500 毫秒
  11. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  12. vibrator.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
  13. } else {
  14. // 在 API 26 中已弃用
  15. vibrator.vibrate(200);
  16. }
  17. }
  18. }
  19. }

不要忘记在 AndroidManifest.xml 文件中包含权限:

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

更新:
在不在 activity 中执行的情况下使用单独的类。

  1. public class Vibrate extends Activity {
  2. public void vibrate(Context context) {
  3. Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
  4. if (vibrator != null) {
  5. // 震动 500 毫秒
  6. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  7. vibrator.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
  8. } else {
  9. // 在 API 26 中已弃用
  10. vibrator.vibrate(200);
  11. }
  12. }
  13. }
  14. }

然后在你的 activity 中像这样使用它。

  1. Vibrate vibrate = new Vibrate();
  2. vibrate.vibrate(this);
英文:

Class vibrate is a subclass of Activity, when you create an instance like this, you are creating an activity. But it's not a right way to create an activity.

  1. vibrate v = new vibrate()

You have to declare your activity inside AndroidManifest.xml file, and invoke the activity by using intent.

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

But to use the Vibrator, you just need to do like this.

  1. public class VibrateActivity extends Activity {
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. vibrate();
  6. }
  7. private void vibrate() {
  8. Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
  9. if (vibrator != null) {
  10. // Vibrate for 500 milliseconds
  11. if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.O) {
  12. v.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
  13. } else {
  14. //deprecated in API 26
  15. v.vibrate(200);
  16. }
  17. }
  18. }

Don't forget to include permission in AndroidManifest.xml file:

  1. &lt;uses-permission android:name=&quot;android.permission.VIBRATE&quot;/&gt;

UPDATE:
Use separate class without doing in the activity.

  1. public class Vibrate extends Activity {
  2. public void vibrate(Context context) {
  3. Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
  4. if (vibrator != null) {
  5. // Vibrate for 500 milliseconds
  6. if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.O) {
  7. v.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE));
  8. } else {
  9. //deprecated in API 26
  10. v.vibrate(200);
  11. }
  12. }
  13. }

And use it like this in your activity.

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

答案2

得分: 0

在onCreate()中初始化vibrate v = new vibrate();并调用v.vibrate();不需要将vibrate作为一个Activity。

英文:

Initialize vibrate v = new vibrate(); in onCreate()
and call v.vibrate();
No need to make vibrate as an Activity.

huangapple
  • 本文由 发表于 2020年8月23日 15:56:20
  • 转载请务必保留本文链接:https://go.coder-hub.com/63544665.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定