当前位置:  编程技术>移动开发
本页文章导读:
    ▪模拟器开启异常        模拟器开启错误 报错内容见截图。在手机上运行没问题。package com.david.html; import java.util.List; import org.json.JSONArray; import org.json.JSONObject; import com.david.domain.Contact; import com.david.service.ContactS.........
    ▪ 内部类懂得【转】        内部类理解【转】 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。内部类又分为:常规内部类、局部内部类、匿名内部类和静态嵌套类四种。我们内部类的知识在Androi.........
    ▪ Galaxy tab试工       Galaxy tab试用 最近试用了一下三星的Galaxy Tab,7寸的,比iPad小了个个儿。比较郁闷的是,安装不了android market。网上的说法是要么重新刷机,要么更改出厂地。结果只好放弃了,使用豌豆荚.........

[1]模拟器开启异常
    来源: 互联网  发布时间: 2014-02-18
模拟器开启错误
报错内容见截图。在手机上运行没问题。
package com.david.html;

import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import com.david.domain.Contact;
import com.david.service.ContactService;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;

public class MainActivity extends Activity {
	private static final String TAG = "MainActivity";
	private WebView webView;
	private ContactService service;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        service = new ContactService();
        webView = (WebView)findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);//打开脚本功能
        webView.addJavascriptInterface(new ContactPlugin(), "david");//创建js插件
//        webView.loadUrl("file:///android_asset/index.html");//加载给定路径的web  
        webView.loadUrl("http://192.168.101.160:8080/videoWeb/index.html");
    }
    /**
     * 定义js插件
     * @author davidhuang
     *
     */
    private class ContactPlugin
    {
    	public void getContacts() {
    		List<Contact> contacts = service.getContacts();//获取联系人数据    		
    		try {
    			JSONArray jsonArray = new JSONArray();
				for (int i = 0; i < contacts.size(); i++) {
					Contact contact = contacts.get(i);
					JSONObject jsonObject = new JSONObject();
					jsonObject.put("id", contact.getId());
					jsonObject.put("name", contact.getName().toString());
					jsonObject.put("mobile", contact.getMobile());
					jsonArray.put(jsonObject);
				}
				String jsonString = jsonArray.toString();//转换为json字符串
				System.out.println(jsonString);
				webView.loadUrl("javascript:show('"+jsonString+"')");
			} catch (Exception e) {
				Log.e(TAG, e.toString());
			}
		}
    	
    	public void call(String mobile)
    	{
    		Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + mobile));
    		startActivity(intent);
    	}
    }
}

    
[2] 内部类懂得【转】
    来源: 互联网  发布时间: 2014-02-18
内部类理解【转】

Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。内部类又分为:常规内部类、局部内部类、匿名内部类和静态嵌套类四种。我们内部类的知识在Android手机开发中经常用到。

一、常规内部类

所谓常规内部类,或者说内部类,指的就是除去后面三种之外的内部类(这算什么解释。。。)

先写一个最简单的内部类的例子,大家感觉一下:

view sourceprint?
1 public class Outer {
2     public class Inner{
3     }
4 }

编译一下,我们看到目录中出现了两个class文件,其中有一个文件名叫做Outer$Inner.class,带了一个$符号,这个特点让我们很容易的认出来这是内部类编译后的class文件。

再写一个稍微复杂一点的内部类:

view sourceprint?
01 public class Outer {   
02  
03     private int x=1;
04  
05     public Outer(){
06         System.out.println("Outer initial");
07     }
08  
09     public class Inner{
10  
11         public Inner(){
12             System.out.println("Inner initial");
13         }
14  
15         private int x=2;
16  
17         public  void add(){
18             int x=3;
19             System.out.println(x);
20             System.out.println(this.x);
21             System.out.println(Outer.this.x);
22         }
23  
24     }
25  
26     public static void main(String[] args){
27         Inner inner = new Outer().new Inner();
28         inner.add();
29     }
30 }

我们编译以后,运行一下看看:

 

在上面的例子里我们可以清晰的看到:

  • 内部类就像一个实例成员一样存在于外部类中。
  • 内部类可以访问外部类的所有成员就想访问自己的成员一样没有限制。
  • 内部类中的this指的是内部类的实例对象本身,如果要用外部类的实例对象就可以用类名.this的方式获得。
  • 内部类对象中不能有静态成员,原因很简单,内部类的实例对象是外部类实例对象的一个成员。
  • 下面我们再小结一下内部类的创建方法:

  • 在外部类的内部,可以用 Inner inner = new Inner(); 方法直接创建
  • 在外部类外部,必须先创建外部类实例,然后再创建内部类实例,除了上面 Inner inner = new Outer().new Inner()的写法以外,还有 Outer outer = new Outer(); Inner inner = outer.new Inner();的写法
  •  

    二、局部内部类

    我们也可以把类定义在方法内部,这时候我们称这个类叫局部内部类。

    我们再看一个例子:

    view sourceprint?
    01 public class Outer {
    02  
    03     int x =1;
    04     public void doSomething(){
    05         final int y=2;
    06         class Inner{
    07             int x =3;
    08             void print(){
    09                 int x=4;
    10                 System.out.println(x);
    11                 System.out.println(this.x);
    12                 System.out.println(Outer.this.x);
    13                 System.out.println(y);
    14             }
    15         }
    16         Inner inner = new Inner();
    17         inner.print();
    18     }
    19  
    20     public static void main(String[] args){
    21         Outer outer = new Outer();
    22         outer.doSomething();
    23     }
    24 }

    运行程序,查看结果:

    我们通过上面这里例子也可以看到下面几点:

  • 局部内部类的地位和方法内的局部变量的位置类似,因此不能修饰局部变量的修饰符也不能修饰局部内部类,譬如public、private、protected、static、transient等
  • 局部内部类只能在声明的方法内是可见的,因此定义局部内部类之后,想用的话就要在方法内直接实例化,记住这里顺序不能反了,一定是要先声明后使用,否则编译器会说找不到。
  • 局部内部类不能访问定义它的方法内的局部变量,除非这个变量被定义为final 。
  • 是不是有点不好理解?关于为什么用final修饰以后就可以用了,我打算专门在番外篇里专门写一篇博客给你讲清楚,先记住吧。

    三、匿名内部类

    当我们把内部类的定义和声明写到一起时,就不用给这个类起个类名而是直接使用了,这种形式的内部类根本就没有类名,因此我们叫它匿名内部类。

    我们再看一个有趣的例子:

    view sourceprint?
    01 public class Dog {
    02  
    03     public interface Pet {
    04  
    05         public void beFriendly();
    06         public void play();
    07  
    08     }
    09  
    10     public static void main(String[] args){
    11  
    12         Pet dog = new Pet(){
    13             @Override
    14             public void beFriendly() {
    15                 System.out.println("蹭蹭你^_^");
    16             }
    17             @Override
    18             public void play() {
    19                 System.out.println("把飞盘叼给你,逼你把飞盘丢出去,然后它再捡回来让你继续扔,连续500次^_^");
    20             }
    21         };
    22  
    23         dog.beFriendly();
    24         dog.play();
    25  
    26     }
    27 }

    编译和运行程序,查看结果:

    竟然编译和运行都很正常,我们知道抽象类和接口肯定无法实例化的,因此刚才的例子肯定有点意思:

  • 第一匿名内部类可以是个接口,这个没什么好奇怪的哈。
  • 第12行到第21行是一个语句,就是定义了一个对象,因此21行大括号后面有个分号。
  • 匿名内部类用 new Pet(){ … } 的方式把声明类的过程和创建类的实例的过程合二为一。
  • 匿名内部类可以是某个类的继承子类也可以是某个接口的实现类。
  • 好吧我们再看一个例子,方法参数内的匿名内部类:

    view sourceprint?
    01 public class Dog {
    02  
    03     static abstract class Ball {
    04         abstract String getName();
    05     }
    06  
    07     void play(Ball b){
    08         System.out.println(b.getName());
    09     }
    10  
    11     public static void main(String[] args){
    12         Dog dog = new Dog();
    13  
    14         dog.play(new Ball(){
    15             @Override
    16             String getName() {
    17                 return "qiu qiu";
    18             }});
    19     }
    20 }

    编译和运行以后的截图我就不给你了,返回值就是“qiu qiu”。

    从第14行到第18行是一句话,就是执行一个play方法,而这个方法的参数就由一个匿名内部类的实例来提供。

    四、静态嵌套类

    为了让你感觉舒服一些,我们也把最简单的内部类放在最后讲。

    当一个内部类前面用static修饰时,我们称之为静态嵌套类或者说静态内部类。

    上面的例子里其实我们已经看到过静态嵌套类了,下面我们再举一个例子:

    view sourceprint?
    01 public class Outer {
    02  
    03     static int x =1;
    04  
    05     static class Nest {
    06  
    07         void print(){
    08             System.out.println("Nest "+x);
    09         }
    10     }
    11  
    12     public static void main(String[] args){
    13         Outer.Nest nest = new Outer.Nest();
    14         nest.print();
    15     }
    16 }

    因为静态嵌套类和其他静态方法一样只能访问其它静态的成员,而不能访问实例成员。因此静态嵌套类和外部类(封装类)之间的联系就很少了,他们之间可能也就是命名空间上的一些关联。上面例子中你需要注意的就是静态嵌套类的声明方法 new Outer.Nest() 连续写了两个类名,以至于我们都怀疑前面的Outer是个包名了,好在包名一般都小写的,要不还真分不清……

    再强调一遍,内部类在Android中应用的非常多,理解和使用好显得蛮重要。


        
    [3] Galaxy tab试工
        来源: 互联网  发布时间: 2014-02-18
    Galaxy tab试用
    最近试用了一下三星的Galaxy Tab,7寸的,比iPad小了个个儿。
    比较郁闷的是,安装不了android market。网上的说法是要么重新刷机,要么更改出厂地。

    结果只好放弃了,使用豌豆荚精灵,也能装不少好玩的东东。

    如果不是android market受限制,相信,这种pad更易推广。

        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3