『壹』 javaweb與安卓數據交互
你好推薦你看邵剛老師的javaWeb教程,在51cto就有,另外包括ssh的部分也可以看看。
『貳』 android與Java web交互可以通過動態調用方法嗎
ndViewById(R.id.webview);
//啟用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js對象名");
在Activity中定義一個要被js調用的方法、src為js傳遞過來的參數、如果沒有不傳也可以的哈
public void jsFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
『叄』 怎樣實現android和javaweb數據交互
要想運行網頁上的js腳本,webview必須設置支持Javas cript。
Java代碼
1mWebview.getSettings().setJavas criptEnabled(true);
然後是設置webview要載入的網頁:
web的網頁:webView.loadUrl("http://www.google.com");
本地的網頁:webView.loadUrl("file:///android_asset/XX.html"); //本地的存放在:assets文件夾中
webview做完基本的初始化後我們還要要給它,加進一個回調的代理類Javas criptInterface,並給它一個調用的名稱:ncp
Java代碼
1mWebView.addJavas criptInterface(new Javas criptInterface(),"ncp");
Javas criptInterface可以是一個普通的Java類,類實現的方法,均可被js回調:
Java代碼
final class Javas criptInterface {
public int callOnJs() {
return 1000;
}
public void callOnJs2(String mode) {
//TODO
}
}
Java要調用js的方法,只需知道js的方法名稱即可:
Java代碼
1mWebView.loadUrl("javas cript:onSaveCallback()");
js 這邊就更簡單:
Js代碼
window.onload = function(){
document.getElementById('btn_1').addEventListener('click', onBtnClick, false);
var _int_value = window.ncp.callOnJs();
alert("get int from java:" + _int_value );
}
function onBtnClick() {
window.ncp.callOnJs2("click");
}
Java和js交互有以下一些特點:
1.Java 調用 js 裡面的函數,速度並不令人滿意,大概一次一兩百毫秒吧,如果要做交互性很強的事情,這種速度會讓人瘋掉的。而反過來就不一樣了, js 去調 java 的方法,速度很快,基本上 40-50 毫秒一次。所以盡量用 js 調用 java 方法,而不是 java 去調用 js 函數。
2.Java 調用 js 的函數,沒有返回值,而 Js 調用 java 方法,可以有返回值。返回值可以是基本類型、字元串,也可以是對象。如果是字元串,有個很討厭的問題,第 3 點我會講的。如果是對象,這個對象會被轉換為 js 的對象,直接可以訪問裡面的方法。但是我不推薦 java 返回給 js 的是對象,除非是必須。因為 js 收到 java 返回的對象,會產生一些交換對象,而如果這些對象的數量增加到了 500 或 600 以上,程序就會出問題。所以盡量返回基本數據類型或者字元串。
3.Js 調用 Java 的方法,返回值如果是字元串,你會發現這個字元串是 native 的,不能對它進行一些修改操作,比如想對它 substr ,取不到。怎麼解決呢?轉成 locale 的。使用 toLocaleString() 函數就可以了。不過這個函數的速度並不快,轉化的字元串如果很多,將會很耗費時間。
『肆』 在Android上怎樣實現JAVA和JS交互
Android中java與js交互是通過webView來交互的。
WebView(網路視圖)能載入顯示網頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎載入顯示網頁,實現WebView有以下兩種不同的方法:
第一種方法的步驟:
1.在要Activity中實例化WebView組件:WebView webView = new WebView(this);
2.調用WebView的loadUrl()方法,設置WevView要顯示的網頁:
互聯網用:webView.loadUrl("http://www.google.com");
本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.調用Activity的setContentView( )方法來顯示網頁視圖
4.用WebView點鏈接看了很多頁以後為了讓WebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統回退剪鍵,整個瀏覽器會調用finish()而結束自身,而不是回退到上一頁面
5.需要在AndroidManifest.xml文件中添加許可權,否則會出現Web page not available錯誤。
<uses-permission android:name="android.permission.INTERNET" />
第二種方法的步驟:
1、在布局文件中聲明WebView
2、在Activity中實例化WebView
3、調用WebView的loadUrl( )方法,設置WevView要顯示的網頁
4、為了讓WebView能夠響應超鏈接功能,調用setWebViewClient( )方法,設置 WebView視圖
5、用WebView點鏈接看了很多頁以後為了讓WebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統回退剪鍵,整個瀏覽器會調用finish()而結束自身,而不是回退到上一頁面
6、需要在AndroidManifest.xml文件中添加許可權,否則出現Web page not available錯誤。
<uses-permission android:name="android.permission.INTERNET"/>
『伍』 android與WEB伺服器交互時,如何保證在同一個會話Session中通信
最近在開發項目的過程中,遇到android與web伺服器要在同一session下通信的問題。在解決問題前先回顧下Session與Cookie:Cookie和Session都為了用來保存狀態信息,都是保存客戶端狀態的機制,它們都是為了解決HTTP無狀態的問題而所做的努力。Session可以用Cookie來實現,也可以用URL回寫的機制來實現。Cookie和Session有以下明顯的不同點:1)Cookie將狀態保存在客戶端,Session將狀態保存在伺服器端;2)Cookies是伺服器在本地機器上存儲的小段文本並隨每一個請求發送至同一個伺服器。網路伺服器用HTTP頭向客戶端發送cookies,在客戶終端,瀏覽器解析這些cookies並將它們保存為一個本地文件,它會自動將同一伺服器的任何請求縛上這些cookies。3)Session是針對每一個用戶的,變數的值保存在伺服器上,用一個sessionID來區分是不同用戶session變數,這個值是通過用戶的瀏覽器在訪問的時候返回給伺服器,當客戶禁用cookie時,這個值也可能設置為由get來返回給伺服器;4)就安全性來說:當你訪問一個使用session 的站點,同時在自己機器上建立一個cookie,建議在伺服器端的SESSION機制更安全些.因為它不會任意讀取客戶存儲的信息。Session機制Session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。當程序需要為某個客戶端的請求創建一個session的時候,伺服器首先檢查這個客戶端的請求里是否已包含了一個session標識 - 稱為 session id,如果已包含一個session id則說明以前已經為此客戶端創建過session,伺服器就按照session id把這個 session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字元串,這個 session id將被在本次響應中返回給客戶端保存。Session的實現方式1) 使用Cookie來實現伺服器給每個Session分配一個唯一的JSESSIONID,並通過Cookie發送給客戶端。當客戶端發起新的請求的時候,將在Cookie頭中攜帶這個JSESSIONID。這樣伺服器能夠找到這個客戶端對應的Session。2 )使用URL回顯來實現URL回寫是指伺服器在發送給瀏覽器頁面的所有鏈接中都攜帶JSESSIONID的參數,這樣客戶端點擊任何一個鏈接都會把JSESSIONID帶給伺服器。 如果直接在瀏覽器中輸入url來請求資源,Session是匹配不到的。Tomcat對 Session的實現,是一開始同時使用Cookie和URL回寫機制,如果發現客戶端支持Cookie,就繼續使用Cookie,停止使用URL回寫。如果發現Cookie被禁用,就一直使用URL回寫。jsp開發處理到Session的時候,對頁面中的鏈接記得使用 response.encodeURL() 。回顧完Session和Cookie,我們來說說為什麼手機端與伺服器交互沒有實現在同一session下?1)原因很簡單,就是因為android手機端在訪問web伺服器時,沒有給http請求頭部設置sessionID,而使用web瀏覽器作為客戶端訪問伺服器時,在客戶端每次發起請求的時候,都會將交互中的sessionID:JSESSIONID設置在Cookie頭中攜帶過去,伺服器根據這個sessionID獲取對應的Session,而不是重新創建一個新Session(除了這個Session失效)。以java.net.HttpURLConnection發起請求為例:獲取Cookie: URL url = new URL(requrl); HttpURLConnection con= (HttpURLConnection) url.openConnection(); // 取得sessionid. String cookieval = con.getHeaderField("set-cookie"); String sessionid; if(cookieval != null) { sessionid = cookieval.substring(0, cookieval.indexOf(";")); } //sessionid值格式:JSESSIONID=,是鍵值對,不是單指值發送設置cookie: URL url = new URL(requrl); HttpURLConnectioncon= (HttpURLConnection) url.openConnection();
『陸』 Android客戶端訪問Java Web項目,兩種不同的瀏覽器之間交互,用戶的信息如何存儲,session失效如何知道
瀏覽器之間的交互?這是什麼需求?用戶信息你可以存在cookie,不建議,或者存在session,你需要弄清楚他們的區別,session是保存在伺服器上的,你自己看看區別,弄懂原理再來做。求給分
『柒』 android與java web交互問題
客戶端每次請求的時候,都發送一個標記。伺服器端緩存標記,如果與上一次不一樣,停止操作。
『捌』 android與javaweb交互,怎麼記住登錄狀態
用這個:SharedPreference
給個例子吧
import assets.webkit.*;
import android.R.raw;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends Activity {
AutoCompleteTextView cardNumAuto;
EditText passwordET;
Button logBT;
CheckBox savePasswordCB;
SharedPreferences sp;
String cardNumStr;
String passwordStr;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
cardNumAuto = (AutoCompleteTextView) findViewById(R.id.cardNumAuto);
passwordET = (EditText) findViewById(R.id.passwordET);
logBT = (Button) findViewById(R.id.logBT);
sp = this.getSharedPreferences("passwordFile", MODE_PRIVATE);
savePasswordCB = (CheckBox) findViewById(R.id.savePasswordCB);
savePasswordCB.setChecked(true);// 默認為記住密碼
cardNumAuto.setThreshold(1);// 輸入1個字母就開始自動提示
passwordET.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_VARIATION_PASSWORD);
// 隱藏密碼為InputType.TYPE_TEXT_VARIATION_PASSWORD,也就是0x81
// 顯示密碼為InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD,也就是0x91
cardNumAuto.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
String[] allUserName = new String[sp.getAll().size()];// sp.getAll().size()返回的是有多少個鍵值對
allUserName = sp.getAll().keySet().toArray(new String[0]);
// sp.getAll()返回一張hash map
// keySet()得到的是a set of the keys.
// hash map是由key-value組成的
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
LoginActivity.this,
android.R.layout.simple_dropdown_item_1line,
allUserName);
cardNumAuto.setAdapter(adapter);// 設置數據適配器
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
//
}
public void afterTextChanged(Editable s) {
passwordET.setText(sp.getString(cardNumAuto.getText()
.toString(), ""));// 自動輸入密碼
}
});
// 登陸
logBT.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
cardNumStr = cardNumAuto.getText().toString();
passwordStr = passwordET.getText().toString();
boolean islogin = q.isLogin();
if (條件,錯誤條件) {
Toast.makeText(LoginActivity.this, "密碼錯誤,請重新輸入",
Toast.LENGTH_SHORT).show();
} else {
if (savePasswordCB.isChecked()) {// 登陸成功才保存密碼
sp.edit().putString(cardNumStr, passwordStr).commit();
}
Toast.makeText(LoginActivity.this, "登陸成功,正在獲取用戶數據……",
Toast.LENGTH_SHORT).show();
// 跳轉到另一個Activity
Intent intent = new Intent(LoginActivity.this, UIADemoActivity.class);
startActivity(intent);
// do something
}
}catch(Exception ex)
{
System.out.println(ex.toString());
}
}
});
}
}
之前做的一個登陸效果,應該能幫到你,按自己需求稍微改改就能用
效果是:第一次輸入正確的用戶名和密碼後,用戶名和密碼被存儲,然後在以後輸入的時候,當輸入用戶名的第一個字母時開始監聽,有,則在輸入上方提示完整的用戶名,點擊後自動補全用戶名和密碼。。
『玖』 android webview實現java與javascript的交互需要什麼許可權
在android的開發過程中,有很多時候需要用到本地java代碼和javascript進行交互。android對交互進行了很好的封裝,在開發中我們可以很簡單的用java代碼調用webview中的js,也可以用webview中的js來調用本地的java代碼,這樣我們可以實現很多原來做不了的功能,比如點擊網頁上的電話號碼後,手機自動撥打電話,點擊網頁中的笑話,自動發送簡訊等.
『拾』 java web項目怎麼向android項目傳值
可使用Android自帶的httpClient實現Android與java web之間的數據的交互。
具體實現代碼:
1. GET 方式傳遞參數
//先將參數放入List,再對參數進行URL編碼
List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "數據")); //增加參數1
params.add(new BasicNameValuePair("param2", "value2"));//增加參數2
String param = URLEncodedUtils.format(params, "UTF-8");//對參數編碼
String baseUrl = "伺服器介面完整URL";
HttpGet getMethod = new HttpGet(baseUrl + "?" + param);//將URL與參數拼接
HttpClient httpClient = new DefaultHttpClient();
try {
HttpResponse response = httpClient.execute(getMethod); //發起GET請求
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取伺服器響應內容
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
2. POST方式 方式傳遞參數
//和GET方式一樣,先將參數放入List
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));//增加參數1
params.add(new BasicNameValuePair("param2", "第二個參數"));//增加參數2
try {
HttpPost postMethod = new HttpPost(baseUrl);//創建一個post請求
postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數填入POST Entity中
HttpResponse response = httpClient.execute(postMethod); //執行POST方法
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}