※keystore 생성 / apk파일 생성 및 서명하기


- 마켓에 업로드 할 어플리케이션의 메니페스트 파일을 연 후, Manifest 탭의 하단을 보면 아래와 같이 Export 메뉴가 보입니다.



 두 가지 방법이 있는데, 하나는 APK파일 생성과 서명을 동시에 하는 것, 하나는 APK파일로만 생성하는 것입니다. 특별한 경우가 아니라면 동시에 해주는거 편하겠죠? Use the Export Wizard를 클릭합니다.




 Export  Android Application 창이 뜹니다. 여기에서는 apk파일로 내보내기를 수행할 프로젝트를 선택해주면 됩니다. Next를 눌러 다음 과정으로 넘어갑니다.





 어플리케이션 배포를 처음으로 하는 것이라면, 아직 keystore가 없을 겁니다. keystore가 있어야만 어플리케이션 서명도 할 수 있고, 구글맵 API Key도 받을 수 있습니다. (에뮬레이터에서 테스트할 때는 debug keystore로 API키를 받아서 구글맵을 사용할 수 있었지만, 실제 기기에 올릴 때는 debug keystore로 받은 API Key를 사용하면 로드가 제데로 되지 않습니다.)


Location 옆의 Browse...를 눌러 새로 만들 keystore가 저장될 위치를 선택합니다.






keystore의 경로 및 이름을 지정합니다.





keystore의 위치 및 이름을 지정했으면, keystore의 비밀번호를 입력한 후, Next 버튼을 눌러줍니다.





 Alias(이름) 및 비밀번호와 기본적인 정보들을 적어주면 되고, Validity(서명이 유효한 기간)은 50년으로 해줍니다. (안드로이드 마켓에 어플리케이션을 올리려면 적어도 안드로이드 마켓이 생긴 일자로부터 50년까지는 유효한 인증서로 서명이 되어야 합니다) 입력이 완료되었으면 Next버튼을 눌러 다음 과정으로 넘어갑니다.





어디에 apk파일을 생성할 지 모두 선택이 완료되었으면, Finish버튼을 눌러 apk파일을 생성합니다.





출처:http://www.androidpub.com/56913

'Android > 2012.04월 강좌' 카테고리의 다른 글

Toast 에 이미지 띄우기  (0) 2012.05.17
13일차 Font  (0) 2012.05.14
12일차 SocketServer 2 (Client,Server C->C)  (0) 2012.05.11
11일차 SocketServer (Client,Server C->S, S->C)  (0) 2012.05.10
11일차 Json  (0) 2012.05.10
package com.gusfree.toast;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class ToastActivity extends Activity{
	@Override
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		Button btn=new Button(this);
		btn.setText("버튼");
		setContentView(btn);

		btn.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View arg0) {
				Toast toast=
						Toast.makeText(getApplicationContext(), "ㅎㅎ", 0);

				ImageView imageView=new ImageView(getApplicationContext());
				imageView.setImageResource(R.drawable.ic_launcher);				

				/* 토스트에 뷰 셋팅하기 xml 통째로 넣어도 됨 */
				toast.setView(imageView);
				//위치 지정
				toast.setGravity(Gravity.CENTER,50,50);
				//여백 지정
				toast.setMargin(1000, 1000);
				toast.show();
			}
		});
	}
}



'Android > 2012.04월 강좌' 카테고리의 다른 글

안드로이드 어플 등록 과정  (0) 2012.05.18
13일차 Font  (0) 2012.05.14
12일차 SocketServer 2 (Client,Server C->C)  (0) 2012.05.11
11일차 SocketServer (Client,Server C->S, S->C)  (0) 2012.05.10
11일차 Json  (0) 2012.05.10

폰트 하나를 assets/fonts에 복사한다.

(윈도우 제어판에 가면 쉽게 폰트를 사용할 수있다.단 용량이 큰것은 오래걸리니 되도록 용량이 작은 폰트를 사용하자)



             나인패치 ...다운 받아서 res 소스 3개중에 한곳에 복사해주자~~

              


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:id="@+id/layout"
    android:background="@drawable/bg_dialog">

    <TextView
        android:background="@drawable/ic_btn_background"
        android:id="@+id/textView1"
        android:textSize="40px"
        android:typeface="serif"
        android:textStyle="bold"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:background="@drawable/ic_btn_background"
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>


package com.gusfree.font;

import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class FontActivity extends Activity {

	TextView tv;
	LinearLayout lt;
	Button btn;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        tv=(TextView)findViewById(R.id.textView1);
        
        //글꼴을 불러오자.
        Typeface font1 = Typeface.createFromAsset(getAssets(), "fonts/H2GTRE.TTF");
        
        //뷰에 글꼴을 적용하자.
        tv.setTypeface(font1);
        
        //SharedPreferance에 저장하길 권장
        
        lt=(LinearLayout) findViewById(R.id.layout);
        btn=(Button) findViewById(R.id.button1);
        
        //나인 패치 디자인을 사용하자 파일이름 9.jpg
	}
}






Java Project 
ChatServer.class
package chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
  
public class ChatServer {

	int PORT = 5000;
	ArrayList<ClientThread> clientList = new ArrayList<ClientThread>();
	String who;

	public ChatServer() { // default Constructor
		System.out.println("시작");
		try {
			// 1. 서버소켓을 생성한다. port
			ServerSocket server = new ServerSocket(PORT);
			System.out.println("서버생성 및 레디상태");

			while (true) {
				// 2. 서버소켓이 클라이언트가 접속할수 있도록 ready
				Socket socket = server.accept(); // accept에 block
				String who=socket.getInetAddress().getHostAddress();
				System.out.println("접속 IP :"+ who);
				ClientThread thread=new ClientThread(socket);

				thread.start();

			}
		} catch (IOException e) {
		}
	}

	// 클라이언트와 데이터를 주고 받는 기능을 담당
	class ClientThread extends Thread{
		Socket socket;
		BufferedReader br;  // 데이터 받을 때 사용
		PrintWriter pw;       //  데이터 보낼 때 사용

		public ClientThread (Socket socket){
			this.socket=socket;
			try {
				InputStream is=socket.getInputStream();
				InputStreamReader isr=
						new InputStreamReader(is);				
				br = new BufferedReader(isr);
				pw = new PrintWriter(socket.getOutputStream());

				// Line 단위로 보냈으니 Line단위로 읽자
				String firstMessage = br.readLine();
				who=socket.getInetAddress().getHostAddress();
				sendAll(who+" connected");

				//나는 내가 접속했습니다라는 메세지를 받지 않음
				clientList.add(this);  

				System.out.println(firstMessage);

			} catch (Exception e) {
			}
		}

		@Override
		public void run() {			
			super.run();
			try{
				String line="";
				while(  ( line=br.readLine()) !=null ) {
					System.out.println(line);
					if(line.equals("/exit")){
						clientList.remove(this);
						sendAll(who+" leaved ");
					}
					sendAll(line);
				}
			}catch(Exception e){				
			}
		}

		// 데이터 보내는 메서드
		public void send(String line){
			pw.println(line);
			pw.flush();
		}

		@Override
		public void destroy() {
			pw.println("/exit");
			pw.flush();
			pw.close();
			try{
				socket.close();
			}catch (Exception e) {
			}
		}
	}

	// 서버에 연결된 모든 클라이언트에게 메세지를 보내기
	public void sendAll(String line){

		// ArrayList안에 들은 모든 쓰레드에게
		for(ClientThread oneThread : clientList ){
			oneThread.send(line);
		}
	}

	public static void main(String[] args) {
		new ChatServer();
	}
}



'Android > 2012.04월 강좌' 카테고리의 다른 글

Toast 에 이미지 띄우기  (0) 2012.05.17
13일차 Font  (0) 2012.05.14
11일차 SocketServer (Client,Server C->S, S->C)  (0) 2012.05.10
11일차 Json  (0) 2012.05.10
11일차 NavarOpenAPI 이용한 Dom Parser  (0) 2012.05.10
이건 JAVA project 
 ChatServer.class
package chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ChatServer {


	int PORT=5000;

	public ChatServer(){//default Construtor
		System.out.println("시작");
		try {

			//1.서버소켓을 생성한다. port
			ServerSocket server = new ServerSocket(PORT);
			System.out.println("서버생성 및 레디 상태");

			while(true){
				//2.서버소켓이 클라이언트가 접속할 수 있도록 ready
				Socket socket = server.accept();//accept에 block
				String who = socket.getInetAddress().getHostAddress();
				System.out.println("접속 IP: "+who);
				ClientThread thread= new ClientThread(socket);
				thread.start();
			}
		} catch (IOException e) {


			e.printStackTrace();
		}
	}
	  
	//클라이언트와 데이터를 주고 받는 기능을 담당
	class ClientThread extends Thread{
		Socket socket;
		BufferedReader br; //데이터 받을 때 사용
		PrintWriter pw;    //데이터 보낼 때 사용
		
		public ClientThread(Socket socket) {
			this.socket=socket;
			try {
				InputStream is = socket.getInputStream();
				InputStreamReader isr = new InputStreamReader(is);
				
				br = new BufferedReader(isr);
				pw = new PrintWriter(socket.getOutputStream());
				
				//Line 단위로 보냈으니 Line 단위로 읽자
				String firstMessage = br.readLine();
				System.out.println(firstMessage);
				
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		 
		@Override
		public void run() {
			super.run();
			try {
				String line="";
				while( (line = br.readLine()) !=null){
					System.out.println(line);
					send(line);
				}
			} catch (Exception e) {
			}
		}
		//데이터 보내는 메서드
		public void send(String line){
			pw.println(line);
			pw.flush();
		}
	}
	public static void main(String[] args) {
		new ChatServer();
	}
}



여기부터는 AndroidProject 

manifast.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gusfree.chatclient"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".ChatClientActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />

    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>
ChatClientActivity.java
package com.gusfree.chatclient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;

public class ChatClientActivity extends Activity implements OnClickListener{

	TextView textView;
	EditText editText;
	private final int PORT=5000;
	private final String IP="ip를 적어주삼~";//cmd창에,ipconfig명령어 
	Socket socket;
	PrintWriter pw;    //데이터를 보낼 때 사용할 객체
	BufferedReader br; //데이터를 받을 때 사용할 객체

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		textView=(TextView) findViewById(R.id.textView1);
		editText=(EditText) findViewById(R.id.editText1);
		findViewById(R.id.button1).setOnClickListener(this);

		//서버와 Socket으로 연결하기
		try { 
			socket = new Socket(IP,PORT);//서버연결
			OutputStream os = socket.getOutputStream();
			pw = new PrintWriter(os);
			InputStream is = socket.getInputStream();
			br = new BufferedReader(new InputStreamReader(is));
			
			/* 바이트 단위 전송
			 * pw.write("안녕? I'm Cityboy");
			 * pw.flush();    */
			
			//Line 단위 전송
			pw.println("hi? I'am kj");
			pw.flush();
			
			//서버로부터 오는 데이터를 받는 스레드 생성 + 실행
			new ReceiveThread().start();
			
		} catch (UnknownHostException e) {

			e.printStackTrace();
		} catch (IOException e) {

			e.printStackTrace();
		}
	}
	//서버로 부터 오는 데이터를 받는 역활을 맡는다.
	class ReceiveThread extends Thread{
		String line;
		
		@Override
		public void run() {
			super.run();
			try {
				while( (line=br.readLine()) != null){
					/*주의: 스레드에서는 뷰에 접근할 수없다.*/
					
					//대안1:post 메서드 사용, 대안2:핸들러 사용
					textView.post(new Runnable() {
						@Override
						public void run() {
							String before = (String) textView.getText();
							textView.setText(line+"\n"+before);
						}
					});
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	@Override
	public void onClick(View v) {
		String msg = editText.getText().toString().trim();
		pw.println(msg);
		pw.flush();
	}
}







'Android > 2012.04월 강좌' 카테고리의 다른 글

13일차 Font  (0) 2012.05.14
12일차 SocketServer 2 (Client,Server C->C)  (0) 2012.05.11
11일차 Json  (0) 2012.05.10
11일차 NavarOpenAPI 이용한 Dom Parser  (0) 2012.05.10
11일차 DOM과 SAX의 기술적 특징  (0) 2012.05.10
JsonActivity.java
package com.gusfree.json;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class JsonActivity extends Activity {

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        TextView textView= new TextView(this);
        //Object : {string:value,string:value,string:value...}
        String test1="{title:음식점,price:2000,location:강남}";
        String content="";
        try {
        	JSONObject jsonObject = new JSONObject(test1);
        	String title =jsonObject.getString("title");
        	String price =jsonObject.getString("price");
        	String location =jsonObject.getString("location");
        	content="title: "+title+" price: "+price+" locaction: "+location;
        
        } catch (JSONException e) {
			e.printStackTrace();
		}
        textView.setText(content);
        setContentView(textView);
        
	}
}
/* <Data>
 * 	  <title>음식점 </title>
 * 	  <price>2000 </price>
 * 	  <location>강남 </location>
 * </Data>
 * 
 * 
 * {"음식점",2000,강남} //Json 방식 Mobile
 * */
 








package com.gusfree.json;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class JsonActivity extends Activity {
 
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        TextView textView= new TextView(this);
        //Object : {string:value,string:value,string:value...}
        String test1="{title:음식점,price:2000,location:강남}";
        String content="";
        try {
        	JSONObject jsonObject = new JSONObject(test1);
        	String title =jsonObject.getString("title");
        	String price =jsonObject.getString("price");
        	String location =jsonObject.getString("location");
        	content="title: "+title+" price: "+price+" locaction: "+location;
        
        	//JSONArray 따옴표 안에 따옴표를 표현하고 싶을 때
        	//\n
        	
        	String test2="[ \"목요일 \",\"금요일 \" ]";
        	JSONArray jasonArray =new JSONArray(test2);
        	Object first = jasonArray.get(0);
        	Object second = jasonArray.get(1);
        	content += "\n" +first.toString() + "\n" +second.toString();
        	
        } catch (JSONException e) {
			e.printStackTrace();
		}
        textView.setText(content);
        setContentView(textView);
        
	}
}
/* <Data>
 * 	  <title>음식점 </title>
 * 	  <price>2000 </price>
 * 	  <location>강남 </location>
 * </Data>
 * 
 * 
 * {"음식점",2000,강남} //Json 방식 Mobile
 * */
 



manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gusfree.naver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".NaverOpenAPIActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
NaverOpenAPIActivity.java
package com.gusfree.naver;

import java.io.InputStream;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;



public class NaverOpenAPIActivity extends Activity {
	ListView listView;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		listView=(ListView) findViewById(R.id.listView1);

		String sample =
"http://openapi.naver.com/search?key=자신의 키값&query=starwars&display=10&start=1&target=movie";

		try {
			URL url = new URL(sample);
			InputStream is = url.openStream();
			//Dom Parser, Document Object

			DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();

			DocumentBuilder builder=factory.newDocumentBuilder();

			//데이터를 읽어서 다큐먼트를 만드느다.
			Document document = builder.parse(is);

			//<total>태그의 value 값 (total태그는 1개 뿐이다)
			String total=document.getElementsByTagName("total").item(0).
					getFirstChild().getNodeValue();

			Log.i("검색결과 갯수","검색결과 갯수"+total);

			for(int i=0;i<Integer.parseInt(total);i++){
				//!title은 최초에
				//<title>Naver Open API - movie ::'starwars'</title>
				//에 나오기 대문에 i+1번째로 보기로 하자
				String title=document.getElementsByTagName("title").item(0).
						getFirstChild().getNodeValue();
				/*<actor> 태그 value를 전부 Log찍기*/
				String actor=document.getElementsByTagName("actor").item(0).
						getFirstChild().getNodeValue();

				Log.i("for문","title= "+title);
				Log.i("for문","actor= "+actor);
			}

			/*모든 태그가 열고 닫힘이 100%일치해야 사용가능*/
		
			/*//item 10개가 들어있다
			NodeList itemList = document.getElementsByTagName("item");

			for(int i=0;i<itemList.getLength();i++){
				Node itemNode = itemList.item(i);
				NodeList itemChildList = itemNode.getChildNodes();
				for(int j=0;j<itemChildList.getLength();j++){
					//tite,link,image,subtitle.....
					String text= itemChildList.item(j).getFirstChild().getNodeValue();

					Log.i("텍스트","텍스트: "+text);
				}
				Log.w("다음 item","다음 item");

			}*/
		} catch (Exception e) {
		}
	}
}



'Android > 2012.04월 강좌' 카테고리의 다른 글

11일차 SocketServer (Client,Server C->S, S->C)  (0) 2012.05.10
11일차 Json  (0) 2012.05.10
11일차 DOM과 SAX의 기술적 특징  (0) 2012.05.10
11일차 오픈 API 사용법  (0) 2012.05.10
11일차 Weather (SAX parser)  (0) 2012.05.10



PULLparser - 내가 직접 파싱을 처리

DOM Parser - 한번 받은 데이터를 재사용해야 할때

JSOMPaser

'Android > 2012.04월 강좌' 카테고리의 다른 글

11일차 Json  (0) 2012.05.10
11일차 NavarOpenAPI 이용한 Dom Parser  (0) 2012.05.10
11일차 오픈 API 사용법  (0) 2012.05.10
11일차 Weather (SAX parser)  (0) 2012.05.10
11일차 Samples for SDK 사용하기  (0) 2012.05.10

로그인 하고 더보기 클릭 도구에 개발자 센터 들어가자


개발자센터 오픈API


검색API 키추가




우리는 안드로이드 쓰니 안드로이드클릭



발급키를 사용합니다.



검색하고 싶은 목록 클릭 우선 나는 영화



샘플 URL으로 검색해보자



test에 자기가 발급받은 키값을 주자


그럼 정보가 뜬다~~


'Android > 2012.04월 강좌' 카테고리의 다른 글

11일차 NavarOpenAPI 이용한 Dom Parser  (0) 2012.05.10
11일차 DOM과 SAX의 기술적 특징  (0) 2012.05.10
11일차 Weather (SAX parser)  (0) 2012.05.10
11일차 Samples for SDK 사용하기  (0) 2012.05.10
10일차 TouchEvent  (0) 2012.05.09

가상청 사이트에가서 RSS 주소를 알아오자..

http://www.kma.go.kr/








main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
  
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>


    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>
mainfast.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gusfree.weatherparse"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".WeatherParseActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
data.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="34dp"
        android:layout_toRightOf="@+id/textView1"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="20dp"
        android:layout_toRightOf="@+id/textView1"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView4"
        android:layout_marginLeft="24dp"
        android:layout_toRightOf="@+id/textView2"
        android:text="TextView" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />
    
</RelativeLayout>

WeatherParseActivity.java
package com.gusfree.weatherparse;

import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class WeatherParseActivity extends Activity implements OnClickListener{

	TextView textView;
	ListView listView;
	InputStream is;
	//Date를 넣을 Collections
	ArrayList<Data> list =new ArrayList<Data>();

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		findViewById(R.id.button1).setOnClickListener(this);
		findViewById(R.id.button2).setOnClickListener(this);
		textView=(TextView) findViewById(R.id.textView1);
		listView=(ListView) findViewById(R.id.listView1);

		findViewById(R.id.button1).performClick();//test용
		findViewById(R.id.button2).performClick();//test용
	}

	@Override
	public void onClick(View v) {
		switch(v.getId()){

		case R.id.button1 : //날씨 정보 요청하고 응답받기
			String addr ="http://www.kma.go.kr/weather/forecast/mid-term-xml.jsp?stnId=108";
			try{
				URL url =new URL(addr); //String -> URL
				//InputStream is = url.openStream(); 가장 간단한 방법

				//내가 요청할 내용
				HttpGet httpGet = new HttpGet(addr);

				//내가 고객
				HttpClient client= new DefaultHttpClient();

				//고객이 요청 사항을 전달하기 ->결과가 돌아옴
				HttpResponse response = client.execute(httpGet);

				if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){//응답과 요청이 성공했다.

					is=response.getEntity().getContent();

					/*int k=0;
				ByteArrayBuffer bab =new ByteArrayBuffer(64);
				while( (k=is.read())!=-1 ){//아스키코드 0~255
					bab.append(k);

				}
				//ByteArrayBuffer -> byteArray -> String
				textView.setText(new String(bab.toByteArray()));*/

				}else{
					Toast.makeText(this,"요청중 예외발생", 0).show();
				}
			}catch(Exception e){
			}
			break;

		case R.id.button2 : //받은 데이터를 파싱해서 화면 출력
			//SaxPaser로 InputStream의 데이터를 파싱하자
			try {
				SAXParserFactory factory = SAXParserFactory.newInstance();
				SAXParser saxParser =factory.newSAXParser();
				XMLReader reader = saxParser.getXMLReader();

				//InputStream -> InputSource로 형변환 하자
				InputSource source = new InputSource(is);

				reader.setContentHandler(new ReaderWork());
				reader.parse(source);//return void;		

				/*MyThread thread =new MyThread();
				thread.start();*/

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

	//리더가 할 일을 명시해둔 클래스
	class ReaderWork extends DefaultHandler{

		String city;         
		String numEf;		 //2일후 예보
		String tmEf;         //날짜 태그
		String wf;           //날씨예보 태그
		String tmn;          //최저온도 태그
		String tmx;          //최고 온도 태그
		String reliability;  //신뢰도 태그
		String tag;
		String text;

		@Override //xml 파싱을 시작할때 1번 호출
		public void startDocument() throws SAXException {
			Log.w("startDocument","startDocument");
			super.startDocument();
		}

		@Override  //여는 태그를 만날때 호출
		public void startElement(String uri, String localName, String qName,
				Attributes attributes) throws SAXException {
			Log.i("startElement","startElement"+localName);
			super.startElement(uri, localName, qName, attributes);
		}


		@Override //태그와 태그 사이의 값을 만날 때 호출
		public void characters(char[] ch, int start, int length)
				throws SAXException {
			//ch ={'a','b','c','d','e','f'} => "abcde"
			text=new String(ch,start,length);
			Log.i("characters","characters"+text);
			super.characters(ch, start, length);
		}


		@Override //닫는 태그를 만날때 호출
		public void endElement(String uri, String localName, String qName)
				throws SAXException {
			Log.w("endElement","endElement");
			if(localName.equalsIgnoreCase("city")){
				Log.e("city 닫는 태그","city 닫는태그 " +text);
				city=text;
			}else if(localName.equalsIgnoreCase("numEf")){
				numEf=text;
			}else if(localName.equalsIgnoreCase("tmEf")){
				tmEf=text;
			}else if(localName.equalsIgnoreCase("wf")){
				wf=text;
			}else if(localName.equalsIgnoreCase("tmn")){
				tmn=text;
			}else if(localName.equalsIgnoreCase("tmx")){
				tmx=text;
			}else if(localName.equalsIgnoreCase("reliability")){
				reliability=text;

				//변수 7개에 값이 들어값으므로 객체 생성
				Data data = new Data(city,numEf,tmEf,wf,tmn,tmx,reliability);
				list.add(data);
				Log.e("객체생성","-----------------------------------------");
			}
			super.endElement(uri, localName, qName);
		}
		@Override //문서 마지막에 호출
		public void endDocument() throws SAXException {
			Log.w("endDocument","endDocument");
			super.endDocument();

			listView.setAdapter(new MyAdapter());
		}
	}

	class MyAdapter extends BaseAdapter{

		@Override
		public int getCount() {
			return list.size();
		}

		@Override
		public Object getItem(int arg0) {
			return null;
		}

		@Override
		public long getItemId(int arg0) {
			return 0;
		}

		@Override
		public View getView(int position, View arg1, ViewGroup arg2) {
			//list안에 들은 Data객체의 필득값을
			//data.xml안의 뷰에 셋팅해서 return하기

			Data oneData = list.get(position);
			RelativeLayout layout =
					(RelativeLayout)View.inflate(getApplicationContext(), R.layout.data, null);
			TextView tv1=(TextView) layout.findViewById(R.id.textView1);//도시 이름 city
			TextView tv2=(TextView) layout.findViewById(R.id.textView2);//날짜 tmEf
			TextView tv3=(TextView) layout.findViewById(R.id.textView3);//tmn~tmx
			TextView tv4=(TextView) layout.findViewById(R.id.textView4);//날씨 wf
			ImageView imgView=(ImageView) layout.findViewById(R.id.imageView1);//

			tv1.setText(oneData.city);
			tv2.setText(oneData.tmEf);
			tv3.setText(oneData.tmn+" ~ "+oneData.tmx);
			tv4.setText(oneData.wf);

			if(oneData.wf.contains("비")){
				imgView.setImageResource(R.drawable.rainy);
			}else if(oneData.wf.contains("구름")){
				imgView.setImageResource(R.drawable.cloudy);
			}else if(oneData.wf.contains("조금")){
				imgView.setImageResource(R.drawable.mcloudy);
			}
			return layout;
		}
	}

	class MyThread extends Thread{
		@Override
		public void run() {
			//할일
			super.run();
		}
	}
}
Data.java
package com.gusfree.weatherparse;

public class Data {
	String city;         
	String numEf;		 //2일후 예보
	String tmEf;         //날짜 태그
	String wf;           //날씨예보 태그
	String tmn;          //최저온도 태그
	String tmx;          //최고 온도 태그
	String reliability;  //신뢰도 태그
	
	
	public Data(String city, String numEf, String tmEf, String wf, String tmn,
			String tmx, String reliability) {
		super();
		this.city = city;
		this.numEf = numEf;
		this.tmEf = tmEf;
		this.wf = wf;
		this.tmn = tmn;
		this.tmx = tmx;
		this.reliability = reliability;
	}
}



'Android > 2012.04월 강좌' 카테고리의 다른 글

11일차 DOM과 SAX의 기술적 특징  (0) 2012.05.10
11일차 오픈 API 사용법  (0) 2012.05.10
11일차 Samples for SDK 사용하기  (0) 2012.05.10
10일차 TouchEvent  (0) 2012.05.09
10일차 Login  (0) 2012.05.09

밑에 이게 자신의 API 버전에 맞게 설치하거나 되어저야한다.



그리고 새로운 프로젝트를 만들 때 Create project from existing sample로 설치한다~



APIDemos를 쓰고 싶으니까 이걸 선택하고 설치~


'Android > 2012.04월 강좌' 카테고리의 다른 글

11일차 오픈 API 사용법  (0) 2012.05.10
11일차 Weather (SAX parser)  (0) 2012.05.10
10일차 TouchEvent  (0) 2012.05.09
10일차 Login  (0) 2012.05.09
10일차 TabView  (0) 2012.05.09


manifast.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gusfree.touchevent"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".TouchEventActivity"
            android:label="@string/app_name" 
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
TouchEventActivity.java
package com.gusfree.touchevent;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

public class TouchEventActivity extends Activity {

	MyView myView;
	float x,y;
	int width,height;
	Bitmap bitmap;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myView = new MyView(this);
        LinearLayout layout = new LinearLayout(this);//배경
        LayoutParams params = 
        		new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
        layout.setLayoutParams(params);
        layout.setBackgroundColor(Color.WHITE);
        layout.addView(myView);
        setContentView(layout);
        
        WindowManager manager =(WindowManager)getSystemService(WINDOW_SERVICE);
        Display display = manager.getDefaultDisplay();
        
        width=display.getWidth();//내 화면의 가로 사이즈
        height=display.getHeight();//내 화면의 세로 사이즈
        x=width/2;//초기값
        y=height/2;
        bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.snoopy);
    }
	
	class MyView extends View{

		public MyView(Context context) {
			super(context);
		}
		
		@Override
		protected void onDraw(Canvas canvas) {
			super.onDraw(canvas);
			
			canvas.drawBitmap(bitmap,x,y,null);
		}
	}
	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		x=ev.getRawX();
		y=ev.getRawY();
		
		myView.postInvalidate();//다시 그려라
		return super.dispatchTouchEvent(ev);
	}
}  



'Android > 2012.04월 강좌' 카테고리의 다른 글

11일차 Weather (SAX parser)  (0) 2012.05.10
11일차 Samples for SDK 사용하기  (0) 2012.05.10
10일차 Login  (0) 2012.05.09
10일차 TabView  (0) 2012.05.09
10일차 PullParser  (1) 2012.05.09
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	
	<!-- 예약어@android:id/tabhost -->

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </TabWidget>

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <LinearLayout
                    android:id="@+id/tab1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                    <AnalogClock
                        android:layout_width="100dp"
                        android:layout_height="100dp" />
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/tab2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                    <DigitalClock
                        android:layout_width="100dp"
                        android:layout_height="100dp" />
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/tab3"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                    <Chronometer
                        android:layout_width="100dp"
                        android:layout_height="100dp" />
                </LinearLayout>
            </FrameLayout>
        </LinearLayout>

    </TabHost>

</LinearLayout>
sub.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />

    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPassword" />


    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Auto Login" />


    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>
manifast.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gusfree.tapview"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".TapViewActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="SubActivity"></activity>
    </application>

</manifest>
TabActivity.java
package com.gusfree.tapview;

import android.app.TabActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.AnalogClock;
import android.widget.TabHost;
import android.widget.TextView;

public class TapViewActivity extends TabActivity {

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //@android:id/tabhost
        //탭위젯에다가 제목등을 셋팅하고,
        //각각의 탭위젯과 LinearLayout을 연결해주기
        
        //1. TabHost를 불러오자 @android:id/tabhost
        //TabActivity 상속 받아서 가능한 메서드 
        TabHost tabHost = getTabHost();
        
        TabHost.TabSpec spec1 =tabHost.newTabSpec("태그1");
        TabHost.TabSpec spec2 =tabHost.newTabSpec("태그2");
        TabHost.TabSpec spec3 =tabHost.newTabSpec("태그3");
        TabHost.TabSpec spec4 =tabHost.newTabSpec("태그3");
        
        spec1.setIndicator("첫번째 스펙");
        spec2.setIndicator("",getResources().getDrawable(R.drawable.red));
        spec3.setIndicator(new AnalogClock(this));
        spec4.setIndicator("네번째");
        
        spec1.setContent(R.id.tab1);
        spec2.setContent(R.id.tab2);
        spec3.setContent(R.id.tab3);
        Intent intent =new Intent();
        intent.setClass(this,SubActivity.class);
        spec4.setContent(intent);
        
        tabHost.addTab(spec1);
        tabHost.addTab(spec2);
        tabHost.addTab(spec3);
        tabHost.addTab(spec4); 
        
        SharedPreferences pref=getSharedPreferences("login", MODE_PRIVATE);
        
        String id = pref.getString("id","noname");
        ((TextView)findViewById(R.id.textView1)).setText("안녕하세요! "+id+ "님");
    }
} 
SubActivity.java
package com.gusfree.tapview;

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.EditText;

public class SubActivity extends Activity{
	
	EditText editText1,editText2;
	CheckBox checkbox;
	SharedPreferences preference;//공유 환경 변수
	
	@Override
	protected void onStart() {

		super.onStart();
		preference = getSharedPreferences("login", this.MODE_PRIVATE);
		
		setContentView(R.layout.sub);
		editText1=(EditText) findViewById(R.id.editText1);
		editText2=(EditText) findViewById(R.id.editText2);
		checkbox=(CheckBox) findViewById(R.id.checkBox1);
		
		findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				String id = editText1.getText().toString();
				String pw = editText2.getText().toString();
				boolean auto =checkbox.isChecked();
				
				Editor editor =preference.edit();//환경변수 에디트하기
				editor.putString("id", id);
				editor.putString("pw", pw);
				editor.putBoolean("auto",auto);
				
				editor.commit(); //save
				/*어플 지울 때까지 날아가지 않고 저장 됩니다.*/				
			}
		});
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		Log.i("onPause","onPause");
	}
	
	@Override
	protected void onStop() {
		super.onStop();
		Log.i("onStop","onStop");
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		Log.i("onDestroy","onDestroy");
	}
}

editText에 아이디랑 비번을 적으면 DDMS에 값이 저장이 된다.



저장된 값이 TextView에 자동으로 호출이된다.




'Android > 2012.04월 강좌' 카테고리의 다른 글

11일차 Samples for SDK 사용하기  (0) 2012.05.10
10일차 TouchEvent  (0) 2012.05.09
10일차 TabView  (0) 2012.05.09
10일차 PullParser  (1) 2012.05.09
10일차 XMLParser  (0) 2012.05.09


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
	
	<!-- 예약어@android:id/tabhost -->
    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </TabWidget>

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <LinearLayout
                    android:id="@+id/tab1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                    <AnalogClock
                        android:layout_width="100dp"
                        android:layout_height="100dp" />
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/tab2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                    <DigitalClock
                        android:layout_width="100dp"
                        android:layout_height="100dp" />
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/tab3"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >

                    <Chronometer
                        android:layout_width="100dp"
                        android:layout_height="100dp" />
                </LinearLayout>
            </FrameLayout>
        </LinearLayout>

    </TabHost>

</LinearLayout>
sub.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <RatingBar
        android:id="@+id/ratingBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ExpandableListView
        android:id="@+id/expandableListView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ExpandableListView>

</LinearLayout>
manifast.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gusfree.tapview"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".TapViewActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="SubActivity"></activity>
    </application>

</manifest>
TapViewActivity.java
package com.gusfree.tapview;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.AnalogClock;
import android.widget.TabHost;

public class TapViewActivity extends TabActivity {

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //@android:id/tabhost
        //탭위젯에다가 제목등을 셋팅하고,
        //각각의 탭위젯과 LinearLayout을 연결해주기
        
        //1. TabHost를 불러오자 @android:id/tabhost
        //TabActivity 상속 받아서 가능한 메서드 
        TabHost tabHost = getTabHost();
        
        TabHost.TabSpec spec1 =tabHost.newTabSpec("태그1");
        TabHost.TabSpec spec2 =tabHost.newTabSpec("태그2");
        TabHost.TabSpec spec3 =tabHost.newTabSpec("태그3");
        TabHost.TabSpec spec4 =tabHost.newTabSpec("태그3");
        
        spec1.setIndicator("첫번째 스펙");
        spec2.setIndicator("",getResources().getDrawable(R.drawable.red));
        spec3.setIndicator(new AnalogClock(this));
        spec4.setIndicator("네번째");
        
        spec1.setContent(R.id.tab1);
        spec2.setContent(R.id.tab2);
        spec3.setContent(R.id.tab3);
        Intent intent =new Intent();
        intent.setClass(this,SubActivity.class);
        spec4.setContent(intent);
        
        tabHost.addTab(spec1);
        tabHost.addTab(spec2);
        tabHost.addTab(spec3);
        tabHost.addTab(spec4);
    }
}
SubActivity.java
package com.gusfree.tapview;

import android.app.Activity;

public class SubActivity extends Activity{
	
	@Override
	protected void onStart() {

		super.onStart();
		setContentView(R.layout.sub);
	}
}



'Android > 2012.04월 강좌' 카테고리의 다른 글

10일차 TouchEvent  (0) 2012.05.09
10일차 Login  (0) 2012.05.09
10일차 PullParser  (1) 2012.05.09
10일차 XMLParser  (0) 2012.05.09
10일차 BroadcastReceiver  (0) 2012.05.09


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <TextView
        android:tag="hi"
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" 
        android:background="#99dd99"/>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

</LinearLayout>
test.xml
<?xml version="1.0" encoding="UTF-8"?>
<test>
	<item>
	    <name>치킨</name>
	    <price>15000</price>
	    <location>묵동</location>
	    <market>페리카나</market>
	    <image></image>
	</item>
	
	<item>
	    <name>토스트</name>
	    <price>1600</price>
	    <location>묵동</location>
	    <market>이삭토스트</market>
	    <image>http://png-2.findicons.com/files//icons/2010/free_food/128/bread1.png</image>
	</item>
	
	<item>
	    <name>피자</name>
	    <price>8000</price>
	    <location>묵동</location>
	    <market>피자스쿨</market>
	    <image>http://png-5.findicons.com/files//icons/342/food/128/pizza_slice.png</image>
	</item>
</test>
manifast.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xmlparserexercise"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".PullParserActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
PullParserActivity.xml
package com.xmlparserexercise;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;

import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;


public class PullParserActivity extends Activity{

	ListView listView;
	//Item을 담을 Collection
	ArrayList<Item> list=new ArrayList<Item>();

	@Override
	protected void onResume() {
		super.onResume();
		setContentView(R.layout.main);
		listView=(ListView) findViewById(R.id.listView1);

		//  res/xml/test.xml를 읽는 parser호출
		XmlResourceParser parser =getResources().getXml(R.xml.test);
		try{
			int eventType =parser.getEventType();
			/* START_DOCUMENT = 0
			 * END_DOCUMENT = 1
			 * START_TAG = 2
			 * END_TAG = 3
			 * TEXT = 4*/		
			String name="";
			String price="";
			String image="";
			String tag="";
			String text="";

			boolean isEnd=true;
			while(isEnd){
				switch(eventType){
				case 0:		//START_DOCUMENT = 0
					Log.e("START_DOCUMENT","START_DOCUMENT"+parser.getName());
					break;

				case 1:		//END_DOCUMENT = 1
					Log.e("END_DOCUMENT","END_DOCUMENT"+parser.getName());
					isEnd=false;
					break;

				case 2:		//START_TAG = 2
					Log.i("START_TAG","START_TAG"+parser.getName());
					break;

				case 3:		//END_TAG = 3
					Log.w("END_TAG","END_TAG"+parser.getName());
					//....떡볶이</
					if(parser.getName().equals("name")){
						name=text;
						//2000</price>	
					}else if(parser.getName().equals("price")){
						price=text;//name="떡볶이" price="2000" 완성됨
						Item item = new Item(name,price);//객체 생성
						
					}else if(parser.getName().equals("image")){
						image=text;
						Item item = new Item(name,price,image);
						list.add(item);
					}
					break;

				case 4:		//TEXT = 4
					Log.d("TEXT","TEXT"+parser.getName());
					text=parser.getText();
					break;
				}
				eventType=parser.next();//다음으로 이동
			}//while문 끝

			MyAdapter adapter= new MyAdapter();
			listView.setAdapter(adapter);

		}catch(Exception e){

		}
	}
	class MyAdapter extends BaseAdapter{

		@Override
		public int getCount() {
			return list.size();
			//return list.size();
		}

		@Override
		public Object getItem(int arg0) {
			return null;
		}

		@Override
		public long getItemId(int arg0) {
			return 0;
		}

		@Override
		public View getView(int position, View arg1, ViewGroup arg2) {
			/* item.xml을 불러와서 이 안에 있는 TextView에
			 * Collection안에 들은 Item객체의 값을 셋팅하고
			 * Item.xml을 retrun하기*/

			LinearLayout layout=
					(LinearLayout)View.inflate(getApplicationContext(), R.layout.item, null);
			Item oneItem = list.get(position);

			//layout에서 textView를 찾아서 findViewById
			//oneItem의 필드값으로 셋팅하기
			TextView tv1 = (TextView)layout.findViewById(R.id.textView1);
			TextView tv2 = (TextView)layout.findViewWithTag("hi");
			ImageView imgV=(ImageView)layout.findViewById(R.id.imageView1);
			
			tv1.setText(oneItem.name);
			tv2.setText(oneItem.price);
			
			if(oneItem.image!=null){
				try {
					URL url=new URL(oneItem.image);
					try {
						InputStream is=url.openStream();
						Bitmap bitmap =BitmapFactory.decodeStream(is);
						imgV.setImageBitmap(bitmap);
					} catch (IOException e) {
						e.printStackTrace();
					}
				} catch (MalformedURLException e) {
					e.printStackTrace();
				}
			}
			
			return layout;
		}
	}
	class Item{//innerClass XML의 한단위에 해당
		String name="";
		String price="";
		String image="";
		
		public Item(String n,String p){
			name=n;
			price=p;
		}
		
		//생성자 오버로딩,다양성
		public Item(String n,String p,String i){
			name=n;
			price=p;
			image=i;
		}
	}
}



'Android > 2012.04월 강좌' 카테고리의 다른 글

10일차 Login  (0) 2012.05.09
10일차 TabView  (0) 2012.05.09
10일차 XMLParser  (0) 2012.05.09
10일차 BroadcastReceiver  (0) 2012.05.09
10일차 Alarm  (0) 2012.05.09

+ Recent posts