안드로이드에서 php를 이용해 값을 가져오는 것이 안됩니다.

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
안드로이드에서 php를 이용해 값을 가져오는 것이 안됩니다.

QA

안드로이드에서 php를 이용해 값을 가져오는 것이 안됩니다.

본문

이 코드일때는 실행이 되고 값이 가져와지는데


<?php
$con = mysqli_connect("localhost", "11", "11", "11");
if (!$con)  
{  
    echo "MySQL 접속 에러 : ";
    echo mysqli_connect_error();
    exit();  
} 
mysqli_set_charset($con,"utf8");
$sql = "SELECT * FROM answer";
$result = mysqli_query($con, $sql);
$data = array();   
if($result){  
    while($row=mysqli_fetch_array($result)){
        array_push($data, 
            array('a_id'=>$row[0],
                'a_title'=>$row[1],
                'a_content'=>$row[2],
                'a_completed'=>$row[3]
            ));
    }
    echo "<pre>"; print_r($data); echo '</pre>'; 
}
else{  
    echo "SQL문 처리중 에러 발생 : "; 
    echo mysqli_error($con);
} 
mysqli_close($con);
?>

 

이 코드일때는 실행이 되어도 값이 아무런 값도 가져와지지 않습니다.


<?php
$con = mysqli_connect("localhost", "11", "11", "11");
if (!$con)  
{  
    echo "MySQL 접속 에러 : ";
    echo mysqli_connect_error();
    exit();  
} 
mysqli_set_charset($con,"utf8");
$sql = "SELECT * FROM answer";
$result = mysqli_query($con, $sql);
$data = array();   
if($result){  
    while($row=mysqli_fetch_array($result)){
        array_push($data, 
            array('a_id'=>$row[0],
                'a_title'=>$row[1],
                'a_content'=>$row[2],
                'a_completed'=>$row[3]
            ));
    }
    header('Content-Type: application/json; charset=utf8');
    $json = json_encode(array("webnautes"=>$data), JSON_PRETTY_PRINT+JSON_UNESCAPED_UNICODE);
    echo $json;
}
else{  
    echo "SQL문 처리중 에러 발생 : "; 
    echo mysqli_error($con);
} 
mysqli_close($con);
?>

 

앱에서 값을 받는 코드 입니다.



import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.navigation.fragment.NavHostFragment;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;

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.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;

/**
 * A simple { Fragment} subclass.
 * Use the { QnAFragment#newInstance} factory method to
 * create an instance of this fragment.
 */
public class QnAFragment extends Fragment {
    private String q_id, q_time, q_title, q_content, a_completed; //아이디값 가져올 객체
    private EditText e_title, e_content;
    private Context mContext;

    private SimpleAdapter mSAdapter;
    private ListView mListView;
    private ArrayList<HashMap<String,String>> mListData;
    String mJsonString;

    private static String TAG = "phptest_MainActivity";

    private static final String TAG_JSON="webnautes";
    private static final String TAG_id = "a_id";
    private static final String TAG_title = "a_title";
    private static final String TAG_content = "a_content";
    private static final String TAG_comleted ="a_completed";


    private TextView textView18;

    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    public QnAFragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     *  param1 Parameter 1.
     *  param2 Parameter 2.
     *  A new instance of fragment QnAFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static QnAFragment newInstance(String param1, String param2) {
        QnAFragment fragment = new QnAFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_qn_a, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        //리스트뷰 얻어오기
        mListView = this.getActivity().findViewById(R.id.QnAList);

        //에러 판단
        textView18 = getActivity().findViewById(R.id.textView18);

        //시간 얻어오기
        long mNow = System.currentTimeMillis();
        Date mReDate = new Date(mNow);
        SimpleDateFormat mFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        q_time = mFormat.format(mReDate);

        //문의 제목, 내용 받아오기
        e_title = getActivity().findViewById(R.id.editTextQnAtitle);
        e_content = getActivity().findViewById(R.id.editTextQnAcontent);

        mContext = getActivity();
        q_id = PreferenceManager.getString(mContext, "user_id");

        //작성완료 버튼
        Button buttonFinishWrite = getActivity().findViewById(R.id.buttonFinishWrite);
        buttonFinishWrite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //문의 제목 또는 내용이 비어있는 경우
                if(e_title.getText().toString().equals("") ||e_content.getText().toString().equals("")){
                    Toast.makeText(getActivity(),"문의 제목과 내용을 모두 입력해주세요.",Toast.LENGTH_SHORT).show();
                    return;
                }

                //editText에 입력된 값을 가져옴
                q_title = e_title.getText().toString();
                q_content = e_content.getText().toString();

                //QnA 정보를 DB에 넣는것이 잘 완료되었는지 확인
                Response.Listener<String> responseLisner = new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            boolean success = jsonObject.getBoolean("success"); //QnA 등록이 성공했는지 성공여부를 담음 (jsp에서 성공하면 response["success"] = true; 해준것을 받아옴)
                            if (success) { //QnA 등록에 성공한 경우
                                Toast.makeText(getActivity(), "질문 등록이 완료되었습니다.", Toast.LENGTH_SHORT).show();
                            } else{ //QnA 등록에 실패한 경우
                                Toast.makeText(getActivity(), "질문 등록에 실패하였습니다.", Toast.LENGTH_SHORT).show();
                                return;
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                };

                //서버로 Volley를 이용해서 요청함
                QnARequest qndRequest = new QnARequest(q_id, q_time, q_title, q_content, responseLisner);
                RequestQueue queue = Volley.newRequestQueue(getActivity());
                queue.add(qndRequest);
            }
        });

