スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Android: Preferenceの削除

【Preferenceを削除する(Key指定)】
private void RemovePref(){
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(****Activity.this);
sp.edit().remove("KEYNAME").commit();
}
【Preferenceを全部削除する】

private void RemovePreferencesData(){
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(****Activity.this);
SharedPreferences.Editor editor = sp.edit();
Map<String, ?> keys = sp.getAll();
if (keys.size() > 0) {
   for (String key : keys.keySet()) {
       editor.remove(key);
   }
   editor.commit();
}
}
スポンサーサイト

Android: ListViewの使い方

ListViewにアイテムを登録し、クリックした時/選択した時に、何をクリック(選択)したかを表示する参考プログラムです。

 
参考にさせてもらったURL
www.adakoda.com/android/000077.html

/*--------------------------------------*/
/*--- メインプログラムの内容 ---*/
/*--------------------------------------*/
package com.fxscore.test.listviewctrl;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class ListViewCtrlActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // アイテム追加
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
        adapter.add("red");
        adapter.add("green");
        adapter.add("blue");
        ListView listView = (ListView) findViewById(R.id.listView1);
        
        // アダプター設定
        listView.setAdapter(adapter);
         
        listView.setOnItemClickListener(mItemClick); //リストビューのアイテムがクリックされた時
        listView.setOnItemSelectedListener(mItemSel); // リストビューのアイテムが選択された時
        
    }
    
    // リストビューがクリックされた時
    private AdapterView.OnItemClickListener mItemClick = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            ListView listView = (ListView) parent;
            // クリックされたアイテムを取得します
            String item = (String) listView.getItemAtPosition(position);
            Toast.makeText(ListViewCtrlActivity.this, item+" was Clicked.", Toast.LENGTH_SHORT).show();
        }
    };
    
    // リストビューが選択された時
    private AdapterView.OnItemSelectedListener mItemSel  = new AdapterView.OnItemSelectedListener(){
   @Override
   public void onItemSelected(AdapterView<?> parent, View view,
           int position, long id) {
       ListView listView = (ListView) parent;
       // 選択されたアイテムを取得します
       String item = (String) listView.getSelectedItem();
       Toast.makeText(ListViewCtrlActivity.this, item+" was Selected.", Toast.LENGTH_SHORT).show();
   }
   @Override
   public void onNothingSelected(AdapterView<?> parent) {
   }
    };
    
}





/*-------------------------------------------------------*/
/*-- 以下を、main.xmlに貼り付けてください --*/
/*-------------------------------------------------------*/
<ListView
        android:id="@+id/listView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </ListView>

[Android: ListViewの使い方]の続きを読む

Android: OnClickListenerの注意点

 はまった。。。

ボタンを押したときの処理を書くと、以下のとおり。
で、ソースに以下を貼り付けると、赤字部分に波線がでて、エラーになる。
で、マウスをそこに合わせて出てくる解決策一覧から、"インポート”を選ぶ。
でも、エラーは解決されない。

→(理由)間違えた宣言をインポートしてしまった。

OnClickListenerには2種類の宣言があった。
で、間違えた方(android.content.DialogInterface.OnClickListener)をインポートしていた。

正しくは、「android.view.View.OnClickListener」をインポートしましょう。

------------------------------------------------------------------
    Private Button btn;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.btn  = (Button) findViewById(R.id.button1);
        this.btn.setOnClickListener(mBtn) ;
    }
    
    /*-- ボタンを押した時の処理 --*/
    private OnClickListener mBtn = new OnClickListener() {
    @Override
        public void onClick(View v) {
               /*--何する?--*/
     }
    };    



[Android: OnClickListenerの注意点]の続きを読む

Android: VBでいうMsgbox

 VBでMsgbox(OK・キャンセルボタン付き)と同じことをAndroidのプログラムでおこなう場合、以下のようなソースになります。


参考にさせていただいた、超わかり易いサイトです。
www.hakkaku.net/articles/20090924-581

-------------------------------------------
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MsgBoxActivity extends Activity {
private Button btn;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.btn  = (Button) findViewById(R.id.button1);
        this.btn.setOnClickListener(mBtn) ;
    }
    
    /*-- ボタンを押した時の処理 --*/
    private OnClickListener mBtn = new OnClickListener() {
    @Override
        public void onClick(View v) {
            AlertDialog.Builder dlg;
            dlg = new AlertDialog.Builder(MsgBoxActivity.this);
            dlg.setTitle("TEST");
            dlg.setMessage("Hello, World!");
            dlg.setPositiveButton("OK", null);
            dlg.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
            /* ここにYESの処理 */
            }
        }) ;
            dlg.setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
            /* ここにNOの処理 */
            }
        }) ;
        dlg.show();    
   
    }
    };    
}

[Android: VBでいうMsgbox]の続きを読む

Android: リストボックス作成

Androidでとってもポピュラーなリストボックスを表示させる方法です。

1. 以下をレイアウトに追加
    <ListView
        android:id="@+id/listView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </ListView>
    
2.以下のxmlファイルを作成(ファイル名はrowitem.xml)
<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="32dip" android:gravity="center_vertical"/>
3.以下のソースを追加(例えばOnCreateの中に追加)
    String[] datas = {"HT-03A", "Xperia", "NexusOne", "Droid","","","","","","","","",""};
    ArrayAdapter arrayAdapter  = new ArrayAdapter( this, R.layout.rowitem, datas ); *****
    ListView list = (ListView)findViewById( R.id.listView1 );
    list.setAdapter( arrayAdapter );

【注意点1】
上のソースを貼り付けたら、やたらと「*** cannot be resolved to be a type」というエラーが出ます。
こういう場合は、そのエラーメッセージの下に出てくる"解決策一覧”から、"定義のインポート”を選べばOK。
ちなみに、そのエラー箇所を選択して、F2を押しても解決策一覧が出てきます。

【注意点2】
 慣れた人だと当たり前なのかもしれませんが、「3」の*****の部分(this)でコンパイルエラーが出て、とても悩みました。
OnCreate以外に入れ込む場合、thisだとエラーが出ます。例えば、「ボタンを押したらリストに追加」とかしたい場合。

その場合は、以下のような感じです。

public class TestActivity extends Activity {
   private Button btn;
   public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        /*-- ボタンを押したらmbtnに処理を渡す--*/
        /*-- レイアウトでbutton1というIDでボタンを作っておくのをお忘れなく --*/
        this.btn  = (Button) findViewById(R.id.button1);
        this.btn.setOnClickListener(mBtn) ;
   }

    /*-- ボタンを押した時の処理 --*/
    /*-- インポートするとき、"DialogInterfaceの方じゃないよ! --*/
    private OnClickListener mBtn = new OnClickListener() {
@Override
        public void onClick(View v) {
                String[] datas = {"HT-03A", "Xperia", "NexusOne", "Droid","","","","","","","","",""};
         ArrayAdapter arrayAdapter  = new ArrayAdapter(TestActivity.this, R.layout.rowitem, datas );
    ListView list = (ListView)findViewById( R.id.listView1 );
    list.setAdapter( arrayAdapter );
        }
    };
}

という感じです。親のオブジェクト(TestActivity.this)=Windowのオブジェクトを渡さないとダメなんですね。

[Android: リストボックス作成]の続きを読む

Android: HTTP通信

 
HTTP通信でいろいろするときの処理。のうち、GETで通信する場合。

!!!注意!!!
「AndroidMainFest.xml」に以下の許可申請文をしっかり書いておかないと、通信許可されないのでご注意を。
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

私、頭悪いのか、何回も↑でひっかかりました。。。

↓↓↓使い方↓↓↓
        String dat = doGet("http://google.co.jp");
       Toast.makeText(GetNozbeAPIKey.this, dat, Toast.LENGTH_LONG).show();


