android studio中怎么创建web,第1张

在项目根目录下建立一个libraries文件夹,移动你要使用的library project到libraries目录(为什么是移动?本人试过复制到工程,但复制过来的库工程里面的src目录下的代码会丢失) 注意:你的library project一定要保证有自己的buildgradle,如果

jQuery UI是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们可以直接用它来构建具有很好交互性的web应用程序。所有插件测试能兼容IE 60+, Firefox 3+, Safari 31+, Opera 96+, 和GoogleChrome。

目前,前端开发领域类似于有一下几个:

1、jQuery EasyUI

jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。

2、Bootstrap

Bootstrap,来自 Twitter,是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。 它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。 国内一些移动开发者较为熟悉的框架,如WeX5前端开源框架等,也是基于Bootstrap源码进行性能优化而来。

3、Boilerplate

Boilerplate是一个由 Paul Irish(Google Chrome 开发人员、jQuery 项目成员、Modernizr 作者、yayQuery 播客主持人)主导的“前端开发模版”。

HTML5 Boilerplate 是一套具有非常多先进特性的框架,其特性简单介绍如下:

(1)由 Paul Irish 首创的在 HTML 页面的 body 上使用 IE 条件注释判断浏览器版本,从而大大简化了针对 IE Hack 的成本(在后来的版本中升级为在 <html> 标签中加入条件注释) (2)HTML5 集成,默认使用了很多 HTML5 的特性,并且使其兼容旧版本浏览器

(3)大量针对服务器的默认配置,无需修改即可配置一个安全、标准的 web 服务器

(4)完整的 JS 调试机制 —— 即使在 IE 下

(5)大量使用 CSS3 技术,并且集成了几乎所有来自框架中和技术大牛们口头相传的 CSS 技巧

(6)为所有浏览环境做了优化,包括移动版本和打印版本

(7)默认内置 Modernizr,可以检测浏览器对新特性的支持能力,方便针对旧版本浏览器优化

4、 jQuery Mobile

jQuery Mobile是jQuery 在手机上和平板设备上的版本。jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。支持全球主流的移动平台。jQuery Mobile开发团队说:能开发这个项目,我们非常兴奋。移动Web太需要一个跨浏览器的框架,让开发人员开发出真正的移动Web网站。

利用webservice实现

1,注册数据应该保存在服务器端控制的数据库里,

2,服务器可以用。net搭建

也可以用java写

3,eclipse

android开发用

进入到注册界面输入信息后

点击确认按钮

在点击事件里面获取输入的信息,String

username

=

edittextgettext();

存到map键值对里面

根据服务器的ip和对应的方法名发送

服务器端的对应方法记得要发布到IS上

服务器接收到数据后操作数据库

。就OK了,如果哪里不明白可以继续追问。

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 copy print

   

           

     HttpPost httpPost = new HttpPost(url);  

       

          // 将SessionId发给服务器  

     if(null != mSESSIONID){  

        httpPostsetHeader("Cookie", "SESSIONID=" + mSESSIONID);  

    }   

     

     DefaultHttpClient httpClient = new DefaultHttpClient();  

     httpResponse = httpClientexecute(httpPost);  

    if (httpResponsegetStatusLine()getStatusCode() == HttpStatusSC_OK) {  

             HttpEntity entity = httpResponsegetEntity();  

   

         CookieStore mCookieStore = httpClientgetCookieStore();  

        List<Cookie> cookies = mCookieStoregetCookies();  

        //这里是读取指定Cookie 的值  

        for (int i = 0; i < cookiessize(); i++) {   

            if ("SESSIONID"equals(cookiesget(i)getName())) {   

               mSESSIONID = cookiesget(i)getValue();  

               break;  

        }   

          

    }  

}  

       

  HttpPost httpPost = new HttpPost(url);

         // 将SessionId发给服务器

  if(null != mSESSIONID){

httpPostsetHeader("Cookie", "SESSIONID=" + mSESSIONID);

}

 

DefaultHttpClient httpClient = new DefaultHttpClient();

httpResponse = httpClientexecute(httpPost);

if (httpResponsegetStatusLine()getStatusCode() == HttpStatusSC_OK) {

    HttpEntity entity = httpResponsegetEntity();

CookieStore mCookieStore = httpClientgetCookieStore();

  List<Cookie> cookies = mCookieStoregetCookies();

//这里是读取指定Cookie 的值

for (int i = 0; i < cookiessize(); i++) {

if ("SESSIONID"equals(cookiesget(i)getName())) {

    mSESSIONID = cookiesget(i)getValue();

  break;

}

}

}

在程序中保存上面的sessionId ,或用全局变量,或者SharedPreferences 保存,看这个sessionId 的会话时间及程序业务。  

    HttpUrlConnection 获取及发送Session 值:

[java] view plain copy print

