2012-12-08 5 views
0

내 앱에는 3 탭의 ActionBar 레이아웃이 있습니다. 3 개의 탭은 대시 보드, 피드메시지입니다.Android WebView 탭 쿠키로 검색

세 가지 중 하나를 클릭하면 응용 프로그램은 www.flyalaskava.org/incog/mobile/의 WebView를 생성합니다. 활성화 된 세션이없는 경우에는 이미지가 표시되고 " 페이스 북으로 로그인 "버튼을 클릭하십시오.

첫 번째 탭 (대시 보드)을로드하고 Facebook에서 cliek 로그인 할 때 문제가 발생합니다.하지만 다른 탭을 클릭하자마자 내 세션이 손실되고 다시 로그인하게됩니다. 메시지가 표시됩니다.

현재이 모두는 동일한 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 \\\\\\ *

나는 메신저는 행동 mWebView.loadUrl("http://www.flyalaskava.org/incog/mobile/");를 사용 어쩌면 때문에, 비슷한 문제가 될 것으로 보인다이 article 발견 새로운 브라우저와 마찬가지로, 그 방법을 사용하지 않고 URL을 변경할 수있는 방법이 있습니다.

Here이 문제의 그림입니다.

답변

0

생성 한 후 다음 줄을 추가하여 WebView :

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

내가 아무것도 가져올 필요합니까? CookieSyncManager가 해결되지 않고 CookieManager를 해결할 수 없습니다. –

+0

예, 패키지 웹킷에 있습니다. eclipse에서는 CTRL + SHIFT + O를 입력하여 자동으로 가져 오기를 관리 할 수 ​​있습니다. – yDelouis

+0

좋은 소식, 나쁜 소식 권. 좋은 소식 : 오류가 발생하는 것을 멈추고 솔루션을 사용했습니다. 나쁜 소식은 탭에서 탭으로 전환 할 때 세션을 유지하지 않습니다. 추가 한 업데이트를보고 도움이 될지 확인해 주시겠습니까? 너무 가난하게해서 유감스럽게 생각해서 나는 "그 사람"이 내가하는 일에 최선을 다하는 데 사용되는 것을 싫어한다. –

0

쿠키 대신 Service을 사용하는 것이 좋습니다. 서비스를 사용하면 응용 프로그램의 백그라운드에서 서버에 대한 연결을 유지 관리 할 수 ​​있습니다. 서비스는 일단 생성되면 쉽게 참조 할 수 있습니다 (서비스 및 인 텐트에 대해 읽음). 그러면 서비스가 서버 세션으로 작동합니다.