posts - 78, comments - 34, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2010年2月26日

       我们的课程即将结束,有一种想立即进入公司工作的冲动,也有一种对这种整日在学校学习生活的眷恋。

      

       培训学校都是骗子,这是在网上见得多的传言。在我想找一家培训机构提升自己的技术时,现实和这些话语让我有些的警觉。为了找一家好的培训机构,我使用了两个月的业余时间不停的在网上转悠,不停的对比各培训机构的课程,对比视频,对比网上的评论...。因为我已经有近三年的桌面相关开发经验,我需要的课程内容是提高技术。最终找到了感觉上适合我的传智播客!(价钱也比较合理)

 

       我是2009115日班的,来到北京我不大喜欢学校推介的住宿环境,幸好我提前两天来到这里。第二天便与几个同学在外面找了个租处——唐家岭, 这里的环境还算不错,来到之后才知道唐家岭已经是全国知名的地境(蚂族)。这里吃饭的地方比较多,价格还算合理,多尝试了几家饭店,选择了我们比较喜欢的长吃(6-10元)。这里也有早餐,我一般都在饭店里吃(3元左右),特殊情况我才会在马路边上摆的摊子买点早餐。

 

       上了几天的课程,我已深觉到我的选择是正确的。来之前,家人和朋友还担心学校的可信度,现在他们是放心了。授课内容和方式正如传智播客所倡导的——深度,这是他们的文化,这是正确的道路。

 

       传智播客提倡学生们写学习日志,按要求完成后还有奖金,这是一个非常好的激励学习方式,当然也这是一个非常好的推广学校的方式。这一点也非常吸引我,所以在我来之前就做了写学习日志的决定。因为我知道我不想终生做为一个技术人员,即使做为一个技术人员做到一定的时候写些东西是必须的。可能会写技术文章、项目文档...。其次,我想将学习的每一项技术详细认真的总结,深入他们的原理。这些促使做了写日志的决定。

 

       但来到学校学习了几天才发现,要详细认真的总结所学习的内容那是不可能的。课后的每天晚上我都坚持写学习日志,忙的时候写到凌晨2:00(偶尔)。如果我能详细认真的总结出每天的学习内容,那我已经可以出三四本书籍了。

 

       至于写学习日志这一点,要适力而为。如果想写好学习日志,就要投入时间和精力,这样就减少了动手练习的时间,对于新人来说这是致命的。我一般都是使用休息的时间来动手。所以,写学习日志自己要打量好了,要写到什么程度、要做多少练习。

 

       在来传智之前,也有看到网上骂传智的贴子。这帖子无论是来自真实的学员、还是来自某些竞争对手。强大而美好的东西自然能证实自己。一个再好的人,怎么会得到所有的人认可!在学校里学习的都是好学生吗?都是努力学习的学生吗?肯定不是,似乎在哪里都能看到这一部分人,当然我以前也不那么喜欢学习。既然远远来到这里学习,也想找一份好工作,那就努力学习吧!

 

       在近期课程将要结束时,有到学校来招聘的公司。这些信息是即时在学校的网站上发布。

有的同学已经与公司签订了合同。但来直接来学校招聘的公司一般给的工资都不会太高,也有给的还算理想的,主要看个人能力。我想回大连工作,没有参加他们的面试。课程结束后我就回大连,虽然老师们不建议我回去...

 

       我要感谢传智播客那些认真、负责、可爱的老师,张孝祥、方力勋、冯威、佟刚、汤阳光、徐培成、毛伟、黎活明,他们让我大丰收。感谢他们的殷勤付出,祝他们身体健康,工作愉快!(话外,上老张和老黎的课要注意下课时及时打水和去卫生间,这两人太尿性了。)

 

       现在WEB开发、桌面开发对我来说已经没多大神秘了,但需要我学习的内容仍然很多很多!    

 

       我时而为自己的命运庆幸,我的道路让我深感到了他的正确!

 

posted @ 2010-03-16 21:27 長城 阅读(2968) | 评论 (6)编辑 收藏

    剩下5天的内容是ERP进销存项目和Linux,这几天我将为今后的工作做准备,所以可能不再学习总结了!

posted @ 2010-03-11 21:11 長城 阅读(1514) | 评论 (0)编辑 收藏

       今日继续我们的Axis学习,我只进行一下简单的总结。有机会再补上吧!

 

       昨天我们学习了,使用WebService进行运程调用,传递基本类型数据和类实体数据。在传递基本数据类型时,我们不需要进行任何操作。但在传递类实体类型数据时,我们需要在服务器端和客户端进行序列化和反序列化注册。那还有哪些数据传递是我们需要注意的?

 

       基本数据类型数组和集合、类类型数组和集合、远程异常。在传递基本类型数组或集合时,我们不需要添加任何声明。但在传递类类型数组或集合时,需要添加与传递类实例进行相同的注册。远程异常应该如何传递?

 

       远程异常,需要通过fault元素注册一个 远程异常。

 

       上面我们对基本数据类型和类类型的简单传输有了基本的认识,但是复合类型应该如何传递呢?类套类,这样下去,难道我们需要手动添加注册信息吗?当然不需要,Axis为我们提供了相应的工具,通过WSDL生成客户端和服务器端Java类,通过Java类(接口)生成WSDL文档,在此我就不详细总结了。

 

       除了Axis,老徐又给我们介绍了xfire,它也是WebService的一种实现工具。在此也不做总结了。

 

       有位网友跟我说还有一种WebService——xcf,是目前最流行的,我并未对此进行埋阅。但我想说的是,以后可能还会有其他流行的WebService实现,但无论出什么样的新东西,它的核心思想都是一样的。这也是我来传智学习的一大原因,如果只知道一种工具如何使用,而不知道它的道理,确实不高明。如果掌握了它的道理,那就是以不变应万变了!

 

posted @ 2010-03-10 21:42 長城 阅读(1515) | 评论 (0)编辑 收藏

     摘要:        WebService课程由徐培成老师主讲,依然发扬传智播客的特点——深入理论和实践。今天老徐讲的原理的专业术语比较多,但我只做WebService的应用总结。如果你的Java和JavaWeb基础好些,我想你看到WebService的应用,自然就能想到它的实现原理。      &nbs...  阅读全文

posted @ 2010-03-08 22:40 長城 阅读(3221) | 评论 (1)编辑 收藏

     摘要: 一、Android中的通知          一般手机上边都有一个状态条,显示电池电量、信号强度、未接来电、短信...。Android的屏幕上方也具有状态条。这里所说的通知,就是在这个状态条上显示通知。          发送通知的步骤如下: &n...  阅读全文

posted @ 2010-03-07 12:41 長城 阅读(2251) | 评论 (0)编辑 收藏

     摘要:          今日课程内容较多,我们的课上到晚7:20。   一、创建新的Activity        在进行桌面开发时,我们可以通过一个窗口上的控件事件打开另一个新的窗口。在WEB应用开发时,我们也可以通过一个连接打开一个新的页面。通过...  阅读全文

posted @ 2010-03-07 10:42 長城 阅读(6106) | 评论 (0)编辑 收藏

     摘要:        我们编写的是Andorid的HTTP多线程断点下载应用程序。因为之间我们学习的学习积累,直接使用单线程下载HTTP文件对我们来说是一件非常简单的事。那么,多线程断点下载的难点在哪里?1.多线程下载,2.支持断点。          多线程下载: &...  阅读全文

posted @ 2010-03-04 14:35 長城 阅读(5392) | 评论 (1)编辑 收藏

     摘要:        昨天我们只对Android接收网络数据进行了简单介绍,今天我们完成了Android数据存储网络部分的所有内容。在此我将对这非常重要的内容进行总结。          本篇日志是对Android与WEB应用服务之间进行数据交互的总结,下篇日志是一个经典...  阅读全文

posted @ 2010-03-04 11:34 長城 阅读(6172) | 评论 (0)编辑 收藏

既然是3G开发,网络重要性自然不必多说!Android的网络存储使用HTTP协议,我们编写的Android网络应用就相当于一个浏览器。由于Android的应用是使用Java来开发的,所以网络应用使用的也是J2SE的包。

 

       Android如何与服务器交互数据?我们可以建立一个WEB应用,这对我们来说是一件十分容易的事。在WEB应用的相关请求处理中接收Andorid提交的数据、返回XML数据或JSON数据。Android发送相应的请求并接收服务相应的数据。这就是AndroidWEB应用的数据交互。

 

       Android发送请求和获取数据如下:

String path = "http://www.android.com/images/opensourceproject.gif";

URL url = new URL(path);

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setConnectTimeout(6 * 1000);

InputStream inStream = conn.getInputStream();

 

       既然获得了InputStream,那么对数据进行操作就比较容易了。

 

       通过上面的代码,可见Android的网络应用是如此容易!

 

       这只是个开始,明天继续学习网络部分!

 

posted @ 2010-03-02 22:53 長城 阅读(1467) | 评论 (0)编辑 收藏

     摘要:        早上我们简要的对SQLite进行回顾,然后将SQLite的事务管理和SQLiteDataBase提供的Insert、Update、Delete、Query方法进行了简单的讲解。          今日的重点内容是ContentProvider(内容提...  阅读全文

posted @ 2010-03-02 22:12 長城 阅读(4449) | 评论 (4)编辑 收藏

     摘要: 前两篇日志我已经总结了本地数据存储的前两种:文件和配置项。还剩下最后一种数据库存储——SQLite。   一、SQLite简介   在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqli...  阅读全文

posted @ 2010-03-01 22:58 長城 阅读(5797) | 评论 (5)编辑 收藏

     摘要:        在此之前的学习内容是数据存储之一文件存储。在本地存储中常用的有,文件、配置文件、数据库。前面的学习主要是针对本地文件的。我认为可以把SharedPreferences看做是配置文件,虽然它也是采用XML格式存储的。          比如我们使用的桌...  阅读全文

posted @ 2010-03-01 15:01 長城 阅读(2425) | 评论 (0)编辑 收藏

     摘要:        今日继续学习Android中使用Pull的XML解析技术实现对XML文件的解析和创建。由于明天休息,时间比较充裕,所以我也将昨天未总结的SAX解析技术在此做个总结。   一、SAX解析技术        Sax使用的是事件驱动的流式解析技术。事件驱...  阅读全文

posted @ 2010-03-01 12:01 長城 阅读(2932) | 评论 (0)编辑 收藏

     摘要:        今日重点内容是Adnroid的数据存储和访问。Android的数据存储有五种:文件 SharedPreferences、SQLite数据库、内容提供者(Content provider)、网络。今天老黎讲解Android的单元测试、文件存储和访问以及解析XML文件。   一、Android的单元测试 &nb...  阅读全文

posted @ 2010-02-27 21:31 長城 阅读(4763) | 评论 (4)编辑 收藏

 一、创建 Android工程

Project name:SendMessage

BuildTarget:Android2.1

Application name:发送短信

Package name:com.changcheng.Activity

Create Activity:SendMessage

Min SDK Version:7


二、编辑工程

1.编辑strings.xml文件内容为:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="hello">请输入手机号码:</string>

<string name="app_name">发送短信</string>

<string name="content">请输入信息内容:</string>

<string name="send">发送</string>

</resources>


2.编辑main.xml文件内容为:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent">

<!-- 请输入手机号码标签 -->

<TextView android:layout_width="fill_parent"

android:layout_height="wrap_content" android:text="@string/hello" />

<!-- 手机号码编辑框 -->

<EditText android:layout_width="fill_parent"

android:layout_height="wrap_content" android:id="@+id/mobile" />

<!-- 请输入信息内容标签 -->

<TextView android:layout_width="fill_parent"

android:layout_height="wrap_content" android:text="@string/content" />

<!-- 信息内容编辑框 -->

<EditText android:layout_width="fill_parent"

android:layout_height="wrap_content" android:minLines="3"

android:id="@+id/message" />

<!-- 发送按钮 -->

<Button android:layout_width="wrap_content"

android:layout_height="wrap_content" android:text="@string/send"

android:id="@+id/send"/>

</LinearLayout>

注意,我们在电话号码输入框和拨打电话按钮中添加了android:id属性。如电话号码输入框的android:id=”@+id/mobile”@代码R.java+id代码添加id静态内部类,mobile代表向id类中添加一个常量成员。ADT将自动为我们生成常量值。

android:minLines设置信息内容编辑框的最小行数。


3.编辑Call.java内容:

package com.changcheng.activity;


import java.util.List;

import android.app.Activity;

import android.os.Bundle;

import android.telephony.SmsManager;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;


public class SendMessage extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 根据ID获取按钮

Button button = (Button) this.findViewById(R.id.send);

// 注册按钮被单击事件

button.setOnClickListener(new OnClickListener() {


@Override

public void onClick(View v) {

// 根据ID获取手机号码编辑框

EditText mobileText = (EditText) findViewById(R.id.mobile);

// 获取手机号码

String mobile = mobileText.getText().toString();

// 根据ID获取信息内容编辑框

EditText messageText = (EditText) findViewById(R.id.message);

// 获取信息内容

String message = messageText.getText().toString();

// 移动运营商允许每次发送的字节数据有限,我们可以使用Android给我们提供 的短信工具。

if (message != null) {

SmsManager sms = SmsManager.getDefault();

// 如果短信没有超过限制长度,则返回一个长度的List

List<String> texts = sms.divideMessage(message);

for (String text : texts) {

sms.sendTextMessage(mobile, null, text, null, null);

}

}

}

});

}

}