HttpURLConnection url_con = null;  

URL url = new URL(reqUrl);  

url_con = (HttpURLConnection) urlopenConnection();  

//设置session  

if (mSESSIONID!= null) {  

    url_consetRequestProperty("Cookie","JSESSIONID="+mSESSIONID);  

    }  

  

String cookieVal =congetHeaderField("Set-Cookie");  

// 获取session      

if (cookieVal != null) {  

        StringmSESSIONID= cookieValsubstring(0, cookieValindexOf(";"));  

}         

HttpURLConnection url_con = null;  

HttpURLConnection url_con = null;

URL url = new URL(reqUrl);

url_con = (HttpURLConnection) urlopenConnection();

//设置session

if (mSESSIONID!= null) {

url_consetRequestProperty("Cookie","JSESSIONID="+mSESSIONID);

}

String cookieVal =congetHeaderField("Set-Cookie");

// 获取session

if (cookieVal != null) {

StringmSESSIONID= cookieValsubstring(0, cookieValindexOf(";"));

}      

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 22版本之前,HttpURLConnection一直存在着一些令人厌烦的bug。比如说对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。那么我们通常的解决办法就是直接禁用掉连接池的功能:

 

        在Android 23版本中还增加了一些HTTPS方面的改进,现在HttpsURLConnection会使用SNI(Server Name Indication)的方式进行连接,使得多个HTTPS主机可以共享同一个IP地址。除此之外,还增加了一些压缩和会话的机制。如果连接失败,它会自动去尝试重新进行连接。这使得HttpsURLConnection可以在不破坏老版本兼容性的前提下,更加高效地连接最新的服务器。

在Android 40版本中,我们又添加了一些响应的缓存机制。当缓存被安装后(调用HttpResponseCache的install()方法),所有的HTTP请求都会满足以下三种情况:

1所有的缓存响应都由本地存储来提供。因为没有必要去发起任务的网络连接请求,所有的响应都可以立刻获取到。

2视情况而定的缓存响应必须要有服务器来进行更新检查。比如说客户端发起了一条类似于 “如果/foopng这张发生了改变,就将它发送给我” 这样的请求,服务器需要将更新后的数据进行返回,或者返回一个304 Not Modified状态。如果请求的内容没有发生,客户端就不会下载任何数据。

3没有缓存的响应都是由服务器直接提供的。这部分响应会在稍后存储到响应缓存中。

由于这个功能是在40之后的版本才有的,通常我们就可以使用反射的方式来启动响应缓存功能。下面的示例代码展示了如何在Android 40及以后的版本中去启用响应缓存的功能,同时还不会影响到之前的版本:

   

[java] view plain copy print

