當前位置:首頁 » 安卓系統 » android轉web

android轉web

發布時間: 2023-02-05 23:59:38

㈠ android中點擊button,跳轉到webview中打開。求大神解答

<activity
android:name="XXXX"
>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
</intent-filter>
</activity>

㈡ android屏幕旋轉,webview重新載入

  1. 在create時候加個狀態判斷

protected void onCreate(Bundle savedInstanceState){

...

if (savedInstanceState == null)

{

mWebView.loadUrl("your_url");

}

...

}


2. 重載保存狀態的函數:

@Override

protected void onSaveInstanceState(Bundle outState )

{

super.onSaveInstanceState(outState);

mWebView.saveState(outState);

}

@Override

protected void onRestoreInstanceState(Bundle savedInstanceState)

{

super.onRestoreInstanceState(savedInstanceState);

mWebView.restoreState(savedInstanceState);

}

㈢ android web端怎麼使用

須在主線程中開啟一個線程,並且使用Handler這個對象來實現數據的非同步請求.然後當請求響應完成之後才會在界面中更新數據,這應該就是android中的非同步請求機制吧..下面是整個伺服器端以及客戶端的代碼.首先我伺服器端是通過struts來完成的.所以關於struts的jar包以及Json包所依賴的jar包都要導入到web程序中去.以下是伺服器端的包圖

web.xml文件中要配置過濾器,我是把所有請求都通過struts中的action進行處理的,所以下面是web.xml中的代碼

[html] view plain print?在CODE上查看代碼片派生到我的代碼片
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>YltxServer</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 定義Struts2的核心控制器:FilterDispatcher -->
<filter>
<!-- 定義核心Filter的名稱 -->
<filter-name>struts2</filter-name>
<!-- 定義Filter的實現類 -->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

同時按照struts中的規則,創建一個struts.xml文件,並注冊自己寫的action
[java] view plain print?在CODE上查看代碼片派生到我的代碼片
package com.maylor.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements ServletRequestAware,
ServletResponseAware {
/**
*
*/
private static final long serialVersionUID = 1L;
private HttpServletRequest request;
private HttpServletResponse response;

public void login() {
try {
// HttpServletRequest request =ServletActionContext.getRequest();
// HttpServletResponse response=ServletActionContext.getResponse();
this.response.setContentType("text/html;charset=utf-8");
this.response.setCharacterEncoding("UTF-8");
// 將要返回的實體對象進行json處理
// JSONObject json=JSONObject.fromObject(this.getUsername());
// 輸出格式如:{"id":1, "username":"zhangsan", "pwd":"123"}
// System.out.println(json);

// this.response.getWriter().write(json.toString());

JSONObject json = new JSONObject();
json.put("username", "username");
json.put("password", "password");
JSONObject json1 = new JSONObject();
json1.put("phone", "phone");
json1.put("tel", "tel");
JSONArray array = new JSONArray();
array.add(json);
array.add(json1);
byte[] jsonBytes = array.toString().getBytes("utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);

/**
* JSONObject json=new JSONObject(); json.put("login", "login");
* byte[] jsonBytes = json.toString().getBytes("utf-8");
* response.setContentType("text/html;charset=utf-8");
* response.setContentLength(jsonBytes.length);
* response.getOutputStream().write(jsonBytes);
* response.getOutputStream().flush();
* response.getOutputStream().close();
**/

} catch (Exception e) {
e.printStackTrace();
}
// return null;
}

@Override
public void setServletResponse(HttpServletResponse arg0) {
// TODO Auto-generated method stub
this.response = arg0;
}

@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
this.request = arg0;
}
}
然後就是客戶端的請求了.
下面是android客戶端的代碼,記住要在AndroidMainifest.xml中加入Internet訪問許可權

<uses-permission android:name="android.permission.INTERNET">

</uses-permission>
下面就是客戶端的代碼部分了.

[java] view plain print?在CODE上查看代碼片派生到我的代碼片
package com.maylor.demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {
private static String URL = "http://192.168.2.52:8080/YltxServer/login";
public Handler mHandler;

@SuppressLint("HandlerLeak")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getPDAServerData();
// Button button = (Button) findViewById(R.id.button1);
// button.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View arg0) {
// // TODO Auto-generated method stub
// Intent intent = new Intent(MainActivity.this,
// PoiSearchActivity.class);
// startActivity(intent);
// }
// });
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1000) {
TextView view = (TextView) findViewById(R.id.textview);
String str = "";
try {
JSONArray array = new JSONArray(msg.obj.toString());
JSONObject object = array.getJSONObject(0);
str = object.getString("username");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("wangchao", str);
view.setText(str);
}
}
};
}

