총 게시물 39,242건, 최근 1 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

안드로이드 액티비티 초기화 관련 질문입니다

글쓴이 : n4u1 날짜 : 2018-11-27 (화) 16:44 조회 : 2232
글주소 : http://www.androidside.com/B49/170496
 
  임베디드 개발 마이크로비젼
임베디드 개발용역, 개발보드, 에뮬레이터.
www.mvtool.co.kr
  KG아이티뱅크 교육수강문의
KG아이티뱅크학원방문상담예약, 실무형IT교육, 학습자, 맞춤자바교육, 수강료할인.
www.hrditbank.com
  SBS아카데미게임학원 김보람
게임업계 취업 전문과정! 1:1멘토링,포트폴리오제작,국비할인,취업연계,게임개발과정
gwangjusbsgameacademy.com
신청하기


안녕하세요. 혹자 독학중입니다..

그래서 질문이 당연한걸수도 있지만 두달째 이해가 안되는부분이 있어서요..



SplashActivity → LoginActivity → HomeActivity → TestActivity

이런 플로우가 일반적으로 앱을 이용하는 사용자가 TestActivity에 접근하는 방식입니다.

정상적으로 동작하고요





FirebaseDynamicLink를 사용해서 TestActivity로 한번에 들어가게 하는게 주목적인데

여러가지 상황때문에 링크클릭과 TestActivity 중간에 LoadingActivity를 넣었습니다

그래서 Dynamic Link 클릭을하면 LoadingActivity → TestActivity 로 접근하게 하려고합니다.



문제점은

앱이 미설치 되어있다면 스토어로 이동 (정상)

앱이 설치 되어있고 백그라운드 상태면 LoadingActivity → TestActivity로 이동(정상)

앱이 설치 되어있고 종료 상태면 LoadingActivity → TestActivity로 이동(비정상)

인상태입니다.




TestActivity.java


public class TestActivity extends AppCompatActivity implements View.OnClickListener {
.
.
.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
.
.
.

        //contentDTO 화면 초기세팅
        mDatabaseReferenceAlarm = FirebaseDatabase.getInstance().getReference();
        Log.d("lkj createTime1", "time1");
        mDatabaseReferenceAlarm.child("user_contents").child(contentKey).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Log.d("lkj createTime2", "time2");
                ContentDTO contentDTO = dataSnapshot.getValue(ContentDTO.class);
                Log.d("lkj createTime3", "time3");
                Log.d("lkj createTime4", auth.getCurrentUser().getUid());
                TestActivity_textView_date.setText(contentDTO.getUploadDate());
                TestActivity_textView_title.setText(contentDTO.getTitle());
                TestActivity_textView_contentId.setText(contentDTO.getContentId());
                TestActivity_textView_contentType.setText(contentDTO.getContentType());
                TestActivity_textView_description.setText(contentDTO.getDescription());
                TestActivity_textView_pollMode.setText(contentDTO.getPollMode());
                settingUserAlarm(contentKey);
                contentHit = contentDTO.getContentHit();
                contentAmount = contentDTO.getItemViewType();




위 코드에서 
TestActivity_textView_date.setText(contentDTO.getUploadDate()); 
라인에서 아래와같은 에러가 발생합니다.



    

    --------- beginning of crash

2018-11-27 16:38:56.863 1832-1832/com.n4u1.AQA.AQA E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.n4u1.AQA.AQA, PID: 1832

    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.n4u1.AQA.AQA.models.ContentDTO.getUploadDate()' on a null object reference

        at com.n4u1.AQA.AQA.views.TestRankingActivity$12.onDataChange(TestActivity.java:818)

        at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@16.0.5:183)

        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.5:75)

        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.5:63)

        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.5:55)

        at android.os.Handler.handleCallback(Handler.java:789)

        at android.os.Handler.dispatchMessage(Handler.java:98)

        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)











LoadingActivity 에서 putExtra 로 contentKey는 정상적으로 받아옵니다만

저기서 왜 Null이 떨어지는지 이해가 안됩니다...



앱이 꺼져있는 (갤럭시S 기준 홈버튼 왼쪽을눌러서 떠있는 모든앱삭제) 상태에서

바로 LoadingActivity 가 실행되서 그런것 같기도하고.. 잘모르겠습니다....





이건 AndroidManifest.xml 입니다

<activity android:name=".splash.LoadingActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:host="test.com"
            android:scheme="https" />
        <data
            android:host="test.com"
            android:scheme="http" />
    </intent-filter>
<activity android:name=".views.TestActivity" />
<activity android:name=".splash.SplashActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>








어떤걸 확인해봐야 하나요??



질문자가 자신의 포인트 5 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 4을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

은빛파도 2018-11-27 (화) 17:49
타이밍 이슈인거 같은데  mDatabaseReferenceAlarm.child("user_contents") 로 리스트로 호출해보시고

직접 for문 돌려서 검색 해보세요.
댓글주소 추천 0 반대 0
n4u1 2018-11-27 (화) 21:45
은빛파도님처럼 비슷한 맥락의 문제가 아닐까라는 생각을 해보긴해봤거든요?
왜냐하면 가끔은 링크를 타고 들어가도 될때가 있어요 
10~20번 중에 한번?

그래서 소스에 있는것처럼 Log.d("lkj createTime2", "time2"); 이런걸 넣어서 테스트를 해봤는데
파이어베이스를 참조하는 시점보다 contentKey가져오는 시점이 더 전이라 그게 맞나?? 라는생각

그리고 그런게 뭔지 정확히 몰라서.. 뭐지?? 막 이런생각..

for문으로 검색을요...? 음...힌트 감사합니다

댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기