RSS

我现在理解的面向对象

最近魏婆婆布置了一份面向对象的作业,同时自己也想试试自己到现在,对于面向对象的理解到了什么样的程度。写的过程中,我发现一个这样的题目,想要写好,写完整还真多问题,啰啰唆唆写了很多不必要的东西,到最后写完了还不知道是不是真正的面向了对象。

任务就是这个:

用面向对象的方式实现婚姻登记系统的婚姻鉴证功能,婚姻鉴证情况如下:

同性;未达到结婚年龄,男<24,女<22;某一方已婚。则告知用户不能结婚,因以上何种原因;

如不满足以上任何情况,可以结婚的则告知恭喜信息

结果也很简单

Marry.java

package com.solo.test.java;

public class Marry {

    // 到达某种方式的目的有很多种,如何应变这种变化,就是使用面向对象的思想
    // 结不了婚(目的)的情况(方式)有很多种

    private StringBuilder msg = new StringBuilder();

    public Marry canWeMarry(ICondition person, ICondition oPerson) {

        boolean isSameSex = false;
        boolean isTrue = false;
        boolean isTrue2 = false;
        if (person.getSex() == oPerson.getSex()) {
            isSameSex = true;
            msg.append(" ");
            msg.append("你们是同性,不能结婚");
            return this;
        }

        if (!person.getTrue()) {
            isTrue = true;
            msg.append(person.getMsg());
        }
        if (!oPerson.getTrue()) {
            isTrue2 = true;
            msg.append(oPerson.getMsg());
        }
        if (isTrue || isTrue2)
            msg.insert(0, "你们不可以结婚");
        else
            msg.append("孩子,结婚去吧");

        return this;
    }

    public String getResult() {
        return msg.toString();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Marry m = new Marry();
        String result = m.canWeMarry(new People(Esex.MALE, 24, true),
                new People(Esex.MALE, 21, false)).getResult();
        System.out.printf("我们能结婚吗? %s", result);
    }
}

People.java

package com.solo.test.java;

public class People implements ICondition {
    private StringBuilder msg = new StringBuilder();
    private Esex sex;
    private int age;
    private boolean isMarry;

    public People(Esex sex, int age, boolean isMarry) {
        this.sex = sex;
        this.age = age;
        this.isMarry = isMarry;
    }

    @Override
    public boolean getTrue() {

        if (age >= sex.getMarryAge() && !isMarry)
            return true;
        if (age < sex.getMarryAge()) {
            msg.append(" ");
            msg.append(sex.getName());
            msg.append("年龄");
            msg.append(age);
            msg.append(",");
            msg.append("不够法定结婚年龄");
            msg.append(sex.getMarryAge());
        }
        if (isMarry) {
            msg.append(" ");
            msg.append(sex.getName());
            msg.append("已婚");
        }
        return false;

    }

    @Override
    public Esex getSex() {
        // TODO Auto-generated method stub
        return sex;
    }

    @Override
    public String getMsg() {
        // TODO Auto-generated method stub
        return msg.toString();
    }

}

Esex.java

package com.solo.test.java;

public enum Esex {
    MALE(24, "男方"), FEMALE(22, "女方");

    private final int marryAge;
    private final String sexName;

    private Esex(int age, String name) {
        marryAge = age;
        sexName = name;
    }

    public int getMarryAge() {
        return marryAge;
    }

    public String getName() {
        return sexName;
    }
}

ICondition.java

package com.solo.test.java;

public interface ICondition {
    Esex getSex();

    boolean getTrue();

    String getMsg();

}

Advertisements
 
留下评论

Posted by 于 三月 16, 2011 in 日志

 

for循环的一些小问题

想必大家也写过类似这样的一段程序吧

int[] a = new int[] { 1, 2, 3, 4, 5 };

for (int i = 0; i <  a.length; i++) {
    a = new int[] { 6, 7, 8 };
}

但是,在一次写项目的时候我就觉得这样应该是有问题的,for循环里面重新给数组或集合赋值,那么for循环还会执行之前的次数吗?

于是我测试了一下:结果很明显,不会。那么有没有解决办法捏?答案是有的,在最小化作用域的情况下,写成这样就没有问题了,因为次数已经保存起来赋给变量n了:

int[] a = new int[] { 1, 2, 3, 4, 5 };

for (int i = 0, n = a.length; i < n; i++) {
    a = new int[] { 6, 7, 8 };
}

 
留下评论

Posted by 于 三月 13, 2011 in 日志

 

听完SR客户的评点之后..

关于SR客户对我们提出的几个建议,我把会议上所说的总结一下。

我认为SR给我们的建议从客户角度出发可以分成两大块:一、客户想了解的是什么。二、客户不想了解的是什么。

在我们展示演示版产品吸引客户期间,客户想了解你是否展现出他想要的东西,你是否考虑的到他想要的东西。比如,昨天我们的功能业务流程展示没有得到认可,因为客户来听我们的演讲,不是冲着你这个产品的业务流程来的,客户在业务方面比我们更加了解业务的流程,而我们做的流程不可能做的面面俱到,我们在这方面只要告诉给客户听,我们可以根据你们的业务流程做出像我们产品的东西就足够了。同时也说明不仅只是展示演示产品,而应该展示你考虑的问题是否周全,是否专业,即使你没有实现,但是你是否有考虑过。

客户还关心你的产品是否能过快速安装,版本会有多少,是否适应不同分辨率,更新是否便捷。

在这些之后,如果我们做到以下两点,那么我们就更能够在同类产品中突出自己的产品,因为我们是手机银行,所以第一个就是安全,在安全方面只能通过硬技术来解决;然后就是我们的产品是否能够带动客户的业务,比如,金融助手页面除了有一些免费使用的工具,同时也会有其他副业务:开通手机银行。如果是广告,我们还可以以一种更协调的方式提供,比如做成和手机银行,贷款利率等一样的图标,放在主页面,让用户觉得,这个看起来不像是一个广告,而是一个功能。也就是说,你的产品是否能够引导用户去执行客户想要用户使用的业务。

关于PPT,我觉得能够展现出上面的内容就能满足客户了。而形式上要表现的更加专业。

 
留下评论

Posted by 于 三月 11, 2011 in 日志

 

标签: ,

Tiny Address List

一个小小的通讯录,很丑陋,为了学习SQLite用的,这个版本只能添加和查询,以后有空再弄个更新,删除。

address_list.xml

<?xml version="1.0" encoding=”utf-8″?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quot;
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">
    <ListView android:id="@+id/lvAddList" android:layout_width="fill_parent"
        android:layout_height="wrap_content"></ListView>
   
    <EditText android:text="张三" android:layout_height="wrap_content"
        android:id="@+id/etName" android:layout_width="fill_parent"></EditText>

    <EditText android:text="137******67" android:layout_height="wrap_content"
        android:id="@+id/etPhone" android:layout_width="fill_parent"></EditText>
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <Button android:id="@+id/btnAdd" android:layout_height="wrap_content"
            android:text="添加" android:layout_width="wrap_content"
            android:layout_weight="1"></Button>
        <Button android:id="@+id/btnUpdate" android:layout_height="wrap_content"
            android:text="更新" android:layout_width="wrap_content"
            android:layout_weight="1"></Button>
    </LinearLayout>
</LinearLayout>

list_adapter.xml

<?xml version="1.0" encoding=”utf-8″?>
<LinearLayout
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android&quot;>
    <TextView android:id="@+id/tvName"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="TextView">
    </TextView>
    <TextView android:id="@+id/tvInfo"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="TextView" android:layout_gravity="right">
    </TextView>
</LinearLayout>

MyHelper.java

package com.solo.test.e2ecloud.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MyHelper extends SQLiteOpenHelper {

    /**
     * 静态变量
     *
     */
    public static final String TB_NAME = "addresslist";
    public static final String ID = "_id";
    public static final String NAME = "name";
    public static final String PHONE = "phone";

    public MyHelper(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO 创建数据库之后对数据库进行操作
        // 可以在此方法里面执行创建表和数据初始化的操作

        // 创建表countrycode
        db.execSQL("CREATE TABLE IF NOT EXISTS " + TB_NAME + " (" + ID
                + " INTEGER PRIMARY KEY," + NAME + " VARCHAR," + PHONE
                + " VARCHAR)");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO 更改数据库版本的操作
        // 当数据库本身需要修改的时候调用
        // 可以在此方法执行增加/删除表或者表中的列等操作。
       
        //删除以前旧的表,创建一张新的空表
        db.execSQL("DROP TABLE IF EXISTS"+TB_NAME);
        onCreate(db);

    }

    @Override
    public void onOpen(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        super.onOpen(db);
        // 此方法会在成功打开数据库之后首先执行
    }

}

AddressList.java

package com.solo.test.e2ecloud.sqlite;

import java.util.ArrayList;
import java.util.HashMap;

import com.solo.test.e2ecloud.dialer.R;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class AddressList extends Activity {
    public static final String DB_NAME = "AddList.db";
    public static final int VERSION = 1;

    private MyHelper helper;

    private SQLiteDatabase db;
    private String strName;
    private String strPhone;
    private Cursor c;
    private ListView lvContent;
    private ArrayList<HashMap<String, Object>> alContent;
    private SimpleAdapter lvAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.address_list);

        lvContent = (ListView) this.findViewById(R.id.lvAddList);
        alContent = new ArrayList<HashMap<String, Object>>();
        // 适配器
        lvAdapter = new SimpleAdapter(this, alContent, R.layout.list_adapter,
                new String[] { "name", "content" }, new int[] { R.id.tvName,
                        R.id.tvInfo });

        // 初始化数据库辅助对象,调用MyHelper onCreate
        helper = new MyHelper(this, DB_NAME, null, VERSION);
        // 获得可读写的SQLiteDatabase对象
        db = helper.getWritableDatabase();

        ((Button) this.findViewById(R.id.btnAdd))
                .setOnClickListener(new ButtonOnClickListener());
        ((Button) this.findViewById(R.id.btnUpdate))
                .setOnClickListener(new ButtonOnClickListener());

    }

    class ButtonOnClickListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.btnAdd:
                // 第一种方式 用insert方法向数据库中插入联系人
                strName = ((EditText) AddressList.this
                        .findViewById(R.id.etName)).getText().toString();
                strPhone = ((EditText) AddressList.this
                        .findViewById(R.id.etPhone)).getText().toString();
                ContentValues values = new ContentValues();
                values.put(MyHelper.NAME, strName);
                values.put(MyHelper.PHONE, strPhone);
                db.insert(MyHelper.TB_NAME, MyHelper.ID, values);
                break;
            case R.id.btnUpdate:
                // 查询
                c = db.query(MyHelper.TB_NAME, null, null, null, null, null,
                        MyHelper.NAME + " DESC");
                final int NameIndex = c.getColumnIndexOrThrow(MyHelper.NAME);
                final int PhoneIndex = c.getColumnIndexOrThrow(MyHelper.PHONE);
                for (c.moveToFirst(); !(c.isAfterLast()); c.moveToNext()) {
                    HashMap<String, Object> item = new HashMap<String, Object>();
                    item.put("name", c.getString(NameIndex));
                    item.put("content", c.getString(PhoneIndex));
                    alContent.add(item);
                }
                lvContent.removeAllViewsInLayout();
                lvContent.setAdapter(lvAdapter);
                break;

            }

        }

    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        db.delete(MyHelper.TB_NAME, null, null);
        super.onStop();
    }

}

 
留下评论

Posted by 于 二月 25, 2011 in Android

 

标签:

Tiny Music Player

这时一个可以播放网络音乐的小小播放器,主要拿来理解Boradcast和Service的。

下面只贴主要代码。

MusicPlayService.java

package com.solo.test.e2ecloud.service;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.IBinder;
import android.util.Log;

public class MusicPlayService extends Service {

    /* 用于执行播放,暂停,停止命令 */
    public static final int CMD_PLAY = 0;
    public static final int CMD_PAUSE = 1;
    public static final int CMD_STOP = 2;
   
    /* 用于标识当前播放状态 */
    private int status;
    public static final int STATUS_PLAYING = 0;
    public static final int STATUS_PAUSED = 1;
    public static final int STATUS_STOPPED = 2;

    /* 用于发出Broadcast*/
    public static final String MUSIC_CONTROL = "TinyPlayer.ACTION_CONTROL";
    public static final String UPDATE_STATUS = "TinyPlayer.ACTION_UPDATE";

    MediaPlayer mPlayer;
    /* 媒体资源重播已经完成的时候回调 */
    OnCompletionListener completed;
   
    /*内部类CommandReceiver*/
    private CommandReceiver doCommand;
   
    private String TAG = "MusicPlayService";

    /* 用于发出更新用户界面状态的Broadcast */
    private void updateUi() {
        Log.i(TAG , "Update ui now and send broadcast.Any body here?");
        /*
         * 发出带有UPDATE_STATUS这个意图的广播,
         * 若有intent-filter为TinyPlayer.ACTION_UPDATE的广播接收者,将会收到这个广播
         */
        Intent intent = new Intent(UPDATE_STATUS);
        intent.putExtra("status", status);
        sendBroadcast(intent);
    }

    /* 内部类,用于接收Broadcast发送的命令,并根据这些命令执行相应的播放,暂停,停止操作。 */
    class CommandReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i(TAG , "wait,i got a broadcast");
           
            // TODO Auto-generated method stub
            switch (intent.getIntExtra("cmd", 1)) {
            case CMD_PLAY:
                Uri uriMedia = intent.getData();
                if(uriMedia!=null){
                    /* 停止当前播放的音乐 并播放传过来的Uri
                    *如果不再需要MediaPlayer对象,要释放,不然过多的对象会出抛异常
                    */
                    mPlayer.release();
                    mPlayer = MediaPlayer.create(context, uriMedia);
                    /* 设置音乐播放完毕后的监听器*/
                    mPlayer.setOnCompletionListener(completed);
                    try{
                        mPlayer.start();
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
                }else{
                    mPlayer.start();
                }
                status = STATUS_PLAYING;
                break;
            case CMD_PAUSE:
                mPlayer.pause();
                status = STATUS_PAUSED;
                break;
            case CMD_STOP:
                mPlayer.stop();
                status=STATUS_STOPPED;
                break;
            default:
                Log.i(TAG , "command can't find?");
                break;
            }
            /*更新UI*/
            updateUi();
        }

    }

    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        updateUi();
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        unregisterReceiver(doCommand);
    }

    @Override
    public void onCreate(){
        Log.i(TAG , "Let me do something in onCreate()");
       
        /* 主要对CommandReceiver进行动态注册*/
        mPlayer = new MediaPlayer();
        /*初始状态为停止*/
        status = STATUS_STOPPED;
        doCommand = new CommandReceiver();
        /*
         * 构造一个IntentFilter
         * action:"TinyPlayer.ACTION_CONTROL"
         * scheme:"http"
         * 相当于AndroidManifest.xml文件里注册
         */
        IntentFilter filter1= new IntentFilter();
        filter1.addAction(MUSIC_CONTROL);
        filter1.addDataScheme("http");
        registerReceiver(doCommand,filter1);
       
        IntentFilter filter2 = new IntentFilter();
        filter2.addAction(MUSIC_CONTROL);
        registerReceiver(doCommand,filter2);
       
        completed = new OnCompletionListener(){

            @Override
            public void onCompletion(MediaPlayer mp) {
                // TODO Auto-generated method stub
                Log.i(TAG, "source is completion?");
                mp.stop();;
                status = STATUS_STOPPED;
                updateUi();
            }
           
        };
       
    }
   
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

}

TinyPlayer.java

package com.solo.test.e2ecloud.player;

