안드로이드 스튜디오 Activity 전역변수 Unfortunately 에러 해결방법?

조회수 3237회

안녕하세요. 현재 안드로이드 스튜디오를 사용해서 웹페이지 뷰어를 만들어고 있습니다.

WebActivity 에서 actmode int 전역변수값에 따라 웹페이지를 띄워 주고자 하는데 계속 에러가 발생하네요

해결방법을 알려주세요. 감사합니다.

  1. MainActivity 에서 int actmode 전역변수 지정 (값 입력)
  2. WebActivity 에서 actmode 값 불러와서 actmode 값에 따라 동작
  3. WebActivity 에서

MainActivity myApp = (MainActivity)getApplicationContext();

actmode = myApp.getActmode();

위 코드에서 에러 발생

package com.themerite.app.AppMain;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private int actmode;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        actmode=2;
    }

    public void onWebClicked(View v) {
        Intent WebView = new Intent(this, WebActivity.class);
        startActivity(WebView);
    }

    public void setActmode(int actmode){
        this.actmode = actmode;
    }

    public int getActmode(){
        return actmode;
    }
}


MainActivity 는 위처럼 만들고 아래처럼 WebActivity 에서 불러들인 전역변수 에러가 발생합니다.

public class WebActivity extends AppCompatActivity {

    WebView mWebView; 
    String goURL;
    int actmode;

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

        /* MainActivity에서 전역변수를 불어와서 WebActivity 에 적용 */
        /* 에러 발생! */
        MainActivity myApp = (MainActivity)getApplicationContext();
        actmode = myApp.getActmode();

        if(actmode==2) {
            goURL = "https://naver.com";
        }
        webviewStart();
    }

    public void webviewStart() {
        /*
       뷰 실행
        */
    }


  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • ActMode 라는 변수를 Activity 말고 Application 클래스에서 사용해보세요.

    Application 사용하기 위해서는 Manifest에 등록이 필요합니다.

    public class MyApp extends Application {
    
      int actmode;
    
      @Override public void onCreate() {
        super.onCreate();
        act mode = 2;
      }
    
      public void setActmode(int actmode){
            this.actmode = actmode;
        }
    
        public int getActmode(){
            return actmode;
        }
    }
    
    

    이렇게 하고 값을 불러올 때는

    MyApp myApp = (MyApp) getApplication();
    actmode = myApp.getActmode();
    

    이런 방식으로 가능합니다.

    정확한 용도는 모르겠지만 사실 이런 것보다는 WebActivity 에 intent로 값을 전달하는게 나을 것 같아 보입니다.

    Activity 간 intent 전달도 찾아보세요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)