private void enableHttpResponseCache() {    

   try {    

       long httpCacheSize = 10  1024  1024; // 10 MiB    

       File httpCacheDir = new File(getCacheDir(), "http");    

       ClassforName("androidnethttpHttpResponseCache")    

           getMethod("install", Fileclass, longclass)    

           invoke(null, httpCacheDir, httpCacheSize);    

   } catch (Exception httpResponseCacheNotAvailable) {    

   }    

     

private void enableHttpResponseCache() {  

   try {  

       long httpCacheSize = 10 1024 1024; // 10 MiB  

       File httpCacheDir = new File(getCacheDir(), "http");  

       ClassforName("androidnethttpHttpResponseCache")  

           getMethod("install", Fileclass, longclass)  

           invoke(null, httpCacheDir, httpCacheSize);  

   } catch (Exception httpResponseCacheNotAvailable) {  

   }  

}  

     你也应该同时配置一下你的Web服务器,在HTTP响应上加入缓存的消息头。

哪一种才是最好的?

在Android 22版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。

而在Android 23版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用HttpURLConnection。

方法/步骤

1

在eclipse上安装好android开发环境,android调用webservice使用ksoap,本经验使用的是ksoap2-android-assembly-264-jar-with-dependenciesjar

2

AndroidManifestxml中需添加相应的权限,例子:

<xml version="10" encoding="utf-8">  

<manifest xmlns:android="http://schemasandroidcom/apk/res/android"  

    package="comexamplecamera"  

    android:versionCode="1"  

    android:versionName="10" >  

  

    <uses-sdk  

        android:minSdkVersion="8"  

        android:targetSdkVersion="9" />  

  

  <uses-permission android:name="androidpermissionWRITE_EXTERNAL_STORAGE"/>  

  <uses-permission android:name="androidpermissionMOUNT_UNMOUNT_FILESYSTEMS"/>  

    <uses-permission android:name="androidpermissionINTERNET"/>

      

    <application  

        android:allowBackup="true"  

        android:icon="@drawable/ic_launcher"  

        android:label="@string/app_name"  

        android:theme="@style/AppTheme" >  

        <activity  

            android:name="comexamplecameraMainActivity"  

            android:label="@string/app_name" >  

            <intent-filter>  

                <action android:name="androidintentactionMAIN" />  

  

                <category android:name="androidintentcategoryLAUNCHER" />  

            </intent-filter>  

        </activity>  

    </application>  

      

</manifest>

3

activity_mainxml文件代码

<xml version="10" encoding="utf-8">  

<LinearLayout xmlns:android="http://schemasandroidcom/apk/res/android"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    android:orientation="vertical">  

  

    <Button   

        android:id="@+id/button"  

        android:layout_width="fill_parent"  

        android:layout_height="wrap_content"  

        android:text="点击启动相机"/>  

    <Button   

        android:id="@+id/savePic"  

        android:layout_width="fill_parent"  

        android:layout_height="wrap_content"  

        android:text="保存到服务器"/>  

    <TextView   

        android:id="@+id/textView"  

        android:layout_width="fill_parent"  

        android:layout_height="wrap_content"/>  

      

    <ImageView   

        android:id="@+id/imageView"  

        android:layout_width="fill_parent"  

        android:layout_height="fill_parent"  

        android:background="#999999" />  

  

      

</LinearLayout> 

4

MainActivity具体代码

package comexamplecamera;  

  

import javaioByteArrayOutputStream;  

import javaioFile;  

import javaioFileInputStream;  

import javaioFileNotFoundException;  

import javaioFileOutputStream;  

import javaioIOException;  

  

import orgkobjectsbase64Base64;  

import orgksoap2SoapEnvelope;  

import orgksoap2serializationSoapObject;  

import orgksoap2serializationSoapSerializationEnvelope;  

import orgksoap2transportHttpTransportSE;  

  

import androidappActivity;  

import androidcontentIntent;  

import androidgraphicsBitmap;  

import androidosBundle;  

import androidosEnvironment;  

import androidproviderMediaStore;  

import androidutilLog;  

import androidviewView;  

import androidviewViewOnClickListener;  

import androidwidgetButton;  

import androidwidgetImageView;  

import androidwidgetTextView;  

  

public class MainActivity extends Activity {  

    TextView tv = null;  

    String fileName = "/sdcard/myImage/myjpg"; //保存sd地址  

    String namespace = "http://webserviceservicecom";  // 命名空间    

    String url = "http://19216820019:8080/Web/webservices/Portal";  //对应的url  

    String methodName = "uploadImage"; //webservice方法  

      

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

        superonCreate(savedInstanceState);  

        setContentView(Rlayoutactivity_main);  

          

        tv = (TextView)findViewById(RidtextView);  

          

        //启用相机按钮  

        Button button = (Button) findViewById(Ridbutton);  

        buttonsetOnClickListener(new OnClickListener() {  

            @Override  

            public void onClick(View v) {  

                Intent intent = new Intent(MediaStoreACTION_IMAGE_CAPTURE);  

                startActivityForResult(intent, 1);  

            }  

        });  

          

        //保存到服务器按钮(通过webservice实现)  

        Button saveButton = (Button) findViewById(RidsavePic);  

        saveButtonsetOnClickListener(new OnClickListener() {  

            @Override  

            public void onClick(View v) {  

                testUpload();  

            }  

        });  

    }  

  

    / 

      拍照完成后,回掉的方法 

     /  

    @Override  

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  

        superonActivityResult(requestCode, resultCode, data);  

        if (resultCode == ActivityRESULT_OK) {  

            String sdStatus = EnvironmentgetExternalStorageState();  

            if (!sdStatusequals(EnvironmentMEDIA_MOUNTED)) { // 检测sd是否可用  

                Logv("TestFile",  

                "SD card is not avaiable/writeable right now");  

                return;  

            }  

  

            Bundle bundle = datagetExtras();  

            Bitmap bitmap = (Bitmap) bundleget("data");// 获取相机返回的数据,并转换为Bitmap格式  

            FileOutputStream b = null;  

            File file = new File("/sdcard/myImage/");  

            filemkdirs();// 创建文件夹  

            try {  

                b = new FileOutputStream(fileName);  

                bitmapcompress(BitmapCompressFormatJPEG, 100, b);// 把数据写入文件  

            } catch (FileNotFoundException e) {  

                eprintStackTrace();  

            } finally {  

                try {  

                    bflush();  

                    bclose();  

                } catch (IOException e) {  

                    eprintStackTrace();  

                }  

            }  

            ((ImageView) findViewById(RidimageView))setImageBitmap(bitmap);// 将显示在ImageView里  

        }  

    }  

      

    / 

      上传方法 

       

      1把信息通过Base64转换成字符串 

      2调用connectWebService方法实现上传 

     /  

    private void testUpload(){    

        try{      

            FileInputStream fis = new FileInputStream(fileName);    

            ByteArrayOutputStream baos = new ByteArrayOutputStream();    

            byte[] buffer = new byte[1024];    

            int count = 0;    

            while((count = fisread(buffer)) >= 0){    

                baoswrite(buffer, 0, count);    

            }    

            String uploadBuffer = new String(Base64encode(baostoByteArray()));  //进行Base64编码    

            connectWebService(uploadBuffer);     

            Logi("connectWebService", "start");    

            fisclose();    

        }catch(Exception e){    

            eprintStackTrace();    

        }    

    }   

      

    / 

      通过webservice实现上传 

       

      @param imageBuffer 

     /  

    private void connectWebService(String imageBuffer) {    

        //以下就是 调用过程了,不明白的话 请看相关webservice文档       

        SoapObject soapObject = new SoapObject(namespace, methodName);        

        soapObjectaddProperty("filename", "myjpg");  //参数1   名    

        soapObjectaddProperty("image", imageBuffer);   //参数2  字符串    

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(    

                SoapEnvelopeVER11);    

        envelopedotNet = false;    

        envelopesetOutputSoapObject(soapObject);    

        HttpTransportSE httpTranstation = new HttpTransportSE(url);    

        try {    

            httpTranstationcall(namespace, envelope);    

            Object result = envelopegetResponse();    

            Logi("connectWebService", resulttoString());    

            tvsetText(resulttoString());  

        } catch (Exception e) {    

            eprintStackTrace();  

            tvsetText(egetStackTrace()toString());  

        }    

    }    

  

}

5

服务端webservice方法(cxf)

public String uploadImage(String filename, String image) {   

        FileOutputStream fos = null;    

        try{    

            String toDir = "D:\\work\\image";   //存储路径    

            byte[] buffer = new BASE64Decoder()decodeBuffer(image);   //对android传过来的字符串进行解码     

            File destDir = new File(toDir);      

            if(!destDirexists()) {  

                destDirmkdir();    

            }  

            fos = new FileOutputStream(new File(destDir,filename));   //保存    

            foswrite(buffer);    

            fosflush();    

            fosclose();    

            return "上传成功!" + "路径为:" + toDir;    

        }catch (Exception e){    

            eprintStackTrace();    

        }    

        return "上传失败!";    

    }  

操作步骤

(1)点击“点击启动相机”按钮,回到拍照模式下,拍照完成,回到初始界面,显示刚拍的照片

(2)点击“保存照片到服务器”按钮,通过webservice把照片保存到服务器中,TextView显示保存信息。

在elipse中创建一个Web 工程, 重写do get或者do post方法 ,接收android客户端的数据。

这是我写的一个简单的注册的服务器端代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String name = requestgetParameter("name" );

String password = requestgetParameter("password");

Systemoutprintln("用户名:" + name + "||密码:" + password );

//链接数据库

try {

ClassforName("commysqljdbcDriver");

Connection con =(Connection) DriverManager

getConnection("jdbc:mysql://localhost:3306/musicdbuser=root&password=root");

Statement sta = (Statement) concreateStatement();

//注册 插入数据到数据库

PreparedStatement psta = (PreparedStatement)conprepareStatement("insert into usertable values ( , )");

pstasetString(1, name);

pstasetString(2, password);

pstaexecute();

//打印数据库中所有用户名和密码

ResultSet res = (ResultSet) staexecuteQuery("select from usertable");

while(resnext()){

Systemoutprintln("yonghuming :" + resgetString("name"));

Systemoutprintln("pass : " + resgetString("password"));

android 端

private String SERVER_URL = "http://1921681106:8080/Web/servlet/NetServlet";

inname = (EditText) findViewById(Ridaddname);

inpassword = (EditText) findViewById(Ridaddpassword);

add_user = (Button) findViewById(Ridadd_user);

add_usersetOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

String mname = innamegetText()toString();

String mpass = inpasswordgetText()toString();

Map<String, String> userinfo = new HashMap<String, String>();

userinfoput("name", mname);

userinfoput("password", mpass);

try {

register(SERVER_URL, userinfo);

} catch (Exception e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

});

//通过URL拼接的 用户名和密码 发送给服务端

private void register(String SERVER_URL, Map<String, String> param)

throws Exception {

StringBuilder sb = new StringBuilder(SERVER_URL);

sbappend("");

for (MapEntry<String, String> entry : paramentrySet()) {

sbappend(entrygetKey())append("=")append(entrygetValue())

append("&");

}

sbdeleteCharAt(sblength() - 1);

String newurl = sbtoString();

URL url = new URL(newurl);

HttpURLConnection conn = (HttpURLConnection) urlopenConnection();

connsetRequestMethod("GET");

connsetConnectTimeout(5000);

if (conngetResponseCode() == 200) {

ToastmakeText(MainActivitythis, "连接成功", 1)show();

}

}

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » android studio中怎么创建web

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情