简体   繁体   English

Android 应用程序返回“错误:尝试调用虚拟方法 'java.lang.Object android.content.Context.getSystemService(java.lang.String)”

[英]Android app returns "Error: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)"

I know there are similar questions like mine, but after 30 mins of research, I just can't figure it out.我知道有和我类似的问题,但经过 30 分钟的研究,我就是想不通。

Here is my error:这是我的错误:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.erikb.vinliste, PID: 12950
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.erikb.vinliste/com.example.erikb.vinliste.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
    at android.app.Dialog.<init>(Dialog.java:209)
    at android.app.AlertDialog.<init>(AlertDialog.java:201)
    at android.app.AlertDialog.<init>(AlertDialog.java:197)
    at dmax.dialog.SpotsDialog.<init>(SpotsDialog.java:79)
    at dmax.dialog.SpotsDialog.<init>(SpotsDialog.java:18)
    at dmax.dialog.SpotsDialog$Builder.build(SpotsDialog.java:62)
    at com.example.erikb.vinliste.MainActivity.onCreate(MainActivity.kt:43)
    at android.app.Activity.performCreate(Activity.java:7183)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6944) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 

And here is my Kotlin mainActivity file:这是我的 Kotlin mainActivity 文件:

Imports:进口:

import android.app.AlertDialog
import android.content.Intent
import android.content.pm.ActivityInfo
import android.graphics.Bitmap
import android.net.Uri
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.text.InputFilter
import android.widget.Toast
import com.example.erikb.vinliste.Helper.RectOverlay
import com.google.firebase.ml.vision.FirebaseVision
import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode
import com.google.firebase.ml.vision.common.FirebaseVisionImage
import com.wonderkiln.camerakit.*
import dmax.dialog.SpotsDialog
import kotlinx.android.synthetic.main.activity_main.*
import java.lang.StringBuilder
import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetectorOptions 

And the rest:其余的:

class MainActivity : AppCompatActivity() {

    private lateinit var waiting_dialog:AlertDialog


    override fun onResume() {
        super.onResume()
        camera_view.start()
    }

    override fun onPause() {
        super.onPause()
        camera_view.stop()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        requestedOrientation = (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

        waiting_dialog = SpotsDialog.Builder().setMessage("Please wait").setCancelable(false).build()

        btn_detect.setOnClickListener {
            camera_view.start()
            camera_view.captureImage()
            graphic_overlay.clear()
        }

        camera_view.addCameraKitListener(object:CameraKitEventListener{
            override fun onVideo(p0: CameraKitVideo?) {

            }

            override fun onEvent(p0: CameraKitEvent?) {

            }

            override fun onImage(p0: CameraKitImage?) {
                waiting_dialog.show()

                var bitmap:Bitmap = p0!!.bitmap
                bitmap = Bitmap.createScaledBitmap(bitmap,camera_view.width,camera_view.height,false)
                camera_view.stop()

                runDetector(bitmap)
            }

            override fun onError(p0: CameraKitError?) {

            }

        })
    }

    private fun runDetector(bitmap: Bitmap?) {
        val image = FirebaseVisionImage.fromBitmap(bitmap!!)
        val options = FirebaseVisionBarcodeDetectorOptions.Builder()
            .setBarcodeFormats(
                FirebaseVisionBarcode.FORMAT_QR_CODE,
                FirebaseVisionBarcode.FORMAT_CODABAR
            )
            .build()
        val barcodeDetector = FirebaseVision.getInstance().getVisionBarcodeDetector(options)

        barcodeDetector.detectInImage(image)
            .addOnSuccessListener { result-> processResult(result) }
            .addOnFailureListener{ e-> Toast.makeText(this,e.message,Toast.LENGTH_SHORT).show()}
    }

    private fun processResult(result: List<FirebaseVisionBarcode>) {
        for(item in result) {
            var bounds = item.boundingBox
            var raw_value = item.rawValue
            var value_type = item.valueType

            //Draw rectangle
            val rect = RectOverlay(graphic_overlay,bounds)
            graphic_overlay.add(rect)

            //Show info
            when(value_type)
            {
                FirebaseVisionBarcode.TYPE_TEXT -> {
                    val alertDialog = AlertDialog.Builder(this)
                    alertDialog.setMessage(raw_value)
                    alertDialog.setPositiveButton("OK",{dialog, which -> dialog.dismiss()})
                    val dialog = alertDialog.create()
                    dialog.show()
                }
                FirebaseVisionBarcode.TYPE_URL -> {
                    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(raw_value))
                    startActivity(intent)
                }

                FirebaseVisionBarcode.TYPE_CONTACT_INFO -> {

                    val name = item.contactInfo!!.name!!.formattedName
                    val address = item.contactInfo!!.addresses[0].addressLines[0]
                    val email = item.contactInfo!!.emails[0].address

                    val info = StringBuilder("Name: ").append(name).append("\n")
                        .append("Address: ").append(address).append("\n")
                        .append("Emal: ").append(email).toString()

                    val alertDialog = AlertDialog.Builder(this)
                    alertDialog.setMessage(info)
                    alertDialog.setPositiveButton("OK",{dialog, which -> dialog.dismiss()})
                    val dialog = alertDialog.create()
                    dialog.show()
                }
            }
        }

        waiting_dialog.dismiss()
    }
}