import com.solo.test.e2ecloud.dialer.R;
import com.solo.test.e2ecloud.player.TinyPlayer.UpdateReceiver;
import com.solo.test.e2ecloud.service.MusicPlayService;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class TinyPlayer extends Activity {

    private String TAG = "TinyPlayer";
    private final int DIALOG_ABOUT = 1;

    /* 用于表示当前状态 */
    private int status;
    private ImageButton btnStart;
    private ImageButton btnStop;
    private Uri uriNowPlaying;
    private OnClickListener listenter;
    // 内部类声明
    private UpdateReceiver doUpdate;

    /* 内部类 */
    public class UpdateReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            Log.i(TAG , "wait,i got a broadcast");
           
            /* 获取状态 */
            status = intent.getIntExtra("status", 1);
            switch (status) {
            case MusicPlayService.STATUS_PLAYING:
                btnStart.setImageResource(R.drawable.playselector);
                break;
            case MusicPlayService.STATUS_PAUSED:
            case MusicPlayService.STATUS_STOPPED:
                // 没实现
                break;

            }
        }

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.player);

        /* find view by id */
        btnStart = (ImageButton) this.findViewById(R.id.playorpause);
        btnStop = (ImageButton) this.findViewById(R.id.stop);

        /* 设置当前播放的Uri */
        uriNowPlaying = Uri
                .parse("http://zhangmenshiting.baidu.com/service/224822a2eb0cd713311d020519eb3be9.mp3?xcode=39a942ceb719dbdd0218fa1269adcc912a&quot;);

        /* 定义按钮点击事件的监听器 */
        listenter = new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                /* 如果没有选定正在播放的音乐,直接忽略操作 */
                if (uriNowPlaying == null) {
                    Log.i(TAG, "?? you don't have any music");
                    return;
                }
                int cmd = 0;
                Intent i = new Intent(MusicPlayService.MUSIC_CONTROL);

                switch (v.getId()) {
                case R.id.playorpause:
                    if (status == MusicPlayService.STATUS_PLAYING) {
                        /* 如果当前为播放,则暂停 */
                        cmd = MusicPlayService.CMD_PAUSE;

                        Log.i(TAG, "now playing,so pause");
                    } else if (status == MusicPlayService.STATUS_STOPPED) {
                        /* 如果停止,装载Uri并播放 */
                        i.setData(uriNowPlaying);
                        cmd = MusicPlayService.CMD_PLAY;

                        Log.i(TAG, "now stop,xu,the music will start");
                    } else {
                        /* 如果是暂停,就继续播放 */
                        cmd = MusicPlayService.CMD_PLAY;

                        Log.i(TAG, "now pause,don't worry,i go on immediately");
                    }
                    break;
                case R.id.stop:
                    cmd = MusicPlayService.CMD_STOP;

                    Log.i(TAG, "uh,you listen to much,take a break");
                    break;
                default:
                    break;
                }
                Log.i(TAG, "wait,i going to send the broadcast with cmmand");
                i.putExtra("cmd", cmd);
                sendBroadcast(i);
            }

        };

        /* 注册事件监听 */
        btnStart.setOnClickListener(listenter);
        btnStop.setOnClickListener(listenter);

        /* 接收带有意图为TinyPlayer.ACTION_UPDATE的广播*/
        doUpdate = new UpdateReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(MusicPlayService.UPDATE_STATUS);
        registerReceiver(doUpdate, filter);

        Log.i(TAG, "start service is important,let me do it");
        startService(new Intent(this, MusicPlayService.class));

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        Log.i(TAG, "oh,no,you click me on option item");
        switch (item.getItemId()) {
        case Menu.FIRST:
            this.showDialog(DIALOG_ABOUT);
            break;
        default:
            break;
        }
        return false;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        Log.i(TAG, "create the option menu");

        menu.add(0, Menu.FIRST, 0, R.string.about).setIcon(
                android.R.drawable.ic_menu_info_details);

        return true;
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        // TODO Auto-generated method stub
        Log.i(TAG, "yes,you are right,i override the dialog");

        switch (id) {
        case DIALOG_ABOUT:
            return new AlertDialog.Builder(this)
                    .setIcon(android.R.drawable.ic_dialog_info)
                    .setTitle(R.string.about).setMessage(R.string.about_info)
                    .setPositiveButton(R.string.confirm, null).create();
        default:
            return null;

        }
    }

}

AndroidManifest.xml

<!– 为了使service能够在Activity退出后依然运行,需process=remote,意思为远端进程,独立进程,生命周期与Acticity无关 –>
    <service android:name="com.solo.test.e2ecloud.service.MusicPlayService"
        android:process=":remote"></service>
</application>

<!– 4 为了访问网络资源,要加入这个权限 –>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

 
留下评论

Posted by 于 二月 1, 2011 in Android

 

标签: ,

Tiny SMS

TinySMS

一个很简单的发送短信程序,和TinyDialer一样,主要是理解Intent。

TinySMS.java

package com.solo.test.e2ecloud.sms;

import com.solo.test.e2ecloud.dialer.R;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class TinySMS extends Activity {
    private EditText etPhoneNum;
    private EditText etContent;
    private Button btnSend;

    /*
     * (non-Javadoc)
     *
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        Log.i("sms", "onCreate()");// log

        this.setContentView(R.layout.sms);

        etPhoneNum = (EditText) this.findViewById(R.id.EditText01);
        etContent = (EditText) this.findViewById(R.id.EditText02);
        btnSend = (Button) this.findViewById(R.id.Button01);
        btnSend.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String phoneNo = etPhoneNum.getText().toString();
                String content = etContent.getText().toString();
                if (phoneNo.length() > 0 && content.length() > 0) {
                    sendSMS(phoneNo, content);
                }
                Toast.makeText(TinySMS.this,
                        R.string.notify_incorrect_phone_and_content,
                        Toast.LENGTH_LONG);
            }
        });
    }

    private void sendSMS(String phoneNo, String content) {
        // TODO Auto-generated method stub

        Log.i("sms", "sendSMS()");// log
        /** PendingIntent对象指向TinySMS,当用户点击发送后会重新回到TinySMS的初始界面 */
        PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this,
                TinySMS.class), 0);
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNo, null, content, pi, null);
    }

}

Read the rest of this entry »

 
留下评论

Posted by 于 一月 30, 2011 in Android

 

标签: , , ,

温和不好,那就激进吧

一向躁动不安的自己总是提醒自己要温和一点,冷静一点看待事情,但是在多次的温和之后,细想回来,发现温和其实有个很不好的地方。

当然,我这里只说温和不好的方面。

当我们看到它们(Party,以下都用“它们”代替)总是在不断的进步,愚民们就会很欣慰的说国家有希望了,它们在不断的改进,不要太苛求它们了。但是我想说的是,如果是这么想,我认为就不太好了,就好像一对恋人,男的因为某件事情骗了女的,然后就哄她,说下次不会了,可能会收敛了一些,女的就以为男的会改好,谁知男的下次又犯了类似的事情,不断的欺骗,不断的请求原谅,不断的改进,温和的女孩等待的这个时间可想而知有多漫长。长痛不如短痛,就如鲁迅说过的那句话,不在沉默中爆发,就在沉默中死亡,温和带来的不好的地方就是时间会是那么的漫长,那么的遥远,进步只会更加的艰难。

如果不是只有一个它们在执政,那么我们国家的进步是否会更加大呢,我们国家的反腐是否更加强力呢?任何复杂的政治问题在我看来都可以简化成普通老百姓都能理解的比喻:有两个人或者多个人,他们都想坐上领导的那个位置,所以都很努力的工作,如果某个人做错了些事情,另外的人就会跳出来指证,使得大家都不敢随意的犯错。可能有人觉得只要有个人利用不择手段夺取位置不就好了吗?但是你却忘了还有一个重要的角色,那就是“人民”,水能载舟,亦能覆舟。纵使你利用宣传的手段蒙蔽了大家的眼睛,但是你也管不住别人的手和口。它们做了一件我认为是很悲剧的事,就是开通了互联网,虽然它们的产量,利益是增加了,但是我们知道不为人知的事情也多了,真相也离我们更近一步了。

所以,激进点吧。

说的有不好的地方尽量文明指出,不同的声音也欢迎

 
留下评论

Posted by 于 四月 2, 2010 in 日志

 

标签: , ,