2012-12-08 64 views
0

我的應用程序具有3選項卡的ActionBar佈局。這3個標籤是儀表板,供給消息Android WebView選項卡使用Cookie瀏覽

當你點擊三者中的任何一個時,應用程序應該創建一個www.flyalaskava.org/incog/mobile/的WebView - 如果你沒有活動會話 - 將顯示一個圖像和一個「用facebook登錄「按鈕。

問題是,當我加載第一個選項卡(控制板)並使用Facebook登錄時,它會將我登錄 - 但只要我點擊另一個選項卡,就會丟失會話,提示。

請記住,目前所有這些都使用相同的php文件,並且登錄系統完全可以在Android以外工作。對不起,如果這是一個新手問題 - 任何幫助表示讚賞。

package com.example.testing; 

import android.app.ActionBar; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.NavUtils; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 

import com.handmark.pulltorefresh.library.PullToRefreshWebView; 

public class Main extends FragmentActivity implements ActionBar.TabListener { 

    PullToRefreshWebView mPullRefreshWebView; 
    WebView mWebView; 

    /** 
    * The serialization (saved instance state) Bundle key representing the 
    * current tab position. 
    */ 
    private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item"; 

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

     mPullRefreshWebView = (PullToRefreshWebView) findViewById(R.id.pull_refresh_webview); 
     mWebView = mPullRefreshWebView.getRefreshableView(); 

     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.setWebViewClient(new SampleWebViewClient()); 
     mWebView.loadUrl("http://www.google.com"); 

     // Set up the action bar to show tabs. 
     final ActionBar actionBar = getActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     // For each of the sections in the app, add a tab to the action bar. 
     actionBar.addTab(actionBar.newTab().setText(R.string.title_section1) 
      .setTabListener(this)); 
     actionBar.addTab(actionBar.newTab().setText(R.string.title_section2) 
      .setTabListener(this)); 
     actionBar.addTab(actionBar.newTab().setText(R.string.title_section3) 
      .setTabListener(this)); 
    } 

    private static class SampleWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    } 

    @Override 
    public void onRestoreInstanceState(Bundle savedInstanceState) { 
     // Restore the previously serialized current tab position. 
     if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) { 
      getActionBar().setSelectedNavigationItem(
       savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM) 
      ); 
     } 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     // Serialize the current tab position. 
     outState.putInt(STATE_SELECTED_NAVIGATION_ITEM, getActionBar() 
      .getSelectedNavigationIndex()); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.menu_settings: 
       displayAlert(); 
       break; 
      case R.id.menu_exit: 
       displayExit(); 
       break; 
      default:; 
     } 
     return(super.onOptionsItemSelected(item)); 
    } 

    public void displayAlert() { 
     new AlertDialog.Builder(this) 
      .setMessage("This Application was created by Grant Adkins") 
      .setTitle("About") 
      .setCancelable(false) 
      .setNeutralButton(android.R.string.ok, 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton){ 
         dialog.cancel(); 
        } 
       } 
      ) 
      .show(); 
    } 

    public void displayExit() { 
     new AlertDialog.Builder(this).setMessage("Exit the application") 
      .setTitle("Are you sure?") 
      .setCancelable(false) 
      .setNeutralButton(android.R.string.no, 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton){ 
         dialog.cancel(); 
        } 
       }).setPositiveButton(android.R.string.yes, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton){ 
          finish(); 
         } 
        } 
       ) 
      .show(); 
    } 
    public boolean isOnline() { 
     ConnectivityManager cm = 
      (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     String summary = "<html><body>No Network Connection.</body></html>"; 
     mWebView.loadData(summary, "text/html", null); 
     return false; 
    } 

    @Override 
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
     // When the given tab is selected, show the tab contents in the 
     // container view 
     int page = tab.getPosition() + 1; 
     if(page == 1) { 
      /// eventually is going to load index.php?content=dashboard 
      mWebView.loadUrl("http://www.flyalaskava.org/incog/mobile/"); 
      isOnline(); 
     } else if (page == 2) { 
      /// eventually is going to load index.php?content=messages 
      mWebView.loadUrl("http://www.flyalaskava.org/incog/mobile/"); 
      isOnline(); 
     } else if (page == 3) { 
      /// eventually is going to load index.php?content=feed 
      mWebView.loadUrl("http://www.flyalaskava.org/incog/mobile/"); 
      isOnline(); 
     } else { 
      mWebView.loadUrl("http://www.google.com"); 
      isOnline(); 
     } 
    } 

    @Override 
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    } 

    @Override 
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    } 

    /** 
    * A dummy fragment representing a section of the app, but that simply 
    * displays dummy text. 
    */ 
    public static class DummySectionFragment extends Fragment { 
     /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */ 
     public static final String ARG_SECTION_NUMBER = "section_number"; 

     public DummySectionFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      // Create a new TextView and set its text to the fragment's section 
      // number argument value. 
      TextView textView = new TextView(getActivity()); 
      textView.setGravity(Gravity.CENTER); 
      textView.setText(
       Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER)) 
      ); 

      return textView; 
     } 
    } 
}` 

* \\\\\\\\ UPDATE \\\\\\ *

我發現這個article這似乎是一個類似的問題,也許是因爲IM使用mWebView.loadUrl("http://www.flyalaskava.org/incog/mobile/");是演戲像一個新的瀏覽器,有沒有辦法改變網址,而不使用該方法。

Here是問題的圖片。

回答

0

添加以下行已經創建後您的WebView

CookieSyncManager.createInstance(mWebView.getContext()).sync(); 
CookieManager.getInstance().acceptCookie(); 
+0

我需要進口什麼?我得到的CookieSyncManager無法解析,CookieManager無法解析。 –

+0

是的,它在webkit包中。在eclipse中,你可以輸入CTRL + SHIFT + O自動管理導入。 – yDelouis

+0

好消息,壞消息大聲笑。好消息:得到它不會給我錯誤,並使用你的解決方案。壞消息,從標籤切換到標籤時不會保持會話。你可能看看我添加的更新,看看這可能有幫助嗎?對不起,如此有需要,我討厭成爲我所做的最好的「那個人」,因爲我真的很擅長網絡語言,只是潛入這些東西。 –

0

考慮使用Service代替Cookie。服務將允許您在應用程序的後臺維護與服務器的連接。服務一旦創建就很容易引用(請閱讀服務和意圖)。該服務將作爲您的服務器會話。

相關問題