/**
* 請求服務
*
* @param url
*/
private void getPDAServerData() {
new Thread() {
public void run() {
HttpClient client = new DefaultHttpClient();
HttpGet request;
String msg = "";
try {
request = new HttpGet(URL);
HttpResponse response = client.execute(request);
// 判斷請求是否成功
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream in = entity.getContent();

BufferedReader buff = new BufferedReader(
new InputStreamReader(in));
String line = "";
while ((line = buff.readLine()) != null) {
msg += line;
}
Message msg1 = mHandler.obtainMessage();
msg1.what = 1000;
msg1.obj = msg;
mHandler.sendMessage(msg1);
}
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}

@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;
}
}
這個服務就算是全部完成了..整個工程

㈣ android 跳轉webview怎麼調

代碼如下:
[java] view plain
private WebView webview;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//實例化WebView對象
webview = new WebView(this);
//設置WebView屬性,能夠執行Javascript腳本
webview.getSettings().setJavaScriptEnabled(true);
//載入需要顯示的網頁
webview.loadUrl("file:///android_asset/www/test.html");

㈤ Android通過POST向Web傳遞數字用什麼存儲

數字轉成字元串,toString()

在web端根據key再轉換成數字

㈥ Android客戶端怎樣訪問服務WEB端

HttpClient 與 HttpURLConnection 共用SessionId

下面給出訪問伺服器的截圖,向後滑動有http協議那一章,裡面與源碼,例子來自android學習手冊,裡面有源碼。android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼:

HttpClient 與 HttpUrlConnection 是Android 中HTTP操作最常見的訪問方式。在一個應用程序中有時候會用到這兩種方式,如何能讓他們共用Cookie,讓客戶端訪問伺服器保持Session進行通信。

針對httpClient 和HttpUrlConnection 獲取和發送Cookie,主要是sessionID的共享。

httpClient獲取及發送Session 值:

[java] view plain print?

HttpPosthttpPost=newHttpPost(url);

//將SessionId發給伺服器

if(null!=mSESSIONID){

httpPost.setHeader("Cookie","SESSIONID="+mSESSIONID);

}

DefaultHttpClienthttpClient=newDefaultHttpClient();

httpResponse=httpClient.execute(httpPost);

if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

HttpEntityentity=httpResponse.getEntity();

CookieStoremCookieStore=httpClient.getCookieStore();

List<Cookie>cookies=mCookieStore.getCookies();

//這里是讀取指定Cookie的值

for(inti=0;i<cookies.size();i++){

if("SESSIONID".equals(cookies.get(i).getName())){

mSESSIONID=cookies.get(i).getValue();

break;

}

}

}



HttpPost httpPost = new HttpPost(url);

// 將SessionId發給伺服器
if(null != mSESSIONID){
httpPost.setHeader("Cookie", "SESSIONID=" + mSESSIONID);
}

DefaultHttpClient httpClient = new DefaultHttpClient();
httpResponse = httpClient.execute(httpPost);
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = httpResponse.getEntity();

CookieStore mCookieStore = httpClient.getCookieStore();
List<Cookie> cookies = mCookieStore.getCookies();
//這里是讀取指定Cookie 的值
for (int i = 0; i < cookies.size(); i++) {
if ("SESSIONID".equals(cookies.get(i).getName())) {
mSESSIONID = cookies.get(i).getValue();
break;
}

}
}

在程序中保存上面的sessionId ,或用全局變數,或者SharedPreferences 保存,看這個sessionId 的會話時間及程序業務。

HttpUrlConnection獲取及發送Session 值:

[java] view plain print?

HttpURLConnectionurl_con=null;

URLurl=newURL(reqUrl);

url_con=(HttpURLConnection)url.openConnection();

//設置session

if(mSESSIONID!=null){

url_con.setRequestProperty("Cookie","JSESSIONID="+mSESSIONID);

}

...

StringcookieVal=con.getHeaderField("Set-Cookie");

//獲取session

if(cookieVal!=null){

StringmSESSIONID=cookieVal.substring(0,cookieVal.indexOf(";"));

}

HttpURLConnectionurl_con=null;

HttpURLConnection url_con = null;
URL url = new URL(reqUrl);
url_con = (HttpURLConnection) url.openConnection();
//設置session
if (mSESSIONID!= null) {
url_con.setRequestProperty("Cookie","JSESSIONID="+mSESSIONID);
}
...
String cookieVal =con.getHeaderField("Set-Cookie");
// 獲取session
if (cookieVal != null) {
StringmSESSIONID= cookieVal.substring(0, cookieVal.indexOf(";"));
}
HttpURLConnection url_con = null;

HttpURLConnection和HttpClient比較(Android):

