ユーザーが選択した友人データをInfoActivityでSQLiteデータベースに登録します。
DatabaseHelperにテーブル作成コードを追加すればよいと信じていたのですが、ここでえらい目にあいました。
DatabaseHelperは例えばAdatabeseにaaatableを作成し、一旦実行してデータベースファイルを作成すると
bbbTableを追加してもbbbTableは作成されていないということです。LogCatに何度もno such table云々のメッセージが
出ていたのですが。
よってまず、DatabaseHelperのデータベース名を何か他の名称に書き換えます。テーブル作成メソッドに友人データを
インプットするテーブルscore_frindを追加します。勿論これで以前のデータは失われます。
DatabaseHelperを次のように変更しました。
package kureishi.example.nationaldefence;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME="osakaizumiSoft";//データベース名の変更
public static final String TABLE_NAME="score_record";
public static final String TABLE_NAME_1="score_friend";//テーブルの追加
private static final int DB_VERSION=1;
public DatabaseHelper(Context context){
super(context,DB_NAME,null,DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql="create table "+TABLE_NAME+"(_id integer primary key autoincrement,"+"_date text not null,"+"point integer not null)";
db.execSQL(sql);
//追加したテーブルの作成
String sql_1="create table "+TABLE_NAME_1+"(_id integer primary key autoincrement,"+"_mail text not null,"+"_nickname text not null)";
db.execSQL(sql_1);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion) {
db.execSQL("drop table if exists "+DB_NAME);
onCreate(db);
}
}
念のためinfo.xmlは下記の通り(苦し紛れに何か変更しているかもしれません)。
次にInfoActivityを次のように変更します。
package kureishi.example.nationaldefence;
import java.io.*;
import java.util.*;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.util.SparseBooleanArray;
import android.widget.Toast;
import kureishi.example.nationaldefence.DatabaseHelper;
public class InfoActivity extends Activity {
public String[] listSample;
public ArrayList mail =new ArrayList();
public String[] nickName;
public String[] nickName_1;
public String[] mailList_1;
public String[] listSample_1;
private ListView listView;
private TextView text;
public String URL_PAGE= "http://upu?????????.php";
String str="";
public String mailAddress;
public String mailAddress_1;
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
public Cursor c;
public String str_max_point;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.info);
Intent intent=getIntent();
mailAddress=intent.getStringExtra("mailAddress");
if(mailAddress.length()>8 ){
mailAddress_1="発信::"+mailAddress;
text=(TextView)findViewById(R.id.textView5);
text.setText(mailAddress_1);
}else{
return;
}
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
while(cursor.moveToNext()){
String contactsId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String contactsMail = "";
String contactsName = "";
Cursor cMail = resolver.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ? ",
new String[]{contactsId}, null);
while(cMail.moveToNext()) {
contactsMail = cMail.getString(cMail.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA1));
contactsName = cMail.getString(cMail.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
mail.add(contactsMail);
nick.add(contactsName);
}
cMail.close();
}
listSample=new String[mail.size()-1];
for(int i=0;i"+nickName[i];
}
listView = (ListView)findViewById(R.id.ListView10);
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_multiple_choice,nickName);
listView.setAdapter(adapter);
int max_score=getMaxPoint();
str_max_point=String.valueOf(max_score);
// mDb.close();
}
public void onClickSend(View v){
SparseBooleanArray checked = listView.getCheckedItemPositions();
for (int i = 0; i < checked.size(); i++) {
if(checked.valueAt(i)){
int key = checked.keyAt(i);
str=str+listSample_1[key]+",";
}
}
if(str!=""){
getFriend();//ここで選択した友人のデータをSQLiteに入力するメソッドを実行します。
exec_post();
}else{
Toast.makeText(getApplicationContext(),"友人リストを選択して下さい", Toast.LENGTH_SHORT).show();
return;
}
}
private void exec_post() {
// 非同期タスクを定義
HPostTask task = new HPostTask(
this,
URL_PAGE,
// タスク完了時に呼ばれるUIのハンドラ
new PHandler(){
@Override
public void onPostCompleted(String response) {
// 受信結果をTextView5に表示
text.setText( response );
}
@Override
public void onPostFailed(String response) {
text.setText( response );
}
}
);
//本人メールアドレス
task.addPostParam( "key",mailAddress);
//友人のメールアドレス
task.addPostParam( "value", str);
// 最高得点
task.addPostParam( "score", str_max_point);
// 実行
task.execute();
}
public int getMaxPoint(){
mDbHelper =new DatabaseHelper(this);
if(mDb==null){
mDb=mDbHelper.getWritableDatabase();
}
//データの読み込み
c=fetchAll();
c.moveToFirst();
int ii=c.getCount();
int max_point=0;
for(int i=0;i=0){
if(max_point");
mailList_1[i]=str_[0];
nickName_1[i]=str_[1];
}
//今までに入っていたデータを一旦すべて削除します。
mDb.delete(DatabaseHelper.TABLE_NAME_1, null, null);
//今回選択した友人データを入力
ContentValues values;
for(int i=0;i
FriendActivityとfriend.xmlを作成します。main.xmlとほぼ同じです。の部分が
友人のデータを表示するコードです。
まずfriend.xmlファイルは次の通りです。
FriendActivityでSQLiteに入力されている友人データのニックネームをとりあえず表示します。
次の通りです。returnTodoメソッドはActivityがバックグラウンドにいき再度フォアグラウンドに
戻ったときにでるエラー防ぐためのメソッドです。
package kureishi.example.nationaldefence;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class FriendActivity extends Activity {
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private SimpleCursorAdapter mAdapter;
public Cursor c;
private ListView listView;
public String[] mail_list;
public String[] nickName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.friend);
mDbHelper =new DatabaseHelper(this);
mDb=mDbHelper.getWritableDatabase();
//データの読み込み
c=fetchAll();
startManagingCursor(c);
c.moveToFirst();
int ii=c.getCount();
mail_list=new String[ii];
nickName=new String[ii];
for(int i=0;i=0){
mail_list[i]=c.getString(col);
}
if(cl>=0){
nickName[i]=c.getString(cl);
}
c.moveToNext();//ポインタの移動これが無いと駄目
}
mDb.close();
listView = (ListView)findViewById(R.id.listView1);
String[] mail_nick=new String[nickName.length];
for(int i=0;i adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_multiple_choice,nickName);
listView.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.defence, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onClickGameStart(View v){
//Intent intent=new Intent(FriendActivity.this,NationalDefenceActivity.class);
//startActivity(intent);
}
public void onClickShowMyPoint(View v){
Intent intent=new Intent(FriendActivity.this,RecordActivity.class);
startActivity(intent);
}
public void onClickInfoFriends(View v){
Intent intent=new Intent(FriendActivity.this,TourokuActivity.class);
startActivity(intent);
}
private Cursor fetchAll(){
String[] cols={"_id","_mail","_nickname"};
return mDb.query(DatabaseHelper.TABLE_NAME_1,cols,null,null,null,null,"_id");
}
@Override
protected void onPause(){
super.onPause();
if(mDb!=null){
mDb.close();
}
View v=this.getCurrentFocus();
returnTodo(v);
}
public void returnTodo(View v){
Intent intent=new Intent(FriendActivity.this,DefenceActivity.class);
if(mDb!=null){
mDb.close();
}
startActivity(intent);
}
}
以上で選択した友人の名前(ニックネーム)のみが表示されることになります。