getApplicationContext()、Activity.this、getBaseContext区别, Activity 传递参数

getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁
Activity.this的context 返回当前activity的上下文,属于activity ,activity摧毁他就摧毁

getBaseContext() 返回由构造函数指定setBaseContext()设置的上下文(一般情况下不推荐使用这种方法)

Intent的功能包括启动四大组件以及相关信息+传递数据
其中传递数据Intent提供了putExtra和对应的getExtra方法来实现:putExtra和getExtra 其实是和Bundle put和get方法一一对应的. 在实际项目中,页面之间传值,除了以上几种,经常还有传递Object对象、List类型、List<Object>类型和全局变量等等的需求。
  • 传递List<String>和List<Integer>

发送List<String>语法为: intent.putStringArrayListExtra(key, list); 接收List<String>的语法为: list = (ArrayList<String>)getIntent().getStringArrayListExtra(key);

intent.putStringArrayListExtra("ListString", stringList);
getIntent().getStringArrayListExtra("ListString");
  • List<Integer>类似以上的操作调用下面的方法也可以实现发送和接收:
intent.putIntegerArrayListExtra(key, list);
list =(ArrayList<Integer>) getIntent().getIntegerArrayListExtra(key);
  • 自定义对象用putExtra传递:
方法有两个,第一是实现Serialization接口,第二是实现Parcelable接口
首选推荐Parceable,android中的很多数据类型都是实现Serialable接口方式来传递的,例如 Intent、Bundle、Bitmap、Uri等等。转:Serializable 和 Parcelable区别:
1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点, 也不提倡用,但在这种情况下,还是建议你用Serializable 。
  • Serializable 的实现,只需要继承 implements Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。
  • Parcelabel
android提供了一种新的类型:Parcel。
本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中
Parcelable实现要点:需要实现三个东西
1)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.声明如下:
      writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc
2)describeContents方法。没搞懂有什么用,反正直接返回0也可以
3)静态的Parcelable.Creator接口,本接口有两个方法:
createFromParcel(Parcel in) 实现从in中创建出类的实例的功能
newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。估计本方法是供外部类反序列化本类数组使用。
  • 传递List<Object>
首先需要将Object对象实现Serializable接口,然后把list强制类型转换成Serializable类型,最后通过:
Intent.putExtra(key, (Serializable)objectList);
这样的语法来传递,接收方在接收的时候也需要强制类型转换成List<Object>,接收 List<Object>使用的语法是:
objectList= (List<Object>) getIntent().getSerializableExtra(key);
  • 全局变量
如果一些特殊的应用级别的参数,不方便使用intent来传递参数,我们很容易想到是不是有全局变量静态变量可以使用?Java中的静态变量在这里是适合的,但其值在Activity调用了System.exit(0)或finish()后就丢失了。
android中有个更优雅的方式是使用ApplicationContext。这种全局变量方法相对静态类更有保障,直到应用的所有Activity全部被destory掉之后才会被释放掉。Application是用来保存全局变量的,并且是在package创建的时候就存在了。所以当我们需要创建全局变量的时候,不需要再像J2SE那样需要创建public权限的static变量,而直接在application中去实现。只需要调用Context的 getApplicationContext或者Activity的getApplication方法来获得一个Application对象,就可以设置或读取全局变量的值。
启动Application时,系统会创建一个PID,即进程ID,所有的Activity就会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。
用法:
1.创建一个属于你自己的android.app.Application的子类,为想要共享的private全局变量增加setter和getter方法。
public class MyApp extends Application{  
    private String globalVariable;  
    public String getGlobalVariable() {  
        return globalVariable;  
    }  
    public void setGlobalVariable(String globalVariable) {  
        this.globalVariable = globalVariable;  
    }  
}  
2.在manifest中申明一下这个类,这时Android就为此建立一个全局可用的实例。其实就是在原来仅有的一个application标签上为application制定一个名字为这个全局实例。
<application android:name=".MyApp" android:icon="@drawable/icon" android:label="@string/app_name">
3.可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。
MyApp myApp = ((MyApp) getApplicationContext());//获得我们的应用程序MyApp  
myApp.setGlobalVariable("全局变量");  
Intent intent = new Intent();  
intent.setClass(ListDemoActivity.this, GlobalActivity.class);  
startActivity(intent);  
// ============接收全局变量的参数==============  
MyApp myApp = ((MyApp) getApplicationContext());  
String globalVariable = myApp.getGlobalVariable();

JAVA从LIST中获取元素的方法

for (int i=0; i<list.size(); i++)

((Object[])list.get(i))[1]
Advertisements

Eclipse 项目有红感叹号[error]

