совместное использование «глобальных» переменных между действиями, проблема при использовании Webview ...? - PullRequest
3 голосов
/ 23 июня 2010

Я разделяю некоторые переменные по видам деятельности, используя такой класс:

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) {

выдает ошибку:

06-23 12: 14: 03.443: ОШИБКА / AndroidRuntime (2611): причина: java.lang.NullPointerException

2 вопроса, затем:

  • Должен ли я использовать что-то еще, кроме этого "Глобального" класса, для совместного использования переменных в действиях? Это просто плохая практика? Я знаю, что могу использовать предпочтения, но я думал, что так будет быстрее (нет необходимости «читать» предпочтения каждый раз, когда я начинаю новое занятие ...

  • Есть идеи, ПОЧЕМУ это происходит? Должен ли я каким-то образом «вернуть» свой сохраненный экземпляр состояния, когда моя активность возвращается из класса News_Webview.class ???

Как всегда, спасибо за помощь.

H.

Ответы [ 2 ]

2 голосов
/ 23 июня 2010

U может использовать intent.putExtra() для взаимодействия между действиями ...

Одна вещь (только для диагностики), которую я хотел бы предложить, - это инициализировать статические переменные некоторым значением, а затем запустить приложение ... я полагаю, ваш глобальный класс переинициализируется, когда задание, начатое намерением, возвращается обратно ...

Я использовал глобальные переменные, но в моем случае я держал их в деятельности, которая никогда не умерла. Все остальные действия последовали за ним, и все работало отлично ...

0 голосов
/ 23 июня 2010

NullPointerException всплывает из среды выполнения Android и не имеет ничего общего с вашим типом Globals.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...