Spotsdialog点对点

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * gradle plugin from the resource data it found. It
 * should not be modified by hand.
 */
package dmax.dialog;

public final class R {
    private R() {}

    public static final class attr {
        private attr() {}

        public static final int DialogSpotColor = 0x7f020000;
        public static final int DialogSpotCount = 0x7f020001;
        public static final int DialogTitleAppearance = 0x7f020002;
        public static final int DialogTitleText = 0x7f020003;
    }
    public static final class color {
        private color() {}

        public static final int spots_dialog_color = 0x7f04005b;
    }
    public static final class dimen {
        private dimen() {}

        public static final int progress_margin = 0x7f05006a;
        public static final int progress_width = 0x7f05006b;
        public static final int spot_size = 0x7f05006c;
        public static final int title_margin = 0x7f05006d;
        public static final int title_padding = 0x7f05006e;
    }
    public static final class drawable {
        private drawable() {}

        public static final int dmax_spots_spot = 0x7f060068;
    }
    public static final class id {
        private id() {}

        public static final int dmax_spots_progress = 0x7f07003f;
        public static final int dmax_spots_title = 0x7f070040;
    }
    public static final class layout {
        private layout() {}

        public static final int dmax_spots_dialog = 0x7f09001d;
    }
    public static final class style {
        private style() {}

        public static final int SpotsDialogDefault = 0x7f0c00bc;
    }
    public static final class styleable {
        private styleable() {}

        public static final int[] Dialog = { 0x7f020000, 0x7f020001, 0x7f020002, 0x7f020003 };
        public static final int Dialog_DialogSpotColor = 0;
        public static final int Dialog_DialogSpotCount = 1;
        public static final int Dialog_DialogTitleAppearance = 2;
        public static final int Dialog_DialogTitleText = 3;
    }
}

I had to pull up the library for you Dialog builder.我不得不为你的 Dialog builder 拉出库。 It looks like you're not setting the context when you build the SpotsDialog .看起来您在构建SpotsDialog时没有设置上下文。 Make sure in your SpotsDialog.Builder you add a context.确保在SpotsDialog.Builder添加上下文。 Make sure you aren't missing anything else too, example from the library documentation:确保您没有遗漏任何其他内容,例如库文档中的示例:

val dialog: AlertDialog = SpotsDialog.Builder()
    .setContext(this)
    .setMessage(R.string.custom_title)
    .setCancelable(false)
    .build()

Check the library reference here for more: https://github.com/d-max/spots-dialog在此处查看库参考以了解更多信息: https : //github.com/d-max/spots-dialog

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 尝试在空对象引用上调用虚拟方法“java.lang.Object android.content.Context.getSystemService(java.lang.String)” - Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference 尝试调用虚拟方法 &#39;java.lang.Object android.content.Context.getSystemService(java.lang.String) - Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String) 错误:尝试在空对象引用上调用虚方法&#39;java.lang.Object android.content.Context.getSystemService(java.lang.String)&#39; - error:Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference Flutter:PlatformException(错误,尝试调用虚拟方法'java.lang.Object android.app.Activity.getSystemService(java.lang.String) - Flutter:PlatformException(error, Attempt to invoke virtual method 'java.lang.Object android.app.Activity.getSystemService(java.lang.String)' android.content.Context.getSystemService(java.lang.String)&#39;对空对象的引用 - android.content.Context.getSystemService(java.lang.String)' on a null object reference ViewPagerAdapter尝试在空对象引用上调用虚拟方法Context.getSystemService(java.lang.String)&#39; - ViewPagerAdapter Attempt to invoke virtual method Context.getSystemService(java.lang.String)' on a null object reference 尝试在 null object 引用错误上调用虚拟方法 'java.lang.String android.content.Context.getPackageName()' - Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference error 尝试调用虚拟方法 &#39;java.lang.Object android.content.Context - Attempt to invoke virtual method 'java.lang.Object android.content.Context 由于尝试调用虚拟方法&#39;java.lang.String android.content.Context.getPackageName(),因此意图失败 - Intent fails because of Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName() 尝试调用虚拟方法&#39;java.lang.String android.content.Context.getPackageName() - Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM