发布新日志

  • Android中调用webservice

    2013-04-06 20:17:33

    调用 WebService 分以下几步:

      1、指定 WebService 的命名空间和调用方法;

      2、设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:
      rpc.addProperty("abc", "test");

      要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。

      3、生成调用Webservice方法的SOAP请求信息。
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
      envelope.bodyOut = rpc;
      envelope.dotNet = false; //这里如果设置为TRUE,那么在服务器端将获取不到参数值(如:将这些数据插入到数据库中的话)
      envelope.setOutputSoapObject(rpc);
      创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。
      该版本号需要根据服务端WebService的版本号设置。
      在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性, 该属性的值就是在第一步创建的SoapObject对象。

      4、创建HttpTransportsSE对象。
      这里不要使用 AndroidHttpTransport ht = new AndroidHttpTransport(URL); 这是一个要过期的类
      private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx";
      HttpTransportSE ht = new HttpTransportSE(URL);
      ht.debug = true;

      5、使用call方法调用WebService方法
      private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName";
      ht.call(SOAP_ACTION, envelope);

      6、获得WebService方法的返回结果
      有两种方法:
      (1)、使用getResponse方法获得返回数据。
      (2)、使用 bodyIn 及 getProperty。

      7、 这时候执行会出错,提示没有权限访问网络
      需要修改 AndroidManifest.xml 文件,赋予相应权限
      简单来说就是增加下面这行配置:<uses-permission android:name="android.permission.INTERNET"></uses-permission>

  • Android 标题 居中 .

    2013-03-16 21:29:06

    1在onCreate()方法中加上这三句话:

     
     但加之前必须包括:
    import android.view.Window;
    import android.view.WindowManager;
    1. requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);  
    2. setContentView(R.layout.main);  
    3. getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.title);  
    在布局文件中新建一个title.xml文件:

    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="wrap_content"  
    4.  android:layout_height="wrap_content"  
    5.  android:layout_gravity="center">  
    6.         <TextView android:id="@+id/textTile"  
    7.         android:layout_width="wrap_content"  
    8.         android:layout_height="wrap_content"  
    9.         android:text="title" />  
    10. </LinearLayout>  


    注:另外设置字体大小、颜色等在title文件的textTitle中设置


    效果如下图:



  • Android入门 — 模拟器的创建和运行

    2013-03-15 16:34:14

        我们创建了android的工程,接下来有一个问题了,我们该怎么运行创建的程序呢?所以我们需要一个android的模拟器。配置环境的时候我们安装了android的SDK,在eclipse->window下有一个AVD(Android Virtual Device) Manager,点击New…按钮新建一个模拟器,主要要填的有Name,Target,SD Card Size(建议1GB以上,为以后在SD卡中放各种测试文件做准备),填好以后就可以Create AVD了。由于需要建立和SD Card Size一样大小的映像文件,所以创建的size越大所耗费的时间也就越多,不要着急哦。

     

    创建完模拟器后可以直接在AVDManager中选中刚刚创建的模拟器,点击start…就可以启动模拟器了。模拟器的启动也需要4-5分钟的时间。

     

    当然模拟器也可以在启动程序的时候由eclipse自动启动。

    在工程上点击右键,右键菜单中有Debug As/RunAs->Android application;或者选中工程后,run菜单栏中也有同样的菜单项。如果当前模拟器没有启动时,就会先自动启动模拟器。当然前提条件是工程没有错误。

     

    有时候创建出来的模拟器启动后会莫名其妙的异常,可能有效的方法是:

    1、  删除当前模拟器重新创建

    2、  新建的模拟器异常可以加大SDcard Size的大小

    3、  创建模拟器时EnabledSnapshot,该功能会在模拟器关闭时保存当时状态,启动时会自动加载上次的状态

    4、  删掉模拟器镜像路径*\.android下的avd文件夹

    5、  删掉*\.android下的modem-nv-ram*文件



     

  • Android入门 — 新建工程及结构认识

    2013-03-15 16:30:38

    许是因为在大学第一个写的程序就是HelloWorld,以后每次学一个新的东西,总是没有出息的先建一个HelloWorld的程序。也是,任何东西新出来,都需要和这个世界打个招呼吧,hello,world!大笑

    言归正传,开始和这世界打个招呼吧。

    1、新建一个Android的工程

    如果开发环境配置正确,在New的菜单中就会出现AndroidProject,就可以新建工程了。


    我们在工程名称处写入HelloWorld,选择 Createnew project in workspace,点击Next,选择SDK后继续Next,出现输入包名的界面:


    第一次看到这个界面真是犯愁啊,“your.package.namespace”,以前写C++的代码从来没有过包的概念,到底写什么好呢?踌躇了一会,以cs.demo.firstcode为包名,反正都是demo程序,哈哈。

    2、工程结构认识

    src是工程的代码文件夹,代码文件都放在此文件夹下。cs.demo.firstcode是刚刚建的包,下面是自动创建的HelloWorldActivity.java的代码文件;

    gen文件夹下的R.java自动生成的文件,里面记录了程序中用到的各种ID,不要手动修改。当res文件夹下的内容发生变化时,这个R.java文件会自动改变。这个与MFC中的resource.h文件类似。

    assets文件夹主要用来存放一些多媒体数据文件,不会被改变

    res文件夹存放的是资源相关的文件:

    res/drawable*:存放图片文件

    res/layout:存放xml的布局文件。写了近三年的自绘界面的代码,看到这个类似MFC的可以拖拽界面元素的功能,着实让我高兴了一下。

    res/values:存放字符串,颜色,数组等常量数据,常用的字符串存放在string.xml文件里,在程序中各处就可以使用ID实现字符串共享了。

    AndroidManifest.xml:应用的配置文件,声明activity和权限的地方。


    题外话:建立工程的其他方式

    为什么要写这个呢?我第一次拿到别人提供的工程时,根本就不知道从哪里下手。还是因为VC的思维模式,我在文件夹中找不到工程文件时,就很迷茫了。

    一看.project文件还恍然以为找到了入口,不成功又把每个根目录下的文件每个打开了一遍,现在想来真是太可乐了。所以写下简单的创建工程的方式:

    1)File->New->Androidproject->Create project from existing source:只需要选择工程所在文件夹就可以了,其他选项都会有默认的设置。

    2)File->New->Androidproject->Create project from existing sample:android自带了各种示例程序,选择某个示例程序后,会创建对应的工程

    3)File->Import->General->ExistingProjects into Workspace,然后选择文件夹所在的根目录,就可以导入工程了。


  • Android学习之通过Intent实现浏览网页

    2013-03-15 16:21:23

    大家好,在这里和大家分享我刚刚学到的知识:通过Intent打开网页

     

    首先,打开布局文件中main.xml,创建为LinearLayout布局,并且创建一个EditText和Button控件。具体代码如下:

     

    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="horizontal"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     >  
    7. <EditText  
    8.     android:id = "@+id/editText"  
    9.     android:layout_width="wrap_content"  
    10.     android:layout_height="wrap_content"  
    11.     android:layout_weight="1.0"  
    12.     android:lines="1"  
    13.     />  
    14. <Button  
    15.     android:id = "@+id/button1"  
    16.     android:layout_width="wrap_content"  
    17.     android:layout_height="wrap_content"  
    18.     android:text = "go"  
    19.     />  
    20. </LinearLayout>  
     

     

    效果如图:

     

     

     

     

    1. package org.exmaple.MyBrowserIntent;  
    2. import android.app.Activity;  
    3. import android.content.Intent;  
    4. import android.net.Uri;  
    5. import android.os.Bundle;  
    6. import android.view.KeyEvent;  
    7. import android.view.View;  
    8. import android.view.View.OnClickListener;  
    9. import android.view.View.OnKeyListener;  
    10. import android.widget.Button;  
    11. import android.widget.EditText;  
    12. public class MyBrowserIntent extends Activity {  
    13.       
    14.     private EditText editText;  
    15.     private Button goButton;  
    16.       
    17.     /** Called when the activity is first created. */  
    18.     @Override  
    19.     public void onCreate(Bundle savedInstanceState) {  
    20.         super.onCreate(savedInstanceState);  
    21.         setContentView(R.layout.main);  
    22.            
    23.         editText = (EditText) findViewById(R.id.editText);  
    24.         goButton   = (Button) findViewById(R.id.button1);  
    25.           
    26.         editText.setOnKeyListener(new OnKeyListener() {       
    27.             //按钮键盘点击事件   
    28.             @Override  
    29.             public boolean onKey(View arg0, int arg1, KeyEvent arg2) {  
    30.                 // TODO Auto-generated method stub   
    31.                 if(arg1 == KeyEvent.KEYCODE_ENTER) {    
    32.                     //用户按了Enter则调用openBrowser()方法   
    33.                     openBrowser();  
    34.                     return true;  
    35.                 }  
    36.                 return false;  
    37.             }  
    38.               
    39.         });  
    40.         goButton.setOnClickListener(new OnClickListener(){  //按钮绑定点击事件   
    41.             @Override  
    42.             public void onClick(View v) {  
    43.                 // TODO Auto-generated method stub   
    44.                 openBrowser();  
    45.             }  
    46.         });  
    47.     }  
    48.     protected void openBrowser() {  
    49.         // TODO Auto-generated method stub   
    50.         Uri uri = Uri.parse("http://"+editText.getText().toString());   
    51.         //通过Uri获得编辑框里的//地址,加上http://是为了用户输入时可以不要输入   
    52.         Intent intent = new Intent(Intent.ACTION_VIEW,uri);    
    53.         //建立Intent对象,传入uri   
    54.         startActivity(intent);    
    55.         //启动   
    56.     }  
    57. }  

     

    到这里就一切OK啦!

     

    哈哈!看下效果图:

    输入www.google.com

     

    还请大家多多关注我的博客,我会和大家分享我的学习成果的!

     

  • Android学习之利用WebView打开网页

    2013-03-15 16:19:48

    大家好,今天我们一起学习通过webView打开网页:

    首先还是布局文件main.xml的Code:

     

    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="vertical"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     >  
    7.         <LinearLayout   
    8.             android:orientation="horizontal"  
    9.         android:layout_width="fill_parent"  
    10.         android:layout_height="wrap_content"  
    11.         >  
    12.         <EditText  
    13.                 android:id="@+id/editText"  
    14.             android:layout_width="fill_parent"  
    15.             android:layout_height="wrap_content"  
    16.             android:layout_weight="1.0"  
    17.             android:lines="1"  
    18.             />  
    19.          <Button  
    20.             android:id="@+id/button"  
    21.             android:layout_width="wrap_content"  
    22.             android:layout_height="wrap_content"  
    23.             android:text="go"  
    24.             />  
    25.          </LinearLayout>  
    26.           <WebView  
    27.             android:id="@+id/webView"  
    28.             android:layout_width="fill_parent"  
    29.             android:layout_height="wrap_content"  
    30.             android:layout_weight="1.0"  
    31.             />  
    32. </LinearLayout>  

     

    利用两个LineraLayout的嵌套显示,上面显示一个编辑框和按钮,下面的是webView用来显示网页,大家要注意两个LineraLayout的android:orientation的属性,最外面的这个是垂直显示,里面的是水平显示,最终得到效果如图:

     

    效果图下面的白色区域就是webView,等Java的Code完成后就能看出效果啦,期待吧!呵呵!

     

    1. import android.app.Activity;  
    2. import android.widget.*;  
    3. import android.os.Bundle;  
    4. import android.webkit.*;  
    5. import android.view.KeyEvent;  
    6. import android.view.View;  
    7. import android.view.View.*;  
    8. public class MyBrowserView extends Activity {  
    9.       
    10.     private EditText editText;  
    11.     private Button   button;  
    12.     private WebView  webView;  
    13.       
    14.     /** Called when the activity is first created. */  
    15.     @Override  
    16.     public void onCreate(Bundle savedInstanceState) {  
    17.         super.onCreate(savedInstanceState);  
    18.         setContentView(R.layout.main);  
    19.           
    20.         editText = (EditText) findViewById(R.id.editText);  
    21.         button   = (Button)   findViewById(R.id.button);  
    22.         webView  = (WebView)  findViewById(R.id.webView);  
    23.           
    24.         button.setOnClickListener(new OnClickListener() {  
    25.             //同样为按钮绑定点击事件   
    26.             public void onClick(View v) {  
    27.                 openBrowser();  
    28.             }  
    29.         });  
    30.           
    31.         editText.setOnKeyListener(new OnKeyListener() {  
    32.             //同样为编辑框绑定键盘事件   
    33.             @Override  
    34.             public boolean onKey(View v, int keyCode, KeyEvent event) {  
    35.                 // TODO Auto-generated method stub   
    36.                 if(keyCode==KeyEvent.KEYCODE_ENTER) {  
    37.                     openBrowser();  
    38.                     return true;  
    39.                 }  
    40.                 return false;  
    41.             }  
    42.         });  
    43.     }  
    44.     //利用webView的loadUrl方法   
    45.     public void openBrowser() {  
    46.         webView.loadUrl("http://"+editText.getText().toString());  
    47.     }  
    48. }  

     

    除了openBrowser()方法,其他的和用Intent打开网页是差不多的。

    只要利用webView的loadUrl()方法就能加载网页。好的什么也不说啦!看效果图:

     

     

     

     

    哈哈,不错吧,这样就方便打开别的网页啦!哦!差点忘了,要在AndroidManifest.xml中加入

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

    否则就不能访问Internet哟!

    到这里看了上一篇的同学可能就问,为什么上个例子不要加上这条语句呢?

    因为通过Intent就能请求其他应用程序查看网页,而其他应用程序需要在自己的AndroidManifest.xml中请求获得访问Internet的权限。

    不知道解释的清楚不?呵呵!

    好了今天的就到这里了哟!祝大家一起进步!加油!

  • android中两种方式打开网页(

    2013-03-15 16:15:06

    一.你要打开一个网页你可以自己写一个webview,在自己的程序中就可以打开.
    wv = (WebView) findViewById(R.id.webView1);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.setScrollBarStyle(0);
    WebSettings webSettings = wv.getSettings();
    webSettings.setAllowFileAccess(true);
    webSettings.setBuiltInZoomControls(true);
    wv.loadUrl("http://www.baidu.com");
    //加载数据
    wv.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
    if (newProgress == 100) {
    MainActivity.this.setTitle("加载完成");
    } else {
    MainActivity.this.setTitle("加载中.......");

    }
    }
    });
    //这个是当网页上的连接被点击的时候
    wv.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(final WebView view,
    final String url) {
    loadurl(view, url);
    return true;
    }
    });
     // goBack()表示返回webView的上一页面
    public boolean onKeyDown(int keyCoder, KeyEvent event) {
    if (wv.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK) {
    wv.goBack();
    return true;
    }
    return false;
    }
    二.不然你就调用android内置安装的浏览器来打开网页.
       1. Uri uri Uri.parse("http://google.com");  
       2. Intent it new Intent(Intent.ACTION_VIEW, uri);  
       3. startActivity(it);
Open Toolbar