Co źle jest w tym kodzie? (aplikacja pod androida przestaje odpowiadać)


(Piesek64) #1

Jak w temacie.

(..)
public class MainActivity extends Activity {
 
EditText adresurl;
EditText adresurl2;
    WebView przegladarka;
    WebView karta2;
    Button przejdznastrone;
    Button przejdznastrone2;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    przejdznastrone = (Button) findViewById(R.id.bTload);
    adresurl = (EditText) findViewById(R.id.eTwebview);
    przegladarka = (WebView) findViewById(R.id.wVbrowser);
    karta2 = (WebView) findViewById(R.id.karta2);
    przejdznastrone2 = (Button) findViewById(R.id.bTload2);
    adresurl2 = (EditText) findViewById(R.id.eTwebview2);
    WebSettings ws = przegladarka.getSettings();
    ws.setJavaScriptEnabled(true);
ws.setBuiltInZoomControls(true);
ws.setDomStorageEnabled(true);
CookieSyncManager.createInstance(przegladarka.getContext());
ws.setJavaScriptCanOpenWindowsAutomatically(true);
ws.setCacheMode(1);
    WebSettings ws2 = przegladarka.getSettings();
    ws2.setJavaScriptEnabled(true);
ws2.setBuiltInZoomControls(true);
ws2.setDomStorageEnabled(true);
CookieSyncManager.createInstance(karta2.getContext());
ws2.setJavaScriptCanOpenWindowsAutomatically(true);
ws2.setCacheMode(1);
przegladarka.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
przegladarka.setScrollbarFadingEnabled(true);
    przegladarka.setWebViewClient(new ModifiedWebViewClient());
karta2.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
karta2.setScrollbarFadingEnabled(true);
    karta2.setWebViewClient(new ModifiedWebViewClient());
if (savedInstanceState == null)
    {
      // Load a page
      przegladarka.loadUrl("http://www.google.pl");
      karta2.loadUrl("http://www.google.pl");
    }
    }
 
    public void okIdz(View v) {
    String adres = adresurl.getText().toString();
    
    przegladarka.loadUrl("http://" + adres);
    }
    public void okIdz2(View v) {
    String adres2 = adresurl2.getText().toString();
    
    karta2.loadUrl("http://" + adres2);
    }
 
 
    public class ModifiedWebViewClient extends WebViewClient {
 
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
 
    }
 
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
 public void onSaveInstanceState(Bundle outState)
 {
   super.onSaveInstanceState(outState);
 
   // Save the state of the WebView
   przegladarka.saveState(outState);
   karta2.saveState(outState);
 }
  
 @Override
 public void onRestoreInstanceState(Bundle savedInstanceState)
 {
   super.onRestoreInstanceState(savedInstanceState);
 
   // Restore the state of the WebView
   przegladarka.restoreState(savedInstanceState);
   karta2.restoreState(savedInstanceState);
 }
 
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
   // Check if the key event was the Back button and if there's history
   if ((keyCode == KeyEvent.KEYCODE_BACK) && przegladarka.canGoBack()) {
       przegladarka.goBack();
       return true;
   } else if((keyCode == KeyEvent.KEYCODE_BACK) && karta2.canGoBack()) {
       karta2.goBack();
       return true;
   }
   // If it wasn't the Back key or there's no web page history, bubble up to the default
   // system behavior (probably exit the activity)
   Toast.makeText(this, "Nie można powrócić! Historia jest pusta.", Toast.LENGTH_SHORT).show();
   return false;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
   // Handle item selection
   switch (item.getItemId()) {
       case R.id.wersja:
        Toast.makeText(this, "DogBrowser 11.0, based on Webkit. Javascript enabled.", Toast.LENGTH_SHORT).show();
           return true;
       case R.id.google:
        przegladarka.loadUrl("http://google.pl");
           return true;
       case R.id.karta2:
        przegladarka.setVisibility(View.INVISIBLE);
        adresurl.setVisibility(View.INVISIBLE);
        przejdznastrone.setVisibility(View.INVISIBLE);
        karta2.setVisibility(View.VISIBLE);
        przejdznastrone2.setVisibility(View.VISIBLE);
        adresurl2.setVisibility(View.VISIBLE);
           return true;
       default:
           return super.onOptionsItemSelected(item);
   }
}
 
@Override
protected void onPause() {
super.onPause();
CookieSyncManager.getInstance().stopSync();
}
 
@Override
protected void onResume() {
super.onResume();
CookieSyncManager.getInstance().startSync();
}
 
 
}

Przy uruchomieniu aplikacja przestaje działać. Przy debugu jest ciągle czarny ekran.


(LonngerM) #2

Jeśli się nie mylę jest to spowodowane tym, że chcesz wczytać stronę www w głównym wątku aplikacji.

Ładowanie stron WWW daj do nowego wątku.


(Frankfurterium) #3

Raczej nie. To znaczy łączenie się z netem w EDT (czy jak to się w Androidzie nazywa) to kiepski pomysł, ale nie powinno zawieszać aplikacji. Przeglądałeś komunikaty z LogCata?


(Piesek64) #4

W logcatcie nic nie ma. Wcześniej łączenie webview z google w onCreate działało. Teraz to czym innym spowodowane. Będę usuwać części kodu, może odkryje co to było.

Edit: Nie przełączałem się na drugą kartę, ale pierwsza działa po dodaniu kontroli przez cookie managera dla drugiej karty.

Edit2: Druga karta nic nie pokazuje

Edit3: Myślę, że lepsze będzie zrobienie kart w nowym activity. Jak je włączyć wiem, ale jak je wyłączyć to poszukam.