HttpURLConnection和HttpClient 都支持HTTPS協議、IPv6、以流的形式進行上傳和下載、配置超時時間、以及連接池等功能。

DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具體的實現類,它們都擁有眾多的API,而且實現比較穩定,bug數量也很少。但同時也由於HttpClient的API數量過多,使得我們很難在不破壞兼容性的情況下對它進行升級和擴展,所以目前Android團隊在提升和優化HttpClient方面的工作態度並不積極。



HttpURLConnection是一種多用途、輕量極的HTTP客戶端,使用它來進行HTTP操作可以適用於大多數的應用程序。雖然HttpURLConnection的API提供的比較簡單,但是同時這也使得我們可以更加容易地去使用和擴展它。不過在Android 2.2版本之前,HttpURLConnection一直存在著一些令人厭煩的bug。比如說對一個可讀的InputStream調用close()方法時,就有可能會導致連接池失效了。那麼我們通常的解決辦法就是直接禁用掉連接池的功能:

在Android 2.3版本中還增加了一些HTTPS方面的改進,現在HttpsURLConnection會使用SNI(Server Name Indication)的方式進行連接,使得多個HTTPS主機可以共享同一個IP地址。除此之外,還增加了一些壓縮和會話的機制。如果連接失敗,它會自動去嘗試重新進行連接。這使得HttpsURLConnection可以在不破壞老版本兼容性的前提下,更加高效地連接最新的伺服器。


在Android 4.0版本中,我們又添加了一些響應的緩存機制。當緩存被安裝後(調用HttpResponseCache的install()方法),所有的HTTP請求都會滿足以下三種情況:

1.所有的緩存響應都由本地存儲來提供。因為沒有必要去發起任務的網路連接請求,所有的響應都可以立刻獲取到。
2.視情況而定的緩存響應必須要有伺服器來進行更新檢查。比如說客戶端發起了一條類似於 「如果/foo.png這張圖片發生了改變,就將它發送給我」 這樣的請求,伺服器需要將更新後的數據進行返回,或者返回一個304 Not Modified狀態。如果請求的內容沒有發生,客戶端就不會下載任何數據。
3.沒有緩存的響應都是由伺服器直接提供的。這部分響應會在稍後存儲到響應緩存中。


由於這個功能是在4.0之後的版本才有的,通常我們就可以使用反射的方式來啟動響應緩存功能。下面的示例代碼展示了如何在Android 4.0及以後的版本中去啟用響應緩存的功能,同時還不會影響到之前的版本:

[java] view plain print?

(){

try{

longhttpCacheSize=10*1024*1024;//10MiB

FilehttpCacheDir=newFile(getCacheDir(),"http");

Class.forName("android.net.http.HttpResponseCache")

.getMethod("install",File.class,long.class)

.invoke(null,httpCacheDir,httpCacheSize);

}catch(){

}

private void enableHttpResponseCache() {
try {
long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
File httpCacheDir = new File(getCacheDir(), "http");
Class.forName("android.net.http.HttpResponseCache")
.getMethod("install", File.class, long.class)
.invoke(null, httpCacheDir, httpCacheSize);
} catch (Exception httpResponseCacheNotAvailable) {
}
}

你也應該同時配置一下你的Web伺服器,在HTTP響應上加入緩存的消息頭。


哪一種才是最好的?


在Android 2.2版本之前,HttpClient擁有較少的bug,因此使用它是最好的選擇。
而在Android 2.3版本及以後,HttpURLConnection則是最佳的選擇。它的API簡單,體積較小,因而非常適用於Android項目。壓縮和緩存機制可以有效地減少網路訪問的流量,在提升速度和省電方面也起到了較大的作用。對於新的應用程序應該更加偏向於使用HttpURLConnection。

㈦ 怎樣實現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() 函數就可以了。不過這個函數的速度並不快,轉化的字元串如果很多,將會很耗費時間。

熱點內容
把文件編譯成數據 發布:2025-07-15 11:53:16 瀏覽:541
mt4如何修改密碼 發布:2025-07-15 11:53:16 瀏覽:214
2021思域新款買哪個配置 發布:2025-07-15 11:33:24 瀏覽:772
路由搭建http伺服器 發布:2025-07-15 11:26:45 瀏覽:724
消遣解壓 發布:2025-07-15 11:26:43 瀏覽:393
ICL編譯 發布:2025-07-15 11:26:32 瀏覽:665
快看吧交易密碼多少 發布:2025-07-15 11:26:26 瀏覽:482
星途買哪個配置啊 發布:2025-07-15 11:14:35 瀏覽:522
蘋果手機刪除緩存文件 發布:2025-07-15 11:08:01 瀏覽:958
安卓手機桌面變大軟體怎麼恢復 發布:2025-07-15 11:07:47 瀏覽:606