Je partage certaines variables accross activités en utilisant une classe comme ceci:partage des variables "globales" entre activités, problème lors de l'utilisation d'un Webview ...?
public class Globals {
static Boolean hint1_graph_type_switcher;
static Boolean hint2_stockview_valuation;
other variables ...
}
alors j'utilise ces variables partout dans mes multiples activités avec ...
if (Globals.hint2_stockview_valuation == false) {
....
}
assez basique et il fonctionnait bien jusqu'à ...
J'introduit quelques trucs WebView comme ceci:
//-----------------------------------------------------------
// 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);
}
});
//-----------------------------------------------------------
et voici le 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);
}
}
le problème est maintenant que, quand il « revient » de cette activité, il semble que mes variables Globals ont disparu ???
if (Globals.hint2_stockview_valuation == false) {
incendies une erreur:
06-23 12: 14: 03,443: ERROR/AndroidRuntime (2611): causée par: java.lang.NullPointerException
2 questions alors:
Dois-je utiliser quelque chose e lse que cette classe "Global" pour partager des variables entre les activités? Est-ce juste une mauvaise pratique de le faire ?? Je sais que je peux utiliser les préférences mais je pensais qu'il était plus rapide de le faire de cette façon (pas besoin de "lire" les préférences chaque fois que je commence une nouvelle activité ...
Une idée sur pourquoi cela se passe? dois-je "retourner" mon savedInstanceState en quelque sorte quand mon activité revient de la News_Webview.class ???
Comme toujours, merci pour votre aide.
H.
Je le sais, merci. mais je partage aussi des objets plus complexes en utilisant cette technique (classe Global) ... et cela n'explique pas le problème énoncé ici. – Hubert
En effet, il semble que l'activité soit redémarrée à son retour. SavedInstanceState enregistrerait-il ces variables quelque part? Devrais-je les récupérer d'une certaine manière peut-être?Comment avez-vous forcé votre "activité à ne jamais mourir"? – Hubert
Eh bien, vous pouvez essayer de les enregistrer dans le SavedInstanceState dans le onPause(), les récupérer dans le onResume() de votre activité ... suppose que cela pourrait fonctionner ... – JaVadid