sms.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent)

destinationAddress:接收方的手机号码

scAddress:发送方的手机号码

text:信息内容

sentIntent:发送是否成功的回执,以后会详细介绍。

DeliveryIntent:接收是否成功的回执,以后会详细介绍。


4.编辑AndroidManifest.xml内容:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.changcheng.activity" android:versionCode="1"

android:versionName="1.0">

<application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".SendMessage" android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

<uses-sdk android:minSdkVersion="7" />

<!-- 注册发送短信的权限 -->

<uses-permission android:name="android.permission.SEND_SMS" />

</manifest>

注册发送短信的权限,如果没有注册这个,将使用不了系统的发送短信功能。以后在我们的应用程序开发中,有使用到系统功能的必须在这个文件中进行注册。我们可以查看Android的帮助手册都有哪些功能。(.../android-sdk-windows/docs/reference/android/Manifest.permission.html


三、启动模拟器

我们给谁发短信?我们可以启动两个模拟器。使用一个模拟器给另一个模拟器发信息。首先我们使用工具栏上的手机图标再添加一个Android2.1的模拟器,另记一个名称。


在启动两个模拟器之前,我们需要模拟器能“接收到信号”。如果我们的机器是联网的,启动模拟器后,主界面显示信号强度的旁边会有一个3G的字样,这说明模拟器已经能接收到信号了。如果我们的机器不能联网,那么将自己的IP地址、网关和DNS服务器都设置为相同的值,比如都设置为192.168.0.100。如果我们的机器是在局域网下,但没有联网,那么将自己的网关和DNS设置为路由的IP即可,一般情况下路由的IP192.168.0.1


OK,现在我们启动两个模拟器!


四、发送短信

我们启动模拟器后,可以看到模拟器窗口的标题栏上有555455556的字样。这是模拟器监听的端口即——127.0.0.15554


在工程上右键,Run As Android Application,选择其中的一个模拟器。比如选择了端口为5554的模拟器。OK,程序被加载到模拟器中了,会被自动运行。


我们在电话号码编辑框中输入5556(接收端模拟器的端口号),点击发送按钮!


OK,你看到效果了吗?5556主界面,显示信号强度的旁边显示收到新短信。


五、使用ADT插件发送短信给模拟器

如果机器太慢,无法启动两个模拟器,我们可以只启动一个模拟器。然后在菜单windows->show view->other->Android->Emulator Control打开Emulator Control面板。


Telephony Actions分组框中,Voice是呼叫,SMS是发送短信。Incoming number是模拟器的端口号,我们也可以使用这个功能给我们的模拟器拨打电话或发送短信。


posted @ 2010-02-27 00:20 長城 阅读(3498) | 评论 (0)编辑 收藏

 

一、创建 Android工程

Project name:Call

BuildTarget:Android2.1

Application name:拨打电话

Package name:com.changcheng.Activity

Create Activity:Call

Min SDK Version:7


二、编辑工程

1.编辑strings.xml文件内容为:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="hello">请输入 手机号码:</string>

<string name="app_name">拨打电话</string>

<string name="button_call">呼叫</string>

</resources>



2.编辑main.xml文件内容为:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent">

<!-- 标题标签 -->

<TextView android:layout_width="fill_parent"

android:layout_height="wrap_content" android:text="@string/hello" />

<!-- 电话号码输入框 -->

<EditText android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:id="@+id/mobile"/>

<!-- 拨打电话按钮 -->

<Button android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/button_call"

android:id="@+id/button_call"/>

</LinearLayout>

注意,我们在电话号码输入框和拨打电话按钮中添加了android:id属性。如电话号码输入框的android:id=”@+id/mobile”@代码R.java+id代码添加id静态内部类,mobile代表向id类中添加一个常量成员。ADT将自动为我们生成常量值。


3.编辑Call.java内容:

package com.changcheng.Activity;


import android.app.Activity;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;


public class Call extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 根据ID获取按钮

Button button = (Button) this.findViewById(R.id.button_call);

// 为按钮添加被单击事件

button.setOnClickListener(new OnClickListener(){


@Override

public void onClick(View v) {

// 根据ID获取编辑框

EditText editText = (EditText) findViewById(R.id.mobile);

// 获取电话号码

String mobile = editText.getText().toString();

// 生成呼叫意图

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ mobile));

// 开始呼叫

startActivity(intent);

}

});

}

}