[问题原因】:工程中classpath中指向的包路径错误

你用myeclipse新建 web工程, 在工程目录下会生成一个 .classpath 配置文件, 里面是你工程里面引用的jar的配置。这个.classpath 对你的web工程没有什么影响
其实是给 myeclipse 识别的。

你说的这种情况是因为 .classpath 文件里面配置引用了某个jar,但是实际上你的 lib 里面并没有这个jar 所以才会有红色的提示
你不用拿.classpath文件和你的jar一个个去找,你现在打开MyEclipse,右键单击你的web工程,找到 Build Path > Configure Build Path…  > 然后上面有几个选项卡找到 Libraries。

这里看到的就是你工程里面引用的 所有的 jar , 看看是不是在某个jar图标上有个很小的黄色的感叹号?
如果有的话就没错了, 先选中这个jar, 点击右边的 Remove  > 点击OK , 等待几秒,现在web工程上面的红色XX是不是没有了.
解释一下:黄色的感叹号的jar,表示.classpath配置文件引用了jar, 但是实际上lib里面没有这个jar

java.lang.StackOverflowError

解决方法:1.错误原因:   项目的 JRE 包没有正常导入,导致Eclipse不能正常的编译project。
解决方案:  导出项目后,选中项目-右键–>Build Path–>Configure Build Path–>Libraries–>删除未正确导入的包–>添加必须的包。
遇到相同问题的朋友可以参考一下。

Title: Apache Sanselan
Artifact: sanselan
Version: 0.97-incubator
Name: Apache Sanselan
Description: Apache Sanselan is a pure-Java image library.
URL: http://sanselan.apache.org/
Download: MAVEN2 http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/sanselan/sanselan/0.97-incubator/sanselan-0.97-incubator.jar
Size: 495.0 KB
可能是开发环境的JDK和目标环境的JDK不同,可以使用目标环境的JDK重新编译程序试试。
以前我们开发用win平台32位sun jdk,在开发环境一切正常,但部署到aix 64位的was后会产生StackOverflowError,解决办法就是用aix was的64位jdk重新编译代码后部署。

error: Error: String types not allowed (at 'configChanges' with value 'keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize').
screenSize and smallestScreenSize are only supported in API Level 13, which means Honeycomb, are you sure you need them? As they are quite Honeycomb specific.

uiMode needs API Level 8.

From the official AdMob Documentation:

Requirements

The Google AdMob Ads SDK for Android requires Android 1.5 or laterMake sure you have the latest copy of the Android SDK and that you’re compiling against at least Android v3.2 (set target in default.properties to android-13).

 

 

 

 

java 字符串,字符数组,list间的转化,字符串拼接

1.关于java.lang.string.split
xxx.split()方法可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回。

2.字符串转字符数组
String str =" aa.png,a2.png,a3.png";
String[] arrayStr =new String[]{};
arrayStr = str.split(",");

3.字符数组转list
List list = java.util.Arrays.asList(arrayStr);

4.list转化为字符数组
String[] storeStr = list.toArray(new String[list.size()]);

public class SplitTest {
public static void main(String args[]) {
String str = "a1.png,a2.png,a3.png";// 原始字符串
String[] arrayStr = new String[] {};// 字符数组
List<String> list = new ArrayList<String>();// list

arrayStr = str.split(",");// 字符串转字符数组
list = java.util.Arrays.asList(arrayStr);// 字符数组转list
String[] storeStr = list.toArray(new String[list.size()]);// list转成字符数组

/* 输出字符数组的值 */
for (String s : arrayStr) {
System.out.println(s);

}
System.out.println("-------------");
/* 输出list值 */
for (String s : list) {
System.out.println(s);

}
System.out.println("-------------");

for (String s : storeStr) {
System.out.println(s);

}
System.out.println("-------------");
}
}

5.Java 5种字符串拼接方式性能比较

  • 用+的方式:编译器将构造一个StringBuffer对象,并调用其append方法。效率最差
  • concat由于是内部机制实现,比+的方式好了不少
  • Join 和 StringBuffer,相差不大,Join方式要快些,可见这种JavaScript中快速拼接字符串的方式在Java中也非常适用。
  • StringBuilder 的速度最快,但其有线程安全的问题,而且只有JDK5支持

check Inputstream is empty or not

inputstream.available().

It does not tell you whether its empty but it can give you an indication as to whether data is there to be read or not.

InputStream is designed to work with remote resources, so you can’t know if it’s there until you actually read from it.

【final】关键词

java final的含义:无法改变的;在运行过程中内容不可更改;对于对象,final使引用恒定不变,一旦引用被初始化指向一个对象,就无法改变它指向另一个对象;惯例:static final域用大写表示

  • 一个即是static又是final的域只占据一段不能改变的存储空间,必须在声明的时候进行初始化;为了节省内存
  • final而非static定义的常量可以用构造函数初始化
  • 空白final必须在构造器中使用表达式对其赋值

final类:final类禁止继承,不会有子类,final类中所有方法都隐式指定为是final的,因此无法覆写这些方法。

final方法:final把该方法锁住,确保在继承中该方法行为保持不变,并且不会被覆写;

 

实现Runnable接口

implements Runnable

创建一个类实现接口Runnable,作为线程的目标对象。初始化一个线程类时,将目标对象传递给Thread实例,由该目标对象提供run()方法。这种方法的优点是可以将CPU、代码、数据分开,形成清晰的模型,并且创建的类仍可以继承其他父类。但是编写起来比继承Thread类复杂一些。

Extend 类

extends是子继承父的关键字,继承父之后,可以使用父的方法,也可以复写父的方法。 implements是一个实现一个或者多个接口。

 

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web