androidview保存
Ⅰ Android,webview中點擊一個保存按鈕,在部分手機上能彈出保存成功,在部分手機上不能
說明手機之間不兼容
Ⅱ 如何將android中webview讀取的圖片保存到SD卡中呢
保存 再看保存在哪 再移至存儲卡
Ⅲ Android viewpager動態添加的view怎麼保存
添加城市的時候,存名稱或者相關id到文件或者SharedPerference,當關閉重新打開APP的時候,讀取添加時候存的城市或者相關id,然後獲取數據動態生成相關view,再重新加入viewPager。
Ⅳ Android的ViewGroup存放在哪個包中
Android系統中的所有UI類都是建立在View和ViewGroup這兩個類的基礎上的。塵大褲所有View的子類成為」Widget」,所有ViewGroup的子類成為」Layout」。View和ViewGroup之間採用了組合設計模式,可仿伍以使得「部分-整體」同等對待。ViewGroup作為布局容器類的最上層,布局容器裡面又可以有View和ViewGroup。
二派簡、LayoutInflater,LayoutInflater.inflate()這兩個是什麼意思?
LayoutInflater是一個用來實例化XML布局文件為View對象的類
LayoutInflater.infalte(R.layout.test,null)用來從指定的XML資源中填充一個新的View
Ⅳ android中,怎麼保存ListView中checkbox的狀態
我現在也是這么做的,不知道還有沒好的方法。就是在public
void
onItemClick(AdapterView<?>
parent,
View
view,
int
position,long
id)這個方法里邊保存每個Item的狀態(例如:保存在一個map中)在自定義的Adapter中的public
View
getView(int
position,
View
convertView,
ViewGroup
parent)中判斷view
的狀態(判斷position是否在保存的map中)我是這么做的
Ⅵ androidwebview保存瀏覽位置
androidwebview保存瀏覽位置是辯納指定位置。根據查詢相關信息顯示,添加webview滾動監聽,保存滾動鉛尺位置,配合文章id等唯一標識保存下來,在進入的時候判斷位置是槐灶高否有效,然後scrollTo到指定位置。
Ⅶ android開發,如何將此次修改的textview的text內容保存住,下次啟動軟體後顯示上次的
我感覺應該定義一個標識來保存顯示的內容(與保存密碼方式相同),在念大啟動時,增仔備豎加判斷語句,滾羨判斷保存的顯示內容進行顯示。
Ⅷ Android 下的 WebView 中數據如何保存
1、Android中的WebView控制項當載入html時候,會在data/應用package下生成database與cache兩個文件夾如下圖如示:
Url記錄是保存在webviewCache.db里,而url的內容是保存在webviewCache文件夾下。
WebView中存在著兩種緩存:網頁數據緩存(存儲打開過的頁面及資源)、H5緩存(即AppCache)。
2、緩存構成
/data/data/package_name/cache/
/data/data/package_name/database/webview.db
/data/data/package_name/database/webviewCache.db
webview 會將瀏覽過的網頁url以及網頁文件(css、圖片、js等)保存到資料庫表中。
緩存模式(5種)
LOAD_CACHE_ONLY: 不使用網路,只讀取本地緩存數據
LOAD_DEFAULT: 根據cache-control決定是否從網路上取數據。
LOAD_CACHE_NORMAL: API level 17中已經廢棄, 從API level 11開始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用緩存,只從網路獲取數據.
LOAD_CACHE_ELSE_NETWORK,只要本地有,無論是否過期,或者no-cache,都使用緩存中的數據。
Ⅸ android webview 如何存儲cookie
在App中嵌入網頁,使用Nativie方式登錄,然後將cookie保存到WebView中,實現免登錄功能。同步Cookie到WebView的方法可以參考下面的代碼:
/**
* Sync Cookie
*/
private void syncCookie(Context context, String url){
try{
Log.d("Nat: webView.syncCookie.url", url);
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();// 移除
cookieManager.removeAllCookie();
String oldCookie = cookieManager.getCookie(url);
if(oldCookie != null){
Log.d("Nat: webView.syncCookieOutter.oldCookie", oldCookie);
}
StringBuilder sbCookie = new StringBuilder();
sbCookie.append(String.format("JSESSIONID=%s","INPUT YOUR JSESSIONID STRING"));
sbCookie.append(String.format(";domain=%s", "INPUT YOUR DOMAIN STRING"));
sbCookie.append(String.format(";path=%s","INPUT YOUR PATH STRING"));
String cookieValue = sbCookie.toString();
cookieManager.setCookie(url, cookieValue);
CookieSyncManager.getInstance().sync();
String newCookie = cookieManager.getCookie(url);
if(newCookie != null){
Log.d("Nat: webView.syncCookie.newCookie", newCookie);
}
}catch(Exception e){
Log.e("Nat: webView.syncCookie failed", e.toString());
}
}
使用上面的方法可以將Cookie同步到WebView中,這樣瀏覽網頁時即可實現免登錄。
但是在實際使用過程中會出現Cookie並未保存成功,每次都會跳轉到登錄頁面應為初始化WebView時漏掉了重要的東西。可以參考下面代碼設置WebView。
/**
* init WebView Settings
* */
private void initWebViewSettings(){
// myWebView.getSettings().setSupportZoom(true);
// myWebView.getSettings().setBuiltInZoomControls(true);
// myWebView.getSettings().setDefaultFontSize(12);
// myWebView.getSettings().setLoadWithOverviewMode(true);
// 設置可以訪問文件
myWebView.getSettings().setAllowFileAccess(true);
//如果訪問的頁面中有javascript,則webview必須設置支持Javascript
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setUserAgentString(MyApplication.getUserAgent());
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setAppCacheEnabled(true);
myWebView.getSettings().setDomStorageEnabled(true);
myWebView.getSettings().setDatabaseEnabled(true);
}
完成以上兩步操作,再次運行程序,就會發現,打開網頁後不會再跳轉到登錄頁面了。
Ⅹ Android 保存圖片到本地。
這里只介紹按下「保存」後如何將一個Bitmap對象保存為圖片文件的執行步驟,對圖片的下載,圖片到Bitmap對象的轉換,Bitmap對象的格式轉換和壓縮,以及界面設計部分全部都忽略了。
確定存儲路徑
獲取外部存儲許可權
確定外部存儲狀態
確定文件名
保存到文件中
發送廣播,通知系統掃描保存後的文件
Stringdir=Environment.getExternalStorageDirectory().getAbsolutePath()+"/tencent/MicroMsg/WeiXin/"
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//獲取內部存儲狀態
Stringstate=Environment.getExternalStorageState();
//如果狀態不是mounted,無法讀寫
if(!state.equals(Environment.MEDIA_MOUNTED)){
return;
}
隨機命名
這種命名規則是隨機生成一個字元串或一組數字來對圖片命名。
字元串可以通過UUID來生成,數字可以通過Random()類來生成,例如:[java]view plain
//通過UUID生成字元串文件名
StringfileName1=UUID.randomUUID().toString();
//通過Random()類生成數組命名
Randomrandom=newRandom();
StringfileName2=String.valueOf(random.nextInt(Integer.MAX_VALUE));
這種命名規則是按照數字從小到大的順序來對圖片命名。
在程序啟動時先獲取圖片文件名中當前最大數字的文件名,之後每保存一張圖片就將數字加1即可。時間命名
這種命名規則是根據保存圖片的當前系統時間來對圖片命名。
系統時間可以通過System.currentTimeMillis()來獲取,不過System.currentTimeMillis()獲取到的時間是一個long型的整數,如果用它做文件名,無法通過文件名直接看出文件的具體保存時間。可以通過SimpleDateFormat先對當前時間做格式化,然後再將其作為文件名來使用。例如:[java]view plain
使用這種命名規則來命名需要注意的是同一秒鍾可能會有多張圖片需要保存,在得到當前系統時間對應的文件名後,需要判斷該文件是否存在。如果文件已經存在,需要重新生成文件名。重新生成的文件名可以在之前的文件名後加上一個隨機數後綴,或者是用毫秒數做後綴。
Calendarnow=newGregorianCalendar();
SimpleDateFormatsimpleDate=newSimpleDateFormat("yyyyMMddHHmmss",Locale.getDefault());
StringfileName=simpleDate.format(now.getTime());
文件URL命名
每張網路圖片都有一個對應的圖片URL,可以根據圖片的URL來對圖片命名。
不過URL中會包含一些不能用作文件名的特殊字元,此外直接用URL來命名可能會帶來安全問題。為了避免這兩個問題,可以將圖片URL的MD5值作為文件名來使用。由於MD5是不可逆的,也就無法通過MD5值反向得到圖片URL,同時MD5值對應的字元串只包含[0-9A-Z],不包含特殊字元,可是作為文件名使用。
由於每張圖片的URL是唯一的,其對應的文件名也就是唯一的。如果需要每張網路圖片只能生成一個文件,不允許保存為多份拷貝,可以用這種命名規則。在得到URL對應的文件名後,先判斷文件是否已經存在,如果已經存在,直接覆蓋或不處理。try{
Filefile=newFile(dir+fileName+".jpg");
FileOutputStreamout=newFileOutputStream(file);
mBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
out.flush();
out.close();
}catch(Exceptione){
e.printStackTrace();
}
try{
Filefile=newFile(dir+fileName+".jpg");
FileOutputStreamout=newFileOutputStream(file);
mBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
out.flush();
out.close();
//保存圖片後發送廣播通知更新資料庫
Uriuri=Uri.fromFile(file);
sendBroadcast(newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri));
}catch(Exceptione){
e.printStackTrace();
}
確定存儲路徑
在Android中文件存儲路徑包括內部存儲和外部存儲兩種類型。
對內部存儲,當一個app被安裝到手機後,Android系統會在內部存儲的/data/data/目錄下創建一個以包名稱命名的文件夾。例如/data/data/com.sohu.inputmethod.sogou/。一個應用對內部存儲的所有訪問都被限制在這個文件夾中,也就是說Android應用只能在該目錄中讀取,創建,修改文件。對該目錄之外的其他內部存儲中的目錄都沒有任何操作的許可權。因此,如果將圖片保存在內部存儲中,只能被應用自身讀取,其他應用均無法讀取。如果需要讓系統圖庫,相冊或其他應用能夠找到保存的圖片,必須將圖片保存到外部存儲中。
對外部存儲,當一個app被安裝到手機後,Android系統會在外部存儲的/Android/data/目錄下創建一個以包名命名的文件夾(這里第一個/不是根路徑,而是相對外部存儲所掛載路徑的相對路徑)。例如/storage/emulated/0/Android/data/com.sohu.inputmethod/。這個路徑同樣只能被應用自身讀取,其他應用不能訪問。因此,也不能將圖片保存在這個目錄中。
除外部存儲的/Android目錄之外的其他目錄一般都是可以被其他應用訪問的。目前,大多數應用都會在外部存儲的根路徑下建立一個類似包名的多層目錄,以存儲需要共享的文件。例如/storage/emulated/0/sogou/image/。還需要注意的是,很多查看圖片的應用都支持按照文件夾來查看圖片。如果將圖片所在的文件夾取名為image,photo之類的,就無法和其他文件夾區分開,用戶也不能識別該文件夾的用途。因此最好取一個有區分度的文件夾名字,例如網路貼吧就保存在/tieba目錄,微信是保存在/tencent/MicroMsg/WeiXin目錄。
由於Android系統的碎片化問題,不同設備上外部存儲的路徑很可能會不同,因此,不能直接使用/storage/emulated/0/作為外部存儲的根路徑。
Android SDK中 Environment類 提供了getExternalStorageDirectory()方法來獲取外部存儲的根路徑。示例如下:
[java]view plain
需要注意的是Environment.getExternalStorageDirectory()返回的路徑中最後一個字元不是/,如果需要創建子目錄,需要在子目錄的前後都加上/。
獲取外部存儲許可權
由於需要在外部存儲中寫文件,需要在AndroidManifest.xml中增加如下的許可權聲明。
[java]view plain
確定外部存儲狀態
由於外部存儲需要被掛載,也可以被卸載,在寫入文件之前,需要先判斷外部存儲的狀態是否正常。只有狀態正常情況下才可以執行保存文件的操作。獲取外部存儲狀態同樣是通過Environment類,通過Environment.getExternalStorageState()可以得到一個字元串,來表示外部存儲的狀態。同時在Environment類中定義了一系列的String常量表示不同的狀態。在所有的狀態中只有內部存儲處於Environment.MEDIA_MOUNTED狀態時才可以讀寫文件,因此,需要將獲取到的狀態和Environment.MEDIA_MOUNTED做比較,如果不是Environment.MEDIA_MOUNTED狀態,就返回保存失敗。示例如下。
[java]view plain
確定文件名
保存的圖片文件名可以由應用根據自身需要自行確定,一般來說需要有一個命名規則,然後根據命名規則計算得到文件名。
這里列舉幾種常見的命名規則。
保存到文件中
保存圖片文件時,通過Bitmap的compress()方法將Bitmap對象壓縮到一個文件輸出流中,然後flush()即可。示例如下。
[java]view plain
發送廣播,通知系統掃描保存後的文件
至此,已經實現將Bitmap對象保存成外部存儲中的一個jpg格式的文件。但此時該文件只是保存在外部存儲的一個目錄中,必須進入其所在的目錄中才可以看到。在系統圖庫,相冊和其他應用中無法看到新建的圖片文件。為了讓其他應用能夠知道圖片文件被創建,必須通知MediaProvider服務將新建的文件添加到圖片資料庫中。
Android系統中常駐一個MediaProvider服務,對應的進程名為android.process.media,此服務用來管理本機上的媒體文件,提供媒體管理服務。在系統開機或者收到外部存儲的掛載消息後,MediaProvider會調用MediaScanner,MediaScanner會掃描外部存儲中的所有文件,根據文件類型的後綴將文件信息保存到對應的資料庫中,供其他APP使用。
MediaScannerReceiver是一個廣播接收者,當它接收到特定的廣播請求後,就會去掃描指定的文件,並根據文件信息將其添加到資料庫中。當圖片文件被創建後,就可以發送廣播給MediaScannerReceiver,通知其掃描新建的圖片文件。示例如下。
[java]view plain
圖片的非同步保存
保存圖片文件時,如果圖片很大,或需要同時保存多張圖片時,就需要較多的時間。為了避免阻塞UI線程,出現幀率下降或ANR,通常需要將圖片保存操作放到線程中去執行。當圖片保存完畢後通過sendMessage()方法通知UI線程保存結果。
將圖片保存放到後台線程去執行需要增加一些同步機制避免一些多線程問題。例如有兩張圖片需要保存,分別放到兩個線程中去執行,保存圖片時文件名以數字順序增加。第一個線程選中文件名為125.jpg,但此時文件還未創建,第二個線程判斷125.jpg不存在,於是也選取125.jpg作為文件名,兩張圖片就保存到同一個文件中了。