4.编辑AndroidManifest.xml内容:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.changcheng.Activity"

android:versionCode="1"

android:versionName="1.0">

<application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".Call"

android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>


</application>

<uses-sdk android:minSdkVersion="7" />

<!-- 注册使用拨打电话功能的权限 -->

<uses-permission android:name="android.permission.CALL_PHONE"/>

</manifest>

注册使用拨打电话功能的权限,如果没有注册这个,将使用不了系统的拨打电话功能。以后在我们的应用程序开发中,有使用到系统功能的必须在这个文件中进行注册。我们可以查看Android的帮助手册都有哪些功能。(.../android-sdk-windows/docs/reference/android/Manifest.permission.html


三、启动模拟器

我们给谁打电话?我们可以启动两个模拟器。使用一个模拟器给另一个模拟器拨打。首先我们使用工具栏上的手机图标再添加一个Android2.1的模拟器,另记一个名称。


在启动两个模拟器之前,我们需要模拟器能“接收到信号”。如果我们的机器是联网的,启动模拟器后,主界面显示信号强度的旁边会有一个3G的字样,这说明模拟器已经能接收到信号了。如果我们的机器不能联网,那么将自己的IP地址、网关和DNS服务器都设置为相同的值,比如都设置为192.168.0.100。如果我们的机器是在局域网下,但没有联网,那么将自己的网关和DNS设置为路由的IP即可,一般情况下路由的IP192.168.0.1


OK,现在我们启动两个模拟器!


四、拨打电话

我们启动模拟器后,可以看到模拟器窗口的标题栏上有555455556的字样。这是模拟器监听的端口即——127.0.0.15554


在工程上右键盘,Run As Android Application,选择其中的一个模拟器。比如选择了端口为5554的模拟器。OK,程序被加载到模拟器中了,会被自动运行。


我们在电话号码编辑框中输入5556(接收端模拟器的端口号),点击呼叫按钮!


OK,你看到效果了吗?5554模拟器显示正在呼叫,5556模拟器有来电显示...


五、使用ADT插件呼叫模拟器

如果机器太慢,无法启动两个模拟器,我们可以只启动一个模拟器。然后在菜单windows->show view->other->Android->Emulator Control打开Emulator Control面板。


Telephony Actions分组框中,Voice是呼叫,SMS是发送短信。Incoming number是模拟器的端口号,我们也可以使用这个功能给我们的模拟器拨打电话或发送短信。

 

posted @ 2010-02-26 23:00 長城 阅读(3704) | 评论 (0)编辑 收藏

     摘要:   万众瞩目,Android终于开课了。本课程有黎活明老师主讲,讲课细致而流畅。想做细他的课程总结,那我没时间和精力了。也是总结个框框,虽然是个框框,但如果看着我的日志跟着我做,也能做起Android开发。 今日的重点内容是,3G简介、Android简介、Android的开发环境搭建、HelloWorld程序、Android程序运行过程、拨打电话小程序、发送短信小程序。我们跳...  阅读全文

posted @ 2010-02-26 21:21 長城 阅读(5326) | 评论 (2)编辑 收藏