티스토리 뷰

1. 웹서버에 php 작성

서버에서는 아래와 같은 방식으로 처리한다.

$_GET example

Example #1 $_GET example

<?php
echo 'Hello ' htmlspecialchars($_GET["name"]) . '!';
?>

Assuming the user entered http://example.com/?name=Hannes

위 예제의 출력 예시:

Hello Hannes!

주의 ¶

Note

이는 '자동전역' 변수입니다. 스크립트의 모든 영역에서 사용할 수 있습니다. 함수나 메쏘드 안에서 접근하기 위해서 global $variable;를 할 필요가 없습니다.

Note

The GET variables are passed through urldecode().

<?php

        define("HOST","en605.woobi.co.kr");

        define("USER","en605");

        define("PASSWD","1230");

        define("DB_NAME","en605");


        $connect = mysql_connect(HOST, USER, PASSWD) or die("Fail to connect to SQL Server");


        mysql_select_db(DB_NAME, $connect);


        /* _GET[fIELD1] is the first parameter that you have get from Adnroid Applcation */

        $sql = "INSERT INTO gcmtest911224(id) VALUES('$_GET[id]')";


        session_start();


        $result = mysql_query( $sql, $connect);

        mysql_close($connect);

        echo "$result";

?>

~                                                                               

~                                                                               

"gcmtest_insert.php" 19L, 503C                                17,2-9       모두

여기서 변수명이id이고  받고싶은 스트링값이 "test1123" 이라면
$sql = "INSERT INTO gcmtest911224(id) VALUES('$_GET[id]')";

http://en605.woobi.co.kr/incident_alarm/gcmtest_insert.php?id=" + this.id

****.php?변수명=스트링값

$result = mysql_query( $sql$connect);
그리고 insert 쿼리문의 반환값은 삽입된 행의 개수이거나 그렇지않으면 -1이 반환된다.
(초롱: DB작업에서는 그냥 값만 반환시키고 앱단에서 그 값을 가지고 어떻게 실행할지를 결정하자. DB는 거의 모든곳에서 쓰이기 때문이다.)

2.안드로이드 애플리케이션에서 호출

phpInsert task_insert;
Button sendID_btn ;
EditText idTxt;

String id ;

public void sendID_btnOnClicked(View v)
{
task_insert = new phpInsert();
id = idTxt.getText().toString();
task_insert.execute("http://en605.woobi.co.kr/incident_alarm/gcmtest_insert.php?id=" + this.id);
}

위의 onClicked핸들러얘서 task_insert AsyncTask instance는 삽입을 할때마다 계속 생성해주어야한다. (한번만 생성해주고 두번이상 삽입할때 실행한다면 에러가 뜬다.)

 private class phpInsert extends AsyncTask<String, Integer,String>{

@Override
protected String doInBackground(String... urls) {
StringBuilder resultText = new StringBuilder();
try{
// 연결 url 설정
URL url = new URL(urls[0]);
// 커넥션 객체 생성
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
// 연결되었으면.
if(conn != null){
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
// 연결되었음 코드가 리턴되면.
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
for(;;){
// 웹상에 보여지는 텍스트를 라인단위로 읽어 저장.
String line = br.readLine();
if(line == null) break;
// 저장된 텍스트 라인을 jsonHtml에 붙여넣음
resultText.append(line);
}
br.close();
}
conn.disconnect();
}
} catch(Exception ex){
ex.printStackTrace();
}
return resultText.toString();

}

protected void onPostExecute(String str){
if(str.equals("1")){
Toast.makeText(getApplicationContext(),"DB Insert Complete.",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),"DB Insert Failed.",Toast.LENGTH_LONG).show();
}

}

}

onPostExecute메서드는 백그라운드 작업이 끝난후 시작되고, 메인스레드에서 실행된다.
그래서 액티비티에 Toast를 띄울수있다.(주의! show()를 꼭 붙여주자... 안그럼 알림창이 뜨지않는다.)

전체 MainActivity.class 코드
package com.example.gcmnovaktest;

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.MulticastResult;
import com.google.android.gcm.server.Sender;
import com.google.android.gms.gcm.GoogleCloudMessaging;

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Random;


