0

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

PlayActivity.class

//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 页关于我的问题的谷歌搜索,但没有一个对我有帮助。另外,请不要提及将方法更改为静态,因为这不可能是因为它会在 CameraPreview.class 检测/取消检测人脸时更改 TextView 标签。提前致谢!

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

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

4

3 回答 3

1

唯一的原因NullPointerException是,

faceLebelNull内部stFLabel()方法。

只要确保您faceLebel使用与当前活动布局 xml 相同的 id。

另外,请确保您已声明setContentView(<R.layout.xml_File_Name>);在oncreate()活动之后super.onCreate().

更新:

我怀疑stFLabel()CameraPreview.class中调用您的方法。因为你不能像这样制作 Activity 的构造函数,PlayActivity pacT = new PlayActivity();

您必须使用 Activity 的上下文来调用此方法。

于 2013-04-05T08:25:56.437 回答
0

在调用 set label 之前检查是否faceLeble像下面这样启动

faceLebel = (TextView)findViewById(R.id.txtViewId);
于 2013-04-05T08:30:55.900 回答
0

在 android 中,你永远不应该自己创建 Activity 对象。

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

所以通常系统会创建 Activity 的对象并调用它的生命周期方法onCreate(), onStart()等。我们使用这些生命周期回调来初始化/取消初始化Activity..

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

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

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

希望能帮助到你..

于 2013-04-05T08:40:41.633 回答