↓↓↓関数↓↓↓
    public String doGet( String url )
    {
        try
        {
            HttpGet method = new HttpGet( url );
            DefaultHttpClient client = new DefaultHttpClient();
            // ヘッダを設定する
            method.setHeader( "Connection", "Keep-Alive" );
            
            HttpResponse response = client.execute( method );
            int status = response.getStatusLine().getStatusCode();
            if ( status != HttpStatus.SC_OK ) {
                throw new Exception( "" );
            } else {
                return EntityUtils.toString( response.getEntity(), "UTF-8" );
            }
        }
        catch ( Exception e )
        {
//        Toast.makeText(this, "ERROR:"+url, Toast.LENGTH_LONG).show();
            return null;
        }
    }

[Android: HTTP通信]の続きを読む

NozbeをVBAで動かす:プロジェクト&タスクの取得

Nozbeに登録されているプロジェクトやタスクを取得するソースです。

ちなみに、sAPIKeyという変数名(String型)で、CONSTとかで以下を動かすモジュールに変数を作成してください。
その変数にAPIKeyを代入しておいてください。

※ APIKeyの取得は、この1つ前の記事に書いております。あわせてご参照ください。

’プロジェクトを取得する ・・・ついでに、タスクを取得する部分も入れ込んでます
 Public Function GetNozbeProjects()
    Dim xmlHTTP As Object
    Dim txt As String
    Dim bufs() As String, itms() As String, vals() As String
    
    Set xmlHTTP = getXMLHTTP()
    If xmlHTTP Is Nothing Then
        MsgBox "XMLHTTPオブジェクトの生成に失敗しました。", vbExclamation
        Exit Function
    End If
    xmlHTTP.Open "GET", "http://www.nozbe.com/api/projects/key-" & sAPIKey, False
    xmlHTTP.send ""
    txt = xmlHTTP.responseText
    
    '*-- JSONデータの処理 --*
    txt = Mid(txt, 3, Len(txt) - 4) '両端の[{ }]を除去
    bufs = Split(txt, "},{")
    
    Dim i As Integer, j As Integer
    For i = 0 To UBound(bufs)
        Debug.Print i & "つ目のアイテム"
        itms = Split(bufs(i), ",")
        For j = 0 To UBound(itms)
            vals = Split(itms(j), ":")
            If InStr(vals(0), "name") > 0 Then
                vals(1) = UNItoSTR(vals(1)) ' UNICODEの処理
            End If
            Debug.Print vals(0), vals(1)
        Next j
        
        GetNozbeTasks Split(itms(0), ":")(1) ’プロジェクトIDを渡して、そのプロジェクトのタスクを取得
    Next i
    
    Set xmlHTTP = Nothing
End Function
’タスク情報を取得(引数=プロジェクトID)
Public Sub GetNozbeTasks(ByVal PJID As String)
    Dim xmlHTTP As Object
    Dim txt As String
    Dim bufs() As String, itms() As String, vals() As String
    
    'プロジェクトIDにダブルコーテが付いてたら削除
    If Left(PJID, 1) = """" Then
        PJID = Mid(PJID, 2, Len(PJID) - 2) '両端の"を除去
    End If
    
    Set xmlHTTP = getXMLHTTP()
    If xmlHTTP Is Nothing Then
        MsgBox "XMLHTTPオブジェクトの生成に失敗しました。", vbExclamation
        Exit Sub
    End If
    xmlHTTP.Open "GET", "http://www.nozbe.com/api/actions/what-project/id-" & PJID & "/key-" & sAPIKey, False
    xmlHTTP.send ""
    txt = xmlHTTP.responseText
    '*-- JSONデータの処理 --*
    txt = Mid(txt, 3, Len(txt) - 4) '両端の[{ }]を除去
    bufs = Split(txt, "},{")
    
    Dim i As Integer, j As Integer
    For i = 0 To UBound(bufs)
        '1つ目のアイテム
        itms = Split(bufs(i), ",")
        Debug.Print i + 1 & "つ目のアイテム"
        For j = 0 To UBound(itms)
            vals = Split(itms(j), ":")
            If InStr(vals(0), "name") > 0 Then
                vals(1) = UNItoSTR(vals(1)) ' UNICODEの処理
            End If
            Debug.Print vals(0), vals(1)
        Next j
    Next i
    Set xmlHTTP = Nothing
End Sub
'-- UNICODE -> STRINGに変換 --------------------
Public Function UNItoSTR(ByVal sUNI As String) As String
    Dim uni(1) As Byte, str As String
    Dim i As Integer
    
    sUNI = RepStr(sUNI, "\/", "/")
    
    For i = 1 To Len(sUNI)
        If Mid(sUNI, i, 2) = "\u" Then
            uni(0) = CLng("&H" & Mid(sUNI, i + 4, 2))
            uni(1) = CLng("&H" & Mid(sUNI, i + 2, 2))
            str = str & CStr(uni)
            i = i + 5
        Else
            str = str & Mid(sUNI, i, 1)
        End If
    Next i
    
    UNItoSTR = str
End Function
'-- WEBの情報を取ってくるオブジェクト ---------------
Public Function getXMLHTTP() As Object
  Dim L As Long
  On Error Resume Next
  'セキュリティレベル & パフォーマンスの高い MSXML4を優先して作成する。
  '対応バージョンのXMLHTTPがインストールされていない場合は、
  '下位バージョンのXMLHTTPオブジェクトの生成を試みる。
  For L = 0 To 4
    Select Case L
     Case 0
      Set getXMLHTTP = CreateObject("Msxml2.XMLHTTP.4.0")
     Case 1
      Set getXMLHTTP = CreateObject("Msxml2.XMLHTTP.3.0")
     Case 2
      Set getXMLHTTP = CreateObject("Msxml2.XMLHTTP.2.6")
     Case 3
      Set getXMLHTTP = CreateObject("Msxml2.XMLHTTP")
     Case 4
      Set getXMLHTTP = CreateObject("Microsoft.XMLHTTP")
    End Select
    If Not getXMLHTTP Is Nothing Then
        Exit For
    End If
  Next
End Function

NozbeをVBAで動かす:APIKeyの取得

VBでNozbeを動かすためのサンプルです。
整理しやすいように、小出しでアップします。 

以下は、NozbeAPIを使うためのAPIKeyを取得するサンプルです。
※ Nozbeにログインしてアカウント情報を見れば、載ってるものなので、わざわざVBで取得する必要もないかおしれませんが。。。

Sub ttttest()
    MsgBox GetAPIKey("aaa@bbb.com", "abcdefg")
End Sub
Public Function GetAPIKey(id As String, pw As String) As String
    Dim xmlHTTP As Object
    Dim txt As String
    
    
    Set xmlHTTP = getXMLHTTP()
    If xmlHTTP Is Nothing Then
        MsgBox "XMLHTTPオブジェクトの生成に失敗", vbExclamation
        Exit Function
    End If
    xmlHTTP.Open "GET", "http://www.nozbe.com/api/login/email-" & id & "/password-" & pw, False
    xmlHTTP.send ""
    txt = xmlHTTP.responseText
    txt = Mid(txt, 2, Len(txt) - 2) '両端の{}を除去
    GetAPIKey = Split(txt, ":")(1)
    GetAPIKey = Mid(GetAPIKey, 2, Len(GetAPIKey) - 2) '両端のダブルコーテを除去
    
    Set xmlHTTP = Nothing
End Function

'-- WEBの情報を取ってくるオブジェクト ---------------
Public Function getXMLHTTP() As Object
  Dim L As Long
  On Error Resume Next
  'セキュリティレベル & パフォーマンスの高い MSXML4を優先して作成する。
  '対応バージョンのXMLHTTPがインストールされていない場合は、
  '下位バージョンのXMLHTTPオブジェクトの生成を試みる。
  For L = 0 To 4
    Select Case L
     Case 0
      Set getXMLHTTP = CreateObject("Msxml2.XMLHTTP.4.0")
     Case 1
      Set getXMLHTTP = CreateObject("Msxml2.XMLHTTP.3.0")
     Case 2
      Set getXMLHTTP = CreateObject("Msxml2.XMLHTTP.2.6")
     Case 3
      Set getXMLHTTP = CreateObject("Msxml2.XMLHTTP")
     Case 4
      Set getXMLHTTP = CreateObject("Microsoft.XMLHTTP")
    End Select
    If Not getXMLHTTP Is Nothing Then
        Exit For
    End If
  Next
End Function

Android: VBでいうMessageBoxみたいなやつ

 メッセージを「ぽーんっ」という感じで出す関数。

Toast.makeText(MyTestActivity.this, "aaaaaaaaa", Toast.LENGTH_SHORT).show();

以上。


[Android: VBでいうMessageBoxみたいなやつ]の続きを読む

Android: ボタンを押した時の処理

ボタンを押した時の処理(挙動)について、インターネットに出ているAndroid/JAVAのプログラムは、なぜだかエラーが出るんです。。。
エラーが出るのは「入れ子型(?)」で書いているソース。

エラー理由は不明だけど、入れ子型じゃない形でかいた場合、いかのような感じになります。
以下を、本体クラスに埋め込んでください。


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class TestActivity extends Activity {
     private Button btn ;


     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); // ←デフォルトで入ってる
        setContentView(R.layout.main);   // ←デフォルトで入ってる
        this.btn = (Button) findViewById(R.id.button1);
        this.btn.setOnClickListener(mBtn) ;
    }
 
    private OnClickListener mBtn = new OnClickListener() {
    @Override
        public void onClick(View v) {
    //ここに挙動を書く
            Toast.makeText(TestActivity.this, "aaaaa", Toast.LENGTH_SHORT).show();
        }
    };
}

ちなみに、僕がはまった注意点

OnClickListenerに関する宣言をインポートする際、2種類の選択肢が出てきます。(赤い波線のところでF2を押した時に出てくる解決策一覧に)

このとき、間違えて「DialogInterface」の方をインポートしたら、エラーが出ます
なので、「View」のほうをインポートしましょう。





以上。

[Android: ボタンを押した時の処理]の続きを読む

Android: Preferenceを使ったSave/Load

 アンドロイドのアプリ開発

<Preferenceを使った保存>
「IDやパスワードをAndroid機本体に保存して、次からは自動でそれらを読み込む」みたいなことをするサンプルです。

まず、以下のソースをOnCreateのなか(SetContentView()の下)に貼り付けてください。
ちなみに、Main画面にEditTextを配置して(ID:accid)、2つのボタンを作ってください(ID:btnadd、btnload)。

        this.btnadd = (Button) findViewById(R.id.btnadd);
        this.btnadd.setOnClickListener(mBtnAdd) ;
        this.btnload = (Button) findViewById(R.id.btnload);
        this.btnload.setOnClickListener(mBtnLoad) ;


つぎに、以下のソースを、OnCreateの下に貼り付けてください。

    // 登録ボタンを押したときの処理
    OnClickListener mBtnAdd = new OnClickListener() {
     @Override
        public void onClick(View v) {
     saveButtonClick() ;
        }
    };
    // 読み込みボタンを押したときの処理
    OnClickListener mBtnLoad = new OnClickListener() {
     @Override
        public void onClick(View v) {
     loadButtonClick() ;
        }
    };
   
    private void saveButtonClick() {
        // 保存
        EditText editText = (EditText)findViewById(R.id.accid);
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
        sp.edit().putString("SaveString", editText.getText().toString()).commit();
    }
 
    private void loadButtonClick() {
        // 読み込み
        EditText editText = (EditText)findViewById(R.id.accid);
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
        editText.setText(sp.getString("SaveString", null), BufferType.NORMAL);
    }

以上。


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。