마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

에러에 대한 질문입니다.

0 추천

dlib 안드로이드예제에 좌표를 텍스트뷰에 출력하려고 합니다.

다음과 같이 로그창에 에러 가 출력이 되는데 무슨 문제 인지 모르겠습니다.

java.lang.ClassCastException: com.tzutalin.dlibtest.DlibDemoApp cannot be cast to android.app.Activity
        at com.tzutalin.dlibtest.OnGetImageListener.onImageAvailable(OnGetImageListener.java:240)
        at android.media.ImageReader$ListenerHandler.handleMessage(ImageReader.java:812)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.os.HandlerThread.run(HandlerThread.java:65)

 

 
print_textview = (TextView)((Activity)mContext).findViewById(R.id.pr_textview);


        mInferenceHandler.post(
                new Runnable() {
                    @Override
                    public void run() {

                        if (!new File(Constants.getFaceShapeModelPath()).exists()) {
                            mTransparentTitleView.setText("Copying landmark model to " + Constants.getFaceShapeModelPath());
                            FileUtils.copyFileFromRawToOthers(mContext, R.raw.shape_predictor_68_face_landmarks, Constants.getFaceShapeModelPath());
                        }

                        if(mframeNum % 3 == 0){
                            long startTime = System.currentTimeMillis();
                            synchronized (OnGetImageListener.this) {
                                results = mFaceDet.detect(mResizedBitmap);
                            }
                         long endTime = System.currentTimeMillis();
                            mTransparentTitleView.setText("Time cost: " + String.valueOf((endTime - startTime) / 1000f) + " sec");
                        }

                        // Draw on bitmap
                        if (results.size() != 0) {
                            for (final VisionDetRet ret : results) {
                                float resizeRatio = 4.5f;
                                Canvas canvas = new Canvas(mInversedBipmap);

                                // Draw landmark
                                ArrayList<Point> landmarks = ret.getFaceLandmarks();
                                for (Point point : landmarks) {
                                    int pointX = (int) (point.x * resizeRatio);
                                    int pointY = (int) (point.y * resizeRatio);
                                    canvas.drawCircle(pointX, pointY, 4, mFaceLandmardkPaint);
                                    String str;
                                    str = "("+(int)pointX +" "+(int)pointY+")";
                                    print_textview.setText(str);
                                }
                            }
                        }

                        mframeNum++;
                        mWindow.setRGBBitmap(mInversedBipmap);
                        mIsComputing = false;
                    }

                });

        Trace.endSection();
    }

}
익명사용자 님이 2018년 8월 24일 질문

1개의 답변

0 추천
java.lang.ClassCastException: com.tzutalin.dlibtest.DlibDemoApp cannot be cast to android.app.Activity

캐스팅 잘못하셨네요.

 

올려주신 코드로 추측해보면

print_textview = (TextView)((Activity)mContext).findViewById(R.id.pr_textview);

여기서 mContext 가 Activity 가 아닌거겠죠.
원조안드로이드 (58,190 포인트) 님이 2018년 8월 24일 답변
public class OnGetImageListener implements OnImageAvailableListener {
이상태에서 print_textview = (TextView) findViewById(R.id.pr_textview); 이렇게 하였을때에 findViewById에 에러 표시가 되는 어떻게 해야될까요?
...