Maria DB ↔ PHP ↔ Android 연동하기 - 5. 어플에서 php로 데이터 전송
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Maria DB ↔ PHP ↔ Android 연동하기 - 5. 어플에서 php로 데이터 전송
Maria DB ↔ PHP ↔ Android 연동하기 - 4. JSON 파싱하기를 안보셨다면 먼저 보시는 것을 추천드립니다.
전 포스팅에서는 connect.php로 DB 테이블의 모든 값을 읽어 json 형식으로 되어있는 것을 어플에서 불러오는것을 해보았습니다.
이제 EditText로 원하는 값만 select하여 불러오는 것을 해보겠습니다.
안드로이드 코딩을 하기 전 새로운 php 파일을 만들어주겠습니다. 파일명은 select.php로 해주겠습니다.
tree_name이라는 변수에 어플로부터 받아온 값을 넣어주게 됩니다.
$row[0],'카테고리'=>$row[1],'키워드'=>$row[2],'보유수량'=>$row[3], '주당가격'=>$row[4],'위치'=>$row[5],'특이사항'=>$row[6],'수고'=>$row[7], '근원직경'=>$row[8],'흉고직경'=>$row[9],'수관폭'=>$row[10],'수관길이'=>$row[11], '지하고'=>$row[12],'육종방법'=>$row[13],'입력시간'=>$row[14])); } echo json_encode(array("Tree"=>$result), JSON_UNESCAPED_UNICODE); mysqli_close($con); ?>
전포스팅과 마찬가지로 Manifest.xml에 인터넷 사용허가와 usesCleartextTraffic="true"를 추가해줍니다.
layout_main.xml 입니다. EditText로 나무 이름을 입력 후 버튼을 클릭하면 treeLocation TextView에 나무의 위치를 띄워주게 됩니다.
다음으로 MainActivity.java 입니다.
코드에도 주석으로 남겨두었지만 String selectData에서 "Data="과 php의 post[ ]안의 'Data'이 같아야 합니다.
package com.example.treemanagement; import android.content.pm.ActivityInfo; import android.os.AsyncTask; import android.os.Handler; import android.os.HandlerThread; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.Editable; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private TextView textView; private EditText editText; private Button button; private String jsonString; ArrayList treeArrayList; // 나무정보들을 저장할 ArrayList @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.treeLocation); editText = (EditText) findViewById(R.id.editText); button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final JsonParse jsonParse = new JsonParse(); // AsyncTask 생성 jsonParse.execute("http://121.153.150.157:81/select.php"); // AsyncTask 실행 } }); } public class JsonParse extends AsyncTask { String TAG = "JsonParseTest"; @Override protected String doInBackground(String... strings) { // execute의 매개변수를 받아와서 사용 String url = strings[0]; try { String selectData = "Data=" + editText.getText().toString(); // 따옴표 안과 php의 post [ ] 안이 이름이 같아야 함 URL serverURL = new URL(url); HttpURLConnection httpURLConnection = (HttpURLConnection) serverURL.openConnection(); httpURLConnection.setReadTimeout(5000); httpURLConnection.setConnectTimeout(5000); httpURLConnection.setRequestMethod("POST"); httpURLConnection.connect(); OutputStream outputStream = httpURLConnection.getOutputStream(); outputStream.write(selectData.getBytes("UTF-8")); outputStream.flush(); outputStream.close(); // 어플에서 데이터 전송 int responseStatusCode = httpURLConnection.getResponseCode(); InputStream inputStream; if(responseStatusCode == HttpURLConnection.HTTP_OK) { inputStream = httpURLConnection.getInputStream(); } else{ inputStream = httpURLConnection.getErrorStream(); } // 연결 상태 확인 InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuilder sb = new StringBuilder(); String line; while((line = bufferedReader.readLine()) != null){ sb.append(line); } bufferedReader.close(); Log.d(TAG, sb.toString().trim()); return sb.toString().trim(); // 받아온 JSON 의 공백을 제거 } catch (Exception e) { Log.d(TAG, "InsertData: Error ", e); return null; } } @Override protected void onPostExecute(String fromdoInBackgroundString) { // doInBackgroundString에서 return한 값을 받음 super.onPostExecute(fromdoInBackgroundString); if(fromdoInBackgroundString == null) textView.setText("error"); else { jsonString = fromdoInBackgroundString; treeArrayList = doParse(); if(treeArrayList.size() == 0) textView.setText("검색결과 없음"); // 객체의 크기가 0일때는 검색 결과가 없을 때이므로 검색결과 없음 설정 else textView.setText(treeArrayList.get(0).getLocation()); } } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } @Override protected void onCancelled(String s) { super.onCancelled(s); } private ArrayList doParse() { ArrayList tmpTreeArray = new ArrayList(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray("Tree"); for(int i=0;i
참고자료 : https://twinw.tistory.com/29
from http://1d1cblog.tistory.com/134 by ccl(A) rewrite - 2020-03-24 21:54:09
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
댓글
댓글 쓰기