마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

[질문 수정하였습니다.]안드로이드 php mysql 연동중 질문입니다.

0 추천

안녕하세요 ^^

mysql에 저장된 데이터를 php를 이용해서 안드로이드로 전송하려고 합니다.

그런데 안드로이드에서 실행 시켜보면 흰 화면만 보이고 아무것도 나오지 않습니다.

메니페스트에 퍼미션 추가했고 php에서 db정보도 잘 나옵니다.

혹시나 싶어 맨 아래 try catch에서 각각 로그값을 입력해보니

try가 실행이 안되고 catch에서만 실행이 됩니다.

어떻게 해결해야 하는지좀 알려주세요.

 

package com.example.test;

import android.app.Activity;
import android.os.AsyncTask;
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.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;

public class MainActivity extends Activity {

    TextView txtView;
    phpDown task;
    ListItem Item;
    ArrayList<ListItem> listItem= new ArrayList<ListItem>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        task = new phpDown();
        txtView = (TextView)findViewById(R.id.txtView);
        //imView = (ImageView) findViewById(R.id.imageView1);
        task.execute("http://192.168.0.1/setter.php");
    }

    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){
            String id;
            String pw;
            String name;
            String email;
            try{
                JSONObject root = new JSONObject(str);
                JSONArray ja = root.getJSONArray("results");

                for(int i=0; i<ja.length(); i++){
                    JSONObject jo = ja.getJSONObject(i);
                    id = jo.getString("id");
                    pw = jo.getString("pw");
                    name = jo.getString("name");
                    email = jo.getString("email");
                    Log.i("TEST_LOG", id);
                    listItem.add(new ListItem(id,pw,name,email));
                }
            }catch(JSONException e){
                Log.v("TEST_LOG", "jsonexception e");
                e.printStackTrace();
            }
            txtView.setText("id :"+listItem.get(0).getData(0)+"\n pw:"+ listItem.get(0).getData(1)+"\n name:"+listItem.get(0).getData(2)+"id :"+listItem.get(0).getData(3));
        }
    }
}
학생2 (500 포인트) 님이 2016년 5월 21일 질문
학생2님이 2016년 5월 22일 수정

2개의 답변

+1 추천
 
채택된 답변
try, catch 구문은 try안의 소스들이 정상작동하면 catch를 호출하지 않습니다.

catch가 호출 되었다는 것은 try 구문에서 Exception이 발생했기 때문입니다.

Exception을 출력해보면 어떤 에러인지 나옵니다.

 try 부분 첫번째부터 디버깅을 해서 한줄씩 넘어가면서 어디에서 죽는지 찾는것이 먼저입니다.
캬옹이 (37,920 포인트) 님이 2016년 5월 23일 답변
학생2님이 2016년 5월 24일 채택됨
말씀하신대로 Log를 이용해서 어디가 안나오는지 찾았습니다
해결해보니 URL주소가 문제였네요 혹시나 이거보시는분들
localhost를 URL주소로 이용하시면 안드로이드에서 주소를 인식하지 못한다고합니다.
그래서 10.0.2.2라는 주소를 이용해서 파싱 성공했어요.
0 추천
php에서 json 형식으로 바꾸셨나요?
익명사용자 님이 2016년 5월 23일 답변
...