//        //리스트
//        mListData = new ArrayList<>();
//        mSAdapter = new SimpleAdapter(this.getActivity(), mListData, R.layout.qna_list,
//                new String[] {"Qtitle","Qcontent","Atitle","Answer"}, new int[] {R.id.textViewQtitle, R.id.textViewQcontent, R.id.textViewAtitle, R.id.textViewAnswer});
//        mListView = this.getActivity().findViewById(R.id.QnAList);
//        mListView.setAdapter(mSAdapter);

        //리스트 안에 넣어질 값 (받아와야함)
//        HashMap<String,String> hitem = new HashMap<>();
//        hitem.put("Qtitle", "고객센터에 질문한 타이틀");
//        hitem.put("Qcontent", "고객센터에 질문한 내용");
//        hitem.put("Atitle", "답변 타이틀");
//        hitem.put("Answer", "답변 내용");
//        mListData.add(hitem);
//        mSAdapter.notifyDataSetChanged();





        GetData task = new GetData();
        task.execute("http://ci2021ani.dongyangmirae.kr/lsj/answerapp2.php");
    }


    private class GetData extends AsyncTask<String, Void, String> {
        ProgressDialog progressDialog;
        String errorString = null;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            progressDialog = ProgressDialog.show(getActivity(),
                    "Please Wait", null, true, true);
        }


        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            progressDialog.dismiss();
            textView18.setText(result);
            Log.d(TAG, "response  - " + result);

            if (result == null){

                textView18.setText(errorString);
            }
            else {

                mJsonString = result;
                showResult();
            }
        }


        @Override
        protected String doInBackground(String... params) {

            String serverURL = params[0];


            try {

                URL url = new URL(serverURL);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();


                httpURLConnection.setReadTimeout(5000);
                httpURLConnection.setConnectTimeout(5000);
                httpURLConnection.connect();


                int responseStatusCode = httpURLConnection.getResponseCode();
                Log.d(TAG, "response code - " + responseStatusCode);

                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();


                return sb.toString().trim();


            } catch (Exception e) {

                Log.d(TAG, "InsertData: Error ", e);
                errorString = e.toString();

                return null;
            }
        }
    }
    private void showResult(){
        try {
            //리스트
            mListData = new ArrayList<>();
            mSAdapter = new SimpleAdapter(this.getActivity(), mListData, R.layout.qna_list,
                    new String[] {"Qtitle","Qcontent","Atitle","Answer"}, new int[]
                    {R.id.textViewQtitle, R.id.textViewQcontent, R.id.textViewAtitle, R.id.textViewAnswer});

            mListView.setAdapter(mSAdapter);

            HashMap<String,String> hitem = new HashMap<>();
            hitem.put("Qtitle", "고객센터에 질문한 타이틀");
            hitem.put("Qcontent", "고객센터에 질문한 내용");
            hitem.put("Atitle", "답변 타이틀");
            hitem.put("Answer", "답변 내용");
            mListData.add(hitem);
            mSAdapter.notifyDataSetChanged();

            JSONObject jsonObject = new JSONObject(mJsonString);
            JSONArray jsonArray = jsonObject.getJSONArray(TAG_JSON);



            for(int i=0;i<jsonArray.length();i++) {

                JSONObject item = jsonArray.getJSONObject(i);

                String id = item.getString(TAG_id);
                String title = item.getString(TAG_title);
                String content = item.getString(TAG_content);
                String comleted = item.getString(TAG_comleted);

//                Toast.makeText(getActivity(), mJsonString+" "+id+" dd",Toast.LENGTH_LONG).show();

//                if (id.equals(q_id)) {
                    HashMap<String, String> hashMap = new HashMap<>();

                    hashMap.put(TAG_id, id);
                    hashMap.put(TAG_title, title);
                    hashMap.put(TAG_content, content);
                    hashMap.put(TAG_comleted, comleted);

                    mListData.add(hashMap);
                    mSAdapter.notifyDataSetChanged();
//                }
            }





        } catch (JSONException e) {

            Log.d(TAG, "showResult : ", e);
        }
    }
}

 

어떤 부분이 문제인지 모르겠습니다.

이 질문에 댓글 쓰기 :

답변 1

php결과 값을

text로 받을지

json 형태로 받을지 정하시면 될 듯합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT