Maria DB ↔ PHP ↔ Android 연동하기 - 4. JSON 파싱하기
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
Maria DB ↔ PHP ↔ Android 연동하기 - 4. JSON 파싱하기
Maria DB ↔ PHP ↔ Android 연동하기 - 3. 외부 접속 설정하기 를 안 보셨다면 먼저 보시는 것을 추천드립니다.
전 포스팅에서 로컬에 있는 php 파일을 외부에서 접근할 수 있게 해 주었습니다. 이제 이 php 파일에 있는 JSON을 파싱 해서 사용하겠습니다.
먼저 인터넷을 사용해야 하기 때문에 Manifest.xml에 인터넷 사용허가 코드를 넣어줘야 합니다.
추가로 안드로이드 Pi 버전이상을 사용 중이라면 application 태그 안에 androidandroid:usesCleartextTraffic="true"도 추가해줘야 합니다.
추가하지 않으면 ava.io.IOException: Cleartext HTTP traffic to not permitted 에러가 발생하게 됩니다.
파싱 한 값을 저장할 클래스를 하나 만들어줍니다.
public class Tree { String name; // 이름 String category; // 카테고리 String keyword; // 키워드 ... public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public String getKeyword() { return keyword; } public void setKeyword(String keyword) { this.keyword = keyword; } ... }
get과 set은 일일이 입력하는 것보다 변수를 입력하고 드래그 후 Alt + Insert를 눌러 Getter and Setter를 눌러주고 추가를 해줍니다.
activity_main.xml에는 간단하게 TextView만 넣어주었습니다.
MainActivity.java에는 AsyncTask를 사용합니다.
package com.example.treemanagement; import android.content.pm.ActivityInfo; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; 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.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private TextView textView; 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.textView); JsonParse jsonParse = new JsonParse(); // AsyncTask 생성 jsonParse.execute("http://아이피주소:포트번호/php명.php"); // AsyncTask 실행 } public class JsonParse extends AsyncTask { String TAG = "JsonParseTest"; @Override protected String doInBackground(String... strings) { // execute의 매개변수를 받아와서 사용 String url = strings[0]; try { URL serverURL = new URL(url); HttpURLConnection httpURLConnection = (HttpURLConnection) serverURL.openConnection(); httpURLConnection.setReadTimeout(5000); httpURLConnection.setConnectTimeout(5000); httpURLConnection.connect(); 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); String errorString = e.toString(); return null; } } @Override protected void onPostExecute(String fromdoInBackgroundString) { // doInBackgroundString에서 return한 값을 받음 super.onPostExecute(fromdoInBackgroundString); if(fromdoInBackgroundString == null) textView.setText("error"); else { jsonString = fromdoInBackgroundString; treeArrayList = doParse(); Log.d(TAG,treeArrayList.get(0).getName()); textView.setText(treeArrayList.get(0).getName()); } } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } private ArrayList doParse() { ArrayList tmpTreeArray = new ArrayList(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray("Tree"); for(int i=0;i
로그를 확인해보면 제대로 받아와 지는 것을 확인할 수 있습니다.
from http://1d1cblog.tistory.com/133 by ccl(A) rewrite - 2020-03-23 01:20:09
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
댓글
댓글 쓰기