public class MainActivity extends ActionBarActivity {

ImageView imView;
TextView txtView;
Bitmap bmImg;
//back task;
phpDown task;
phpInsert task_insert;
ArrayList<ListItem> listitem = new ArrayList<ListItem>();
ListItem Item;

public static final String TAG = "MainActivity";
EditText messageInput;
TextView messageOutput;

Button sendID_btn ;
EditText idTxt;
String id ;


Sender sender;

Handler handler = new Handler();

/**
* a Random instance in order to set collapseKey
*/
private Random random;

/*
* the time that google server store the message (until 4 weeks as seconds
*/
private int TTLTime = 60;

/*
* the count resending message to a gadget
**/
private int RETRY = 3;


/*
* save id registered
**/
ArrayList<String> idList = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
task = new phpDown();
//task_insert = new phpInsert();
txtView = (TextView)findViewById(R.id.txtView);

task.execute("http://en605.woobi.co.kr/incident_alarm/gcmtest.php");

/***********/
// 서버 : GOOGLE_API_KEY를 이용해 Sender 초기화
sender = new Sender(GCMInfo.GOOGLE_API_KEY);

// 서버 : 전송할 메시지 입력 박스
messageInput = (EditText) findViewById(R.id.messageInput);

// 수신할 메시지 출력 박스
messageOutput = (TextView) findViewById(R.id.messageOutput);


// 단말 등록하기 버튼
Button registerButton = (Button) findViewById(R.id.registerButton);
registerButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
// 단말 등록하고 등록 ID 받기
registerDevice();

} catch(Exception ex) {
ex.printStackTrace();
}
}
});

// 서버 : 전송하기 버튼
Button sendButton = (Button) findViewById(R.id.sendButton);
sendButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String data = messageInput.getText().toString();

sendToDevice(data);
}
});

// 인텐트를 전달받는 경우
Intent intent = getIntent();
if (intent != null) {
processIntent(intent);
}


sendID_btn = (Button) findViewById(R.id.sendID_btn);
idTxt = (EditText) findViewById(R.id.idtxt);
id = idTxt.getText().toString();

}

public void sendID_btnOnClicked(View v)
{
task_insert = new phpInsert();
id = idTxt.getText().toString();
task_insert.execute("http://en605.woobi.co.kr/incident_alarm/gcmtest_insert.php?id=" + this.id);
}

/**
* 단말 등록
*/
private void registerDevice() {

RegisterThread registerObj = new RegisterThread();
registerObj.start();

}

/**
* 푸시 메시지 전송
*/
private void sendToDevice(String data) {

SendThread thread = new SendThread(data);
thread.start();

}

class RegisterThread extends Thread {
public void run() {

try {
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getApplicationContext());
String regId = gcm.register(GCMInfo.PROJECT_ID);
println("푸시 서비스를 위해 단말을 등록했습니다.");
println("등록 ID : " + regId);
Toast.makeText(getApplicationContext(),regId,Toast.LENGTH_LONG).show();
// 등록 ID 리스트에 추가 (현재는 1개만)
idList.clear();
idList.add(regId);

} catch(Exception ex) {
ex.printStackTrace();
}

}
}

private void println(String msg) {
final String output = msg;
handler.post(new Runnable() {
public void run() {
Log.d(TAG, output);
Toast.makeText(getApplicationContext(), output, Toast.LENGTH_LONG).show();
}
});
}


/**
* GCM 메시지 전송을 위한 스레드
*/
class SendThread extends Thread {
String data;

public SendThread(String inData) {
data = inData;
}

public void run() {

try {
sendText(data);
} catch(Exception ex) {
ex.printStackTrace();
}

}

public void sendText(String msg)
throws Exception
{

if( random == null){
random = new Random(System.currentTimeMillis());
}

String messageCollapseKey = String.valueOf(Math.abs(random.nextInt()));

try {
// 푸시 메시지 전송을 위한 메시지 객체 생성 및 환경 설정
Message.Builder gcmMessageBuilder = new Message.Builder();
gcmMessageBuilder.collapseKey(messageCollapseKey).delayWhileIdle(true).timeToLive(TTLTime);
gcmMessageBuilder.addData("type","text");
gcmMessageBuilder.addData("command", "show");
gcmMessageBuilder.addData("data", URLEncoder.encode(data, "UTF-8"));

Message gcmMessage = gcmMessageBuilder.build();

// 여러 단말에 메시지 전송 후 결과 확인
MulticastResult resultMessage = sender.send(gcmMessage, idList, RETRY);
String output = "GCM 전송 메시지 결과 => " + resultMessage.getMulticastId()
+ "," + resultMessage.getRetryMulticastIds() + "," + resultMessage.getSuccess();

println(output);

} catch(Exception ex) {
ex.printStackTrace();

String output = "GCM 메시지 전송 과정에서 에러 발생 : " + ex.toString();
println(output);

}

}
}

@Override
protected void onNewIntent(Intent intent) {
Log.d(TAG, "onNewIntent() called.");

processIntent(intent);

super.onNewIntent(intent);
}

/**
* 수신자로부터 전달받은 Intent 처리
*
* @param intent
*/
private void processIntent(Intent intent) {
String from = intent.getStringExtra("from");
if (from == null) {
Log.d(TAG, "from is null.");
return;
}

String command = intent.getStringExtra("command");
String type = intent.getStringExtra("type");
String data = intent.getStringExtra("data");

println("DATA : " + command + ", " + type + ", " + data);
messageOutput.setText("[" + from + "]로부터 수신한 데이터 : " + data);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, 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();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}



private class phpDown extends AsyncTask<String, Integer,String>{

@Override
protected String doInBackground(String... urls) {
StringBuilder jsonHtml = new StringBuilder();
try{
// 연결 url 설정
URL url = new URL(urls[0]);
// 커넥션 객체 생성
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
// 연결되었으면.
if(conn != null){
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
// 연결되었음 코드가 리턴되면.
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
for(;;){
// 웹상에 보여지는 텍스트를 라인단위로 읽어 저장.
String line = br.readLine();
if(line == null) break;
// 저장된 텍스트 라인을 jsonHtml에 붙여넣음
jsonHtml.append(line + "\n");
}
br.close();
}
conn.disconnect();
}
} catch(Exception ex){
ex.printStackTrace();
}
return jsonHtml.toString();

}

/*
protected void onPostExecute(String str){
txtView.setText(str);
}
*/

protected void onPostExecute(String str){
String id;

try{
JSONObject root = new JSONObject(str);
JSONArray ja = root.getJSONArray("results"); //get the JSONArray which I made in the php file. the name of JSONArray is "results"

for(int i=0;i<ja.length();i++){
JSONObject jo = ja.getJSONObject(i);
id = jo.getString("id");
listitem.add(new ListItem(id));
}
}catch (JSONException e){
e.printStackTrace();
}
txtView.setText("id : "+listitem.get(0).getData(0));
}

}


private class phpInsert extends AsyncTask<String, Integer,String>{

@Override
protected String doInBackground(String... urls) {
StringBuilder resultText = new StringBuilder();
try{
// 연결 url 설정
URL url = new URL(urls[0]);
// 커넥션 객체 생성
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
// 연결되었으면.
if(conn != null){
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
// 연결되었음 코드가 리턴되면.
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
for(;;){
// 웹상에 보여지는 텍스트를 라인단위로 읽어 저장.
String line = br.readLine();
if(line == null) break;
// 저장된 텍스트 라인을 jsonHtml에 붙여넣음
resultText.append(line);
}
br.close();
}
conn.disconnect();
}
} catch(Exception ex){
ex.printStackTrace();
}
return resultText.toString();

}

protected void onPostExecute(String str){
if(str.equals("1")){
Toast.makeText(getApplicationContext(),"DB Insert Complete.",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),"DB Insert Failed.",Toast.LENGTH_LONG).show();
}

}

}

}









댓글
댓글쓰기 폼
공지사항
Total
93,833
Today
0
Yesterday
12
«   2019/07   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
글 보관함