안드로이드 개발 질문/답변
(글 수 45,052)
package abc.test1;
import java.io.*;
import java.util.*;
import android.app.*;
import android.content.*;
import android.content.res.*;
import android.database.*;
import android.database.sqlite.*;
import android.graphics.*;
import android.graphics.drawable.*;
import android.os.Bundle;
import android.view.*;
import android.view.ContextMenu.*;
import android.view.View.OnClickListener;
import android.widget.*;
public class Game extends Activity implements OnClickListener {
/** Called when the activity is first created. */
private Typeface gameover_font,story_font, score_font, main_font; // 폰트
private Button start, score, help, story, exit; // 시작, 스코어, 도움말, 스토리, 종료 버튼
private TextView main_text; // 제목
private Database db; // Database클레스 선언
private Drawable start_alpha, score_alpha, story_alpha, help_alpha, exit_alpha;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
try {
db_create(); // assets/database폴더에 있는 db파일을 현재 AVD에 설치
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); // 에러시 프린트
}
init(); // 변수 초기화
setFont(); // 폰트 설정
setAlpha();
// 이벤트 선언
start.setOnClickListener(this);
registerForContextMenu(score);
story.setOnClickListener(this);
help.setOnClickListener(this);
exit.setOnClickListener(this);
}
// assets/database폴더에 있는 db파일을 현재 AVD에 설치
private void db_create() throws IOException{
File folder = new File("/data/data/abc.test1/databases/");
folder.mkdirs();
File outfile = new File("/data/data/abc.test1/databases/score.db");
AssetManager am = getResources().getAssets();
InputStream is = am.open("database/score.db", AssetManager.ACCESS_BUFFER);
long filesize = is.available();
if(outfile.length() < filesize){
byte[] data = new byte[(int)filesize];
is.read(data);
is.close();
outfile.createNewFile();
FileOutputStream fos = new FileOutputStream(outfile);
fos.write(data);
fos.close();
}
}
// 변수 초기화
private void init(){
db = new Database(this);
start = (Button)findViewById(R.id.start);
score = (Button)findViewById(R.id.score);
help = (Button)findViewById(R.id.help);
story = (Button)findViewById(R.id.story);
exit = (Button)findViewById(R.id.exit);
main_text = (TextView)findViewById(R.id.main_text);
gameover_font = Typeface.createFromAsset(getAssets(), "balloons.ttf");
score_font = Typeface.createFromAsset(getAssets(), "piano.ttf");
main_font = Typeface.createFromAsset(getAssets(), "piano.ttf");
story_font = Typeface.createFromAsset(getAssets(), "piano.ttf");
start_alpha = start.getBackground();
score_alpha = score.getBackground();
story_alpha = story.getBackground();
help_alpha = help.getBackground();
exit_alpha = exit.getBackground();
}
// 폰트 설정
private void setFont(){
start.setTypeface(main_font);
score.setTypeface(main_font);
help.setTypeface(main_font);
story.setTypeface(story_font);
exit.setTypeface(main_font);
main_text.setTypeface(main_font);
}
// 투명도 조정
private void setAlpha() {
// TODO Auto-generated method stub
start_alpha.setAlpha(150);
score_alpha.setAlpha(150);
story_alpha.setAlpha(150);
help_alpha.setAlpha(150);
exit_alpha.setAlpha(150);
}
// ContextMenu 초기화
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
TreeSet<Person> name_score = new TreeSet<Person>();
int index = 1;
SQLiteDatabase sql_db;
sql_db = db.getReadableDatabase();
Cursor cursor = sql_db.rawQuery("select name, score from score", null);
while(cursor.moveToNext()){
name_score.add(new Person(cursor.getString(0), Integer.parseInt(cursor.getString(1))));
}
Iterator<Person> itr = name_score.iterator();
while(itr.hasNext()){
if(index == 11)
break;
menu.add(0, index, 0, itr.next().print());
index++;
}
cursor.close();
db.close();
}
// ContextMenu의 Menu선택시 수행할 부분
@Override
public boolean onContextItemSelected(MenuItem item) {
return true;
}
// 이벤트 설정
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int select = v.getId();
switch(select){
case R.id.start:
Intent intent_ = new Intent(Game.this, Textname.class);
startActivity(intent_);
break;
case R.id.help:
Intent intent = new Intent(Game.this, Help.class);
startActivity(intent);
break;
case R.id.story:
Intent intent = new Intent(Game.this, StoryActivity.class);
break;
case R.id.exit:
System.exit(0);
break;
}
}
}
저 부분이 자꾸 에러나는데 왜그럴까요 위에 코드랑 똑같은데 에러가나는이유는뭘까요.
저거좀수정하고싶습니다.
2012.06.11 10:46:59
// 이벤트 설정
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int select = v.getId();
switch(select){
case R.id.start:{
Intent intent = new Intent(Game.this, Textname.class);
startActivity(intent_);
break;
}
case R.id.help:{
Intent intent = new Intent(Game.this, Help.class);
startActivity(intent);
break;
}
case R.id.story:{
Intent intent = new Intent(Game.this, StoryActivity.class);
break;
}
case R.id.exit:{
System.exit(0);
break;
}
}
이런식으로 사용하셔도되용@_@;




switch 문 안에서 동일 이름의 변수 선언에 제약이 있습니다..라기보단 {} 로 감싸진 영역 내에서 동일한 이름의 지역 변수를 중복 선언했기 때문에 발생된 오류입니다.
switch 문 밖에서 변수선언을 하고 공통으로 사용하거나,
switch 문 안에서 한 번만 선언하고 이후 공용으로 계속 사용하거나,
변수 이름을 서로 다르게 주면 해결됩니다~