2015年10月31日 星期六

Android Studio R 顯示紅色

當 R 顯示紅色如下時, 可按 Build -> Rebuild Project 解決

EditView txtWrite = (EditText) findViewById(R.id.editText);

2015年10月25日 星期日

android 讀取, 寫入及刪除檔案 (internal storage)

版面要加入一個editView, 一個textView及三個 Button (editView, textView, btnRead, btnWrite, btnDel)

MainActivity.java

import android.content.Context;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View.OnClickListener;
import android.widget.Toast;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;


public class MainActivity extends ActionBarActivity {
    private Button btnTxtRead;
    private Button btnTxtWrite;
    private Button btnFileDel;
    private EditText txtWrite;
    private TextView txtRead;
    String fileName = "dateRec.dat";


    @Override     
   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtWrite = (EditText) findViewById(R.id.editText);
        txtRead = (TextView) findViewById(R.id.textView);

        btnTxtRead = (Button) findViewById(R.id.btnRead);
        btnTxtWrite = (Button) findViewById(R.id.btnWrite);
        btnFileDel = (Button) findViewById(R.id.btnDel);

        btnTxtRead.setOnClickListener(btnListener);
        btnTxtWrite.setOnClickListener(btnListener);
        btnFileDel.setOnClickListener(btnListener);


    }


    private void writer() {
        FileOutputStream fos = null;
        
        try {
            fos = openFileOutput(fileName, Context.MODE_PRIVATE);
            fos.write(txtWrite.getText().toString().getBytes());
            fos.close();

            File file = new File(getFilesDir() + "/" + fos);
            Toast.makeText(getApplicationContext(), file.getAbsolutePath(), Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private void reader() {
        FileInputStream fos = null;
        BufferedInputStream buffered = null;
        txtRead.setText("");

        try {
            fos = openFileInput(fileName);
            buffered = new BufferedInputStream(fos);
            byte[] buffbyte = new byte[200];
            txtRead.setText("");
            do {
                int flag = buffered.read(buffbyte);
                if (flag == -1) {
                    break;
                } else {
                    txtRead.append(new String(buffbyte), 0, flag);
                }
            }while (true);
            buffered.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void fileDel() {
        File file = new File(getFilesDir() + "/" + fileName);
        if (file.exists()){
            file.delete();
            Toast.makeText(getBaseContext(),
                    "File deleted",
                    Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(getBaseContext(),
                    "File doesn't exist",
                    Toast.LENGTH_SHORT).show();
        }
    }

    private OnClickListener btnListener = new OnClickListener() {
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.btnRead:
                        try {
                            Toast.makeText(getApplicationContext(),
                                    "Read button pressed", Toast.LENGTH_SHORT).show();
                            reader();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        break;
                    case R.id.btnWrite:
                        try {
                            Toast.makeText(getApplicationContext(),
                                    "Write button pressed", Toast.LENGTH_SHORT).show();
                            writer();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        break;
                    case R.id.btnDel:
                        try {
                            Toast.makeText(getApplicationContext(),
                                    "Del button pressed", Toast.LENGTH_SHORT).show();
                            fileDel();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        break;
                }


            }


        };
    }
 

2015年10月23日 星期五

android 有多個按鍵 (button) 時使用switch statement

版面要加入三個 Button (btnRead, btnWrite, btnDel)

MainActivity.java

import android.content.DialogInterface;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {
    private Button btnTxtRead;
    private Button btnTxtWrite;
    private Button btnFileDel;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnTxtRead = (Button) findViewById(R.id.btnRead);
        btnTxtWrite = (Button) findViewById(R.id.btnWrite);
        btnFileDel = (Button) findViewById(R.id.btnDel);

        btnTxtRead.setOnClickListener(btnListener);
        btnTxtWrite.setOnClickListener(btnListener);
        btnFileDel.setOnClickListener(btnListener);
    }

    private OnClickListener btnListener = new OnClickListener() {
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.btnRead:
                        try {
                            Toast.makeText(getApplicationContext(), "Read button pressed", Toast.LENGTH_SHORT).show();

                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        break;
                   case R.id.btnWrite:
                        try {
                            Toast.makeText(getApplicationContext(), "Write button pressed", Toast.LENGTH_SHORT).show();

                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        break 
                case R.id.btnDel:
                        try {
                            Toast.makeText(getApplicationContext(), "Del button pressed", Toast.LENGTH_SHORT).show();

                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        break;
                }


            }


        };
    }
 

2015年10月13日 星期二

android 螢幕旋轉時不重新執行onCreate()

預設中, 螢幕旋轉時會重新執行 onCreate(), 要制止重新執行, 可以有以下兩個方法:

1. 禁止螢幕旋轉
        於 AndroidManifest.xml 檔裡, 在 <activity> </activity> 中, 添加一條屬性資訊:

        android:screenOrientation="portrait"       (強制縱向)
        android:screenOrientation="landscape"  (強制橫向)

        如下:

        <activity android:name=".SomeActivity"
          android:label="@string/app_name"
          android:screenOrientation="portrait"> 


2. 螢幕旋轉時不重新執行onCreate()
        於 AndroidManifest.xml 檔裡, 在 <activity> </activity> 中, 添加一條屬性資訊:
   
        android:configChanges=”orientation|keyboardHidden”
       
        (如API 等級等於或高於13要加 screenSize)
        android:configChanges="orientation|keyboardHidden|screenSize

        如下:

        <activity android:name=".SomeActivity"
          android:label="@string/app_name"
          android:configChanges="orientation|keyboardHidden|screenSize">


        於 activity 中, 加入

        @Override
         public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
         if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        }
        else {
        }
}




android 禁止螢幕旋轉 (強制設定為縱向或橫向)

於 AndroidManifest.xml 檔裡, 在 <activity> </activity> 中, 添加一條屬性資訊:

android:screenOrientation="portrait"       (強制縱向)
android:screenOrientation="landscape"  (強制橫向)

如下:

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">

android 寫入檔案 (簡短文字) FileInputStream, FileOutputStream

寫入簡短文字可使用寫入文字檔方法, 如複雜便要用SQLite

版面要加入一個editView, 一個textView 及 兩個 Button (editView1, textView2, btnWrite, btnRead)

輸入字於 editView1, 按下 btnWrite 便會寫入檔案 output 及顯示檔案路徑 (toast), 按下 btnRead 便會讀出檔案及顯示於 textView2





注意: 讀取中文字, 中文字每個要 2 個 Byte.

MainActivity.java

import android.content.Context;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class MainActivity extends ActionBarActivity {

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText txtWrite = (EditText) findViewById(R.id.editText1);
        final TextView txtRead = (TextView) findViewById(R.id.textView2);

        Button btnTxtRead = (Button) findViewById(R.id.btnRead);
        Button btnTxtWrite = (Button) findViewById(R.id.btnWrite);


        btnTxtWrite.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View arg0) {

                try {
                    FileOutputStream fos = openFileOutput("output", Context.MODE_PRIVATE);
                    fos.write(txtWrite.getText().toString().getBytes());
                    fos.close();

                    File file = new File(getFilesDir() + "/" + fos);
                    Toast.makeText(getApplicationContext(), file.getAbsolutePath(), Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        btnTxtRead.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View arg0) {

                FileInputStream fos = null;
                BufferedInputStream buffered = null;

                try {
                    fos = openFileInput("output");
                    buffered = new BufferedInputStream(fos);
                    byte[] buffbyte = new byte[200];
                    txtRead.setText("");
                    do {
                        int flag = buffered.read(buffbyte);
                        if (flag == -1) {
                            break;
                        } else {
                            txtRead.append(new String(buffbyte), 0, flag);
                        }
                    }while (true);
                    buffered.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}