eclipse 안드로이드를 처음 접하는 초보자 입장에서 프로젝트를 만드는 방법에 대해 작성했다. http://webnautes.tistory.com/829 게시글을 토대로 다른 블로그 자료들을 참조하여 수정 보완했으며, PHP JSON 코드 부분은 내 방식대로 코딩을 했다. ※ listView 에 대한 처리 개념에 대한 설명이 잘 된 곳은 http://recipes4dev.tistory.com/42 테스트 환경 : eclipse LUNA, Mars.2 둘다 정상동작 준비를
위한 세팅과정 여기까지가 기본 세팅을 위한 준비과정이다. ListView는 사용자가 정의한 데이터 목록을 아이템 단위로 구성하여 화면에 출력하는 ViewGroup의 한 종류다. ListView 는 일반 위젯(TextView)가 아니라 선택위젯이기 때문에, Adapter 에서 만들어주는 getView() 를 이용해서 아이템을 표시한다. ListView 는 Adapter 를 사용하여 데이터를 표시하는 View 로 아래 설명은 Activity에 ListView를 추가할 때 사용하는 방법이다. Fragment 에 ListView 를 사용하기 위해서는 LayoutInflater를 사용하여 Resource Layout을 View로 변환한 다음, 해당 View를 사용하여 findViewById()를 호출하는 방법으로 해야 한다. 2. list_item.xml 생성 이제 ListView 의 한 아이템에 표시될 Layout 을 정의해야 한다. main.xml 파일에서 마우스 우클릭을 하여 Copy(Ctrl + C)를 한 다음에 layout 폴더에서 마우스 우클릭하여 붙여넣기를 눌러서 이름을 list_item.xml 로 수정한다.
초보자라면 기존 코드 내용을 전부 지우고 아래 코드를 복사하여 붙여넣기 한다. (연습이니까) LinearLayout 기반 xml 파일 구성을 할 줄 안다면 본인이 원하는 형식으로
작성한다. 다른 이미지를 drawable-hdpi 폴더에 복사하고 해당 파일명을 적어주면 된다. 이 부분은 나중에 사진 보여주기 부분으로 연동해볼 목적으로 표시한 영역이다. 3. main.xml 수정 ListView 가 표시될 위치를 결정한다. 안드로이드는 사용자 인터페이스를 XML를 사용하여 정의한다. main Layout 에는 ListView만 넣어주면 된다. <ListView </LinearLayout> 4. ListView 아이템에 표시될 사용자 데이터 정의 public class Main extends Activity { // 서버에서 가져올 정보를 담을 변수 선언 5. Apdater 생성후 ListView에 지정 사용자 데이터가 준비되었으니 해당 데이터를 입력받아 View로 만들어줄 Adapter를 생성해야 한다. public class Main extends Activity { // 서버 정보를 담을 배열(ArrayList) ImageView imageView1; @Override imageView1 = (ImageView) findViewById(R.id.imageView1); // 어댑터 생성, R.layout.list_item : Layout ID list.setAdapter(adapter); // ListView 에 어댑터 설정(연결) } 6. AndroidManifest.xml 파일에 퍼미션 추가 안드로이드가 어떤 컴포넌트를 시작하려면 먼저 애플리케이션 안에 그 컴포넌트가 존재하는지를 알아야 한다. 애플리케이션안의 모든 컴포넌트들은 AndroidManifest.xml 안에 선언되어야 한다. AndroidManifest.xml 파일에 선언되지 않은 Activity, Service, Content Provider 는 안드로이드 시스템에서 전혀 알 수가 없다. 결과적으로 실행할 수가 없다. <uses-permission android:name="android.permission.INTERNET"/> 5. Main.java 코드 수정 ※ 프로젝트 생성할 때 이름이 다르기 때문에 코드는 필요한 부분만 발췌하여 추가해야 한다. 첨부된 파일을 다운로드 받아서 필요한 부분을 복사하여 붙여넣기 해보면 된다.
URL은 특정 URL 주소를 다루기 위해 자바에서 제공되는 클래스다. URL 객체가 생성되면, URL 클래스의 openStream() 메소드를 이용하여
해당 URL의 자원을 얻어오는 InputStream 을 리턴 받을 수 있으며, getConnection 메소드를 사용하여 URLConnection 객체도 얻어올 수 있다. package com.example.phpmysql; import java.io.BufferedReader; import org.json.JSONArray; import android.app.Activity; public class Main extends Activity { // 서버에서 가져올 정보를 담을 변수 선언 String myJSON; JSONArray peoples = null; // 서버 정보를 담을 배열(ArrayList) ArrayList<HashMap<String, String>> personList; ImageView imageView1; @Override
imageView1 = (ImageView) findViewById(R.id.imageView1); public void setImage(int resId) { private void getDbData(String string) { @Override String uri = params[0]; try {
if(conn != null){ // 연결되었으면 protected void
onPostExecute(String result){
GetDataJSON g = new GetDataJSON(); } protected void showList(){ for(int i=0;i<peoples.length();i++){ HashMap<String,String> persons = new HashMap<String,String>();
persons.put(TAG_UID,uid); personList.add(persons); // 어댑터 생성, R.layout.list_item : Layout ID list.setAdapter(adapter); // ListView 에 어댑터 설정(연결)
} catch (JSONException e) { AsyncTask : http://link2me.tistory.com/1031 JsonArray 기본 개념 설명 :
http://link2me.tistory.com/1247 참조 StringBuilder 부분은 자바 자료는 아직 못봤는데 C# 과 거의 같은거 같다. http://link2me.tistory.com/824 HashMap 클래스는 키와 데이터 값의 한쌍으로 묶어서 관리하며 키의 중복을 허용하지 않는다. JSON(JavaScript Object Notation) 파서가 라이브러리 형태로 제공되므로 직접 문자열을 파싱할 필요가 없다. 안드로이드 역시 JSON 파서를 기본 제공한다. - JSONArray 클래스는 JSON 파일에서 배열을 읽어들인다. - JSONObject 클래스는 JSON 파일에서 객체를 읽어들인다. - JSONArray 클래스의 메소드와 JSONObject 클래스의 메소드의 목록은 동일하나 () 안에 멤버의 이름을 인수로 전달받는다는 점이 다르다. 6. 결과화면 MainActivity.java 파일 Update 배우면서 갱신된 내용을 기록해 둔다. import java.io.BufferedReader; import org.json.JSONArray; import android.app.ActionBar; public class MainActivity extends Activity { private ListView mListView = null; // 서버 정보를 파싱하기 위한 변수 선언 JSONArray peoples = null; Context context; @Override
// ActionBar 제거하기 mListView = (ListView) findViewById(R.id.listView); // 서버에 있는 정보를 읽어다가 mAdapter.addItem 에 추가하는 과정 mListView.setAdapter(mAdapter); TextView searchView = (TextView) findViewById(R.id.SearchView); searchView.setOnClickListener(new View.OnClickListener(){ phonebookView.setOnClickListener(new View.OnClickListener(){ }); }
private void getDbData(String string) { @Override String uri = params[0]; StringBuilder sb = new StringBuilder();
if(conn != null){ // 연결되었으면 int responseCode = conn.getResponseCode(); } catch(Exception e){ }
protected void onPostExecute(String result){ GetDataJSON g = new GetDataJSON(); } protected void showList() {
for(int i=0;i<peoples.length();i++){ mAdapter.addItem(myIcon,uid,name,mobile);
runOnUiThread(new Runnable() { } catch (JSONException e) { } class ViewHolder { private class ListViewAdapter extends BaseAdapter { private Context mContext = null;
public ListViewAdapter(Context mContext) { @Override @Override @Override @Override LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view.setBackgroundColor(0x00FFFFFF); viewHolder.child_layout = (LinearLayout) view.findViewById(R.id.child_layout); view.setTag(viewHolder); final ListData mData = mListData.get(position); if (mData.mImage != null) {
viewHolder.childListBtn.setText(mData.uid); viewHolder.mImage.setOnClickListener(new ImageView.OnClickListener(){ @Override @Override
rawContactId = phonebook.ContactsIDExistCheck(cr, strContactName); phonebook.ContactsIDinsert(cr, context, strContactName, strMobileNO, strofficeNO, strEmail,
strPhoto); DialogInterface.OnClickListener cancel = new DialogInterface.OnClickListener() { } }); viewHolder.childListBtn.setOnClickListener(new Button.OnClickListener(){
@Override Vibrator vibe = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
AlertDialog showdialog = new AlertDialog.Builder(MainActivity.this) public void onClick(DialogInterface dialog,int which) { Intent i = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+ mData.mobile)); }) public void onClick(DialogInterface
dialog,int which) { }); return view; public void addItem(Drawable icon, String uid, String name, String mobile){ mListData.add(addInfo); public void remove(int position){ } // Back 버튼을 누르면 어플 종료여부 확인 처리 return true; return super.onKeyDown(keyCode, event); } Back 버튼 누르면 어플 종료 되는 제대로 된 코드는 http://link2me.tistory.com/1466
활용하라. |