2010-06-23 6 views
3

나는이 같은 클래스를 사용하여 활동 전체의 몇 가지 변수를 공유 해요 : 다음여러 활동에서 "전역"변수를 공유하고 Webview를 사용할 때 문제가 발생합니까?

public class Globals { 

static Boolean hint1_graph_type_switcher; 
static Boolean hint2_stockview_valuation; 

other variables ... 
    } 

내가 ...

if (Globals.hint2_stockview_valuation == false) { 

     .... 

    } 

아주 기본적이고 어디에서나 내 복수하는 행동이를 통해 이러한 변수를 사용하고 있습니다

//----------------------------------------------------------- 
     // open a webview with the NEWS when the more_arrow is clicked : 
     mNews.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       String news_URL = "http://us.m.yahoo.com/w/yfinance/symbolheadlines/"+ ticker + "/?.intl=us&.lang=en"; 
       Intent news_Webview_intent = new Intent(Chart_View.this, News_Webview.class); 
       news_Webview_intent.putExtra("NEWS_URL", news_URL); 
       startActivity(news_Webview_intent); 
      } 
     }); 
     //----------------------------------------------------------- 
: 그것은

나는이 같은 일부 웹보기 물건을 소개 ... 전까지 잘 작동했다

여기가 News_Webview.class입니다 :

public class News_Webview extends Activity { 

// 
// http://www.chrisdanielson.com/tag/progressdialog/ 
// 

String news_URL; 
private WebView webview; 
private ProgressDialog progressBar; 
private static final String TAG = "Hub"; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.webview_news); 
    this.webview = (WebView)findViewById(R.id.webView); 


    Bundle extras = getIntent().getExtras(); 
    if (this.getIntent().getExtras()!=null){ 
     news_URL = extras.getString("NEWS_URL"); 
    } 


    WebSettings settings = webview.getSettings(); 
    settings.setJavaScriptEnabled(true); 
    webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

    final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 

    progressBar = ProgressDialog.show(News_Webview.this, "", "Loading..."); 

    webview.setWebViewClient(new WebViewClient() { 

     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      //Log.i(TAG, "Processing webview url click..."); 
      Intent viewIntent = new Intent("android.intent.action.VIEW", Uri.parse(url)); 
      startActivity(viewIntent); 
      return true; 
     }     

     public void onPageFinished(WebView view, String url) { 
      //Log.i(TAG, "Finished loading URL: " +url); 
      if (progressBar.isShowing()) { 
       progressBar.dismiss(); 
      } 
     } 

     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      Log.e(TAG, "Error: " + description); 
      Toast.makeText(News_Webview.this, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
      alertDialog.setTitle("Error"); 
      alertDialog.setMessage(description); 
      alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        return; 
       } 
      }); 
      alertDialog.show(); 
     } 
    }); 
    webview.loadUrl(news_URL); 
    } 
} 

문제가 지금 내 전역 변수가 사라진처럼 보이는이이 활동에서 "돌아 오는"때이다 ???

if (Globals.hint2_stockview_valuation == false) { 

화재 오류 :

12월 6일부터 23일까지 : 14 : 03.443 : ERROR/AndroidRuntime (2611)에 의해 발생 : java.lang.NullPointerException이

2 다음 질문 :

  • 이 "글로벌"클래스보다 많은 활동에서 변수를 공유하고 있습니까? 이것을하는 것이 나쁜 습관입니까 ?? 나는 환경 설정을 사용할 수 있다는 것을 알고 있지만 이렇게하면 더 빨리 할 수 ​​있다고 생각했습니다. (새로운 활동을 시작할 때마다 환경 설정을 "읽을"필요가 없습니다.) ...

  • 왜 이런 일이 벌어지고있는가요? 내 활동으로 항상 News_Webview.class ???에서

을 반환 할 때 나는 당신의 도움을 주셔서 감사합니다, 어떤 방법으로 내 savedInstanceState를 "돌아 가야"한다.

H.

답변

2

U를 상호 활동을 위해 intent.putExtra()을 사용할 수 있습니다. raction ...

한 가지 (그냥 진단을 위해) 나는 몇 가지 값을 정적 변수를 초기화하고 다음 응용 프로그램을 실행하는 것이 좋습니다 것이 겠지 ... 귀하의 글로벌 클래스는 의도가 활동을 시작했을 때 다시 초기화되고 있다고 가정 해 보겠습니다. 뒤로 ...

저는 전역 변수를 사용했지만, 제 경우에는 결코 죽지 않는 활동을했습니다. 다른 모든 활동이 그 뒤를 따르고 완벽하게 작동했습니다 ...

+0

감사합니다. 하지만이 기법 (글로벌 클래스)을 사용하여 더 복잡한 객체를 공유하고 있습니다 ... 그리고 여기에 언급 된 문제를 설명하지는 않습니다. – Hubert

+0

실제로 돌아 왔을 때 활동이 다시 시작된 것처럼 보입니다. savedInstanceState가이 변수를 어딘가에 저장합니까? 어쩌면 내가 다시 돌려줘야 할까?당신의 "활동이 절대 죽지 않도록"어떻게 강요 했습니까? – Hubert

+0

그럼 당신은 onPause()에서 savedInstanceState에 저장하려고 시도 할 수 있습니다 ... 당신의 활동의 onResume()에서 그들을 검색하십시오 ... 이것은 잘 될지도 모른다고 생각합니다 ... – JaVadid

0

NullPointerException은 Android 런타임에서 버블 링 중이며 Globals 유형과 관련이 없습니다.

+0

조금 설명 할 수 있겠습니까 ... 무슨 뜻인지 이해할 수 없습니까? – Hubert

+0

콜 스택을 좀더 자세히 조사해보십시오. 내 추측은 ' 뒤로 '활동을 일시적으로 주석 처리하여 확인할 수 있습니다. 유형. – ktingle

+0

NullPointerException의 대부분은 AndroidRuntime 태그와 함께 throw됩니다 ... :) – JaVadid

관련 문제