Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用公共方法会导致NullPointerException-Android_Java_Android - Fatal编程技术网

Java 调用公共方法会导致NullPointerException-Android

Java 调用公共方法会导致NullPointerException-Android,java,android,Java,Android,啊,大家好,我只是想问一下我正在创建的程序有什么问题。下面是代码片段 游戏活动。课堂 //more codes here public void stFLabel(int numFace, Context ct) { try { if(numFace > 0) faceLebel.setText("Face Hint : I See You Human"); else faceLebel.setTe

啊,大家好,我只是想问一下我正在创建的程序有什么问题。下面是代码片段

游戏活动。课堂

//more codes here
 public void stFLabel(int numFace, Context ct) {

    try {
        if(numFace > 0)
            faceLebel.setText("Face Hint : I See You Human");
        else
            faceLebel.setText("Face Hint : Where Are You?");
    }
    catch(NullPointerException e)
    {
        e.printStackTrace();
            Log.d(TAG, "stFLabel Has Error");
        }
    }
//more codes here
*CameraPreview.class*

//More codes
...
PlayActivity pacT = new PlayActivity();
...
//More Codes
..
public void pausy(int numFace) {
pacT.stFLabel(numFace, mContext);
}
LOGCAT

04-05 16:11:26.150: D/FaceDetection(27929): face detected: 1 Face 1 Location X: 65Y: -1
04-05 16:11:26.150: W/System.err(27929): java.lang.NullPointerException
04-05 16:11:26.150: W/System.err(27929):    at com.delihente.faceplay.PlayActivity.stFLabel(PlayActivity.java:90)
04-05 16:11:26.150: W/System.err(27929):    at com.delihente.faceplay.CameraPreview.pausy(CameraPreview.java:62)
04-05 16:11:26.150: W/System.err(27929):    at com.delihente.faceplay.CameraPreview$1.onFaceDetection(CameraPreview.java:53)
04-05 16:11:26.150: W/System.err(27929):    at android.hardware.Camera$EventHandler.handleMessage(Camera.java)
04-05 16:11:26.150: W/System.err(27929):    at android.os.Handler.dispatchMessage(Handler.java)
04-05 16:11:26.150: W/System.err(27929):    at android.os.Looper.loop(Looper.java)
04-05 16:11:26.150: W/System.err(27929):    at android.app.ActivityThread.main(ActivityThread.java)
04-05 16:11:26.150: W/System.err(27929):    at java.lang.reflect.Method.invokeNative(Native Method)
04-05 16:11:26.150: W/System.err(27929):    at java.lang.reflect.Method.invoke(Method.java:511)
04-05 16:11:26.150: W/System.err(27929):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
04-05 16:11:26.150: W/System.err(27929):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
04-05 16:11:26.150: W/System.err(27929):    at dalvik.system.NativeStart.main(Native Method)
04-05 16:11:26.150: D/(27929): stFLabel Has Error
更多信息:

PlayAcvitiy.class extends Activity (Main Class)
CameraPreview.class - The camera preview class provided by google android development
faceLebel = TextView on PlayAcvitiy.class
mContext = PlayActivity.class Context
我想知道是什么导致了NullPointerException(修复会更好), 关于我的问题,我已经读了近3页的谷歌搜索,但没有一页对我有帮助。 另外,请不要提及将方法更改为static,因为它不能更改,因为当CameraPreview.class检测/取消检测面时,它会更改TextView标签。。 提前谢谢

编辑:我在这里也读了很多相关的问题,但似乎都没有帮助


编辑2:问题已解决,感谢所有人,特别是PrafulBhatnagar,我了解到在主要活动中使用方法需要引用其上下文。谢谢大家

NullPointerException的唯一原因是

faceLebel
Null内部
stFLabel()
方法

只需确保您的
faceLebel
使用与当前活动布局xml相同的id即可

另外,请确保已声明
setContentView()
;在
super.oncreate()之后的活动的
oncreate()

更新:

PlayAcvitiy.class extends Activity (Main Class)
CameraPreview.class - The camera preview class provided by google android development
faceLebel = TextView on PlayAcvitiy.class
mContext = PlayActivity.class Context
我怀疑在CameraPreview.class中调用您的方法
stFLabel()
,。因为你不能让活动的构造函数像,
PlayActivity pacT=newplayactivity()


您必须使用活动的上下文来调用此方法

在调用set lable之前,检查
faceLeble
是否如下所示启动

faceLebel = (TextView)findViewById(R.id.txtViewId);

在android中,您永远不应该自己创建活动对象

当您从应用程序托盘启动应用程序时,系统将为您的启动器
活动创建对象并启动它。。如果我们想从一个屏幕转到另一个屏幕,我们使用
startActivity()
,这里系统再次创建
活动的对象

因此,一般来说,系统创建活动对象并调用其生命周期方法,如
onCreate()、onStart()
等。。我们使用这些生命周期回调来初始化/取消初始化
活动的状态

代码中的问题是您试图自己创建
Activity
对象;现在有两个实例,一个是由系统创建的,其中所有状态都已初始化;另一个是由代码创建的,其中类上的状态尚未初始化,因为没有调用lifecycle方法,因此出现了
NullPointerException

您可以使用以下代码修复此错误:

((PlayActivity)mContext).stFLabel(numFace,mContext)。。。假设
mContext
存储对
PlayActivity


希望它有帮助。

试试
((PlayActivity)mContext).stFLabel(numFace,mContext)。。。假设
mContext
存储了对
PlayActivity
的引用,则您正试图从一个空对象调用/获取某些内容。调用setText()时,可能是“faceLebel”为null。是否正确声明了“Facelbel”?似乎它是唯一可以抛出的东西。要么是“Facelab”为空,要么是新对象和函数调用之间的某个地方的契约为空。@PrafulBhatnagar,修复得很好!谢谢你的快速回复,不管怎样,我能知道那是什么样的方法吗?(Android编程新手,但有测试各种实验的习惯)哦,我明白了,这就是原因,:)。我想我真的需要更多地自学android编程。你说的“使用活动的上下文来调用这个方法”,我真的不知道怎么做,但我想这是@PrafulBhatnagar的答案(如果我没有弄错的话)