안녕하세요 ^^
php를 이용해 자바에서 컨텐츠를 받아오려합니다. 전체적인 구성은 안드로이드에서 컨텐츠 번호가 저장되는 변수를 post로 php 로 보내서 php 가 데이터 베이스에서 해당하는 자료들을 JSON으로 변환해 다시 안드로이드로 보내주는 방식입니다.
근데 안드로이드에서 보면 아무 자료도 받아오질 못합니다. 예를 들어 $content_no 대신에 305 라는 컨텐츠 번호를 집어넣으면 해당 자료를 잘 받아옵니다. (때문에 안드로이드엔 이상이 없다고 생각합니다)
변수가 제대로 POST 되지 않나 싶어서
$zz = mysqli_query($regsqli,"insert into Regid (regid) values ('$content_no')"); 도 같이 집어넣어봤는데
데이터베이스에 해당 변수에 담긴 자료가 잘 저장됩니다;
대체 왜 그런거죠?
<?
// define('__XE__', true);
$DB['host'] = 'localhost';
$DB['db'] = '디비';
$DB['id'] = '아이디';
$DB['pw'] = '아이디';
$regsqli = new mysqli($DB['host'], $DB['id'], $DB['pw'], $DB['db']);
$Re = array();
$content_no = $_POST['content_no'];
$res = mysqli_query($regsqli,"select object_id from wp_term_relationships where term_taxonomy_id
LIKE '13'");
$Re = array();
//$zz = mysqli_query($regsqli,"insert into Regid (regid) values ('$content_no')");
$res4 = mysqli_query($regsqli,"select guid from wp_posts where post_parent
LIKE $content_no and post_type LIKE 'attachment' ");
while($result4 = mysqli_fetch_array($res4)){
array_push($Re,
array('post_content'=>$result4[0]
));
}
echo json_encode(array("little_known"=>$Re));
//끝
?>
아래는 안드로이드 코드입니다.
private void insertToDatabase(String content_no){
class InsertData extends AsyncTask<String, Void, String>{
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
gPHP = new GettingPHP(); // php 받는거
gPHP.execute(url); // php 받는거
}
@Override
protected String doInBackground(String... params) {
try{
String content_no = (String)params[0];
String link=url;
String data = URLEncoder.encode("content_no", "UTF-8") + "=" + URLEncoder.encode(content_no, "UTF-8");
URL url = new URL(link);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write( data );
wr.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while((line = reader.readLine()) != null)
{
sb.append(line);
break;
}
return sb.toString();
}
catch(Exception e){
return ("Exception: " + e.getMessage());
}
}
}
InsertData task = new InsertData();
task.execute(content_no);
Log.d("ok8", content_no);
}
class GettingPHP extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
StringBuilder jsonHtml = new StringBuilder();
try {
URL phpUrl = new URL(params[0]);
HttpURLConnection conn = (HttpURLConnection) phpUrl.openConnection();
if (conn != null) {
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while (true) {
String line = br.readLine();
if (line == null)
break;
jsonHtml.append(line + "\n");
}
br.close();
}
conn.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
Log.d("ok3",content_no);
return jsonHtml.toString();
}
protected void onPostExecute(String str) {
Log.d("ok4",content_no);
try {
// PHP에서 받아온 JSON 데이터를 JSON오브젝트로 변환
JSONObject jObject = new JSONObject(str);
// results라는 key는 JSON배열로 되어있다.
JSONArray results = jObject.getJSONArray("little_known");
Log.d("ok5",content_no);
List<post_data> items=new ArrayList<>();
for ( int i = 0; i < results.length(); i++ ) {
Log.d("ok6", content_no);
JSONObject temp = results.getJSONObject(i);
post_thum = temp.getString("post_content"); //게시글 썸네일 and php 에 등록한 키
Log.d("ok2",post_thum);
post_data[] item=new post_data[i+1];
item[i]=new post_data(post_thum , "ㅎㅎ..ㅈㅅ;;..ㅋㅋ");
items.add(item[i]);
// 갯수를 딱 맞춰야함
recyclerView.setAdapter(new post_list_thum(getApplicationContext(), items, R.layout.post_little_known));
}
Log.d("ok7",content_no);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}