Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एंड्रॉइड ऐप से पढ़ने के लिए PHP से JSON ऑब्जेक्ट कैसे वापस करें

चूंकि आप पोस्ट करते हैं कि एक कार्यशील PHP फ़ाइल का उल्लेख नहीं है, इसलिए मैं इसे पूर्णता के लिए शामिल करूंगा। यह लंबा हो सकता है (लंबा ) पोस्ट....

तो, पहले। यह एक PHP फ़ाइल का एक उदाहरण है जिसे my_test.php . नाम से संग्रहीत किया जाता है इस स्थान पर:c:\wamp\www\some_folder_name\my_test.php (कृपया कोड का संपादन इतिहास देखें )

अब, मैं इस PHP के महत्वपूर्ण भागों की व्याख्या करता हूँ। ये पैरामीटर आपकी सेटिंग का उपयोग करने के लिए कॉन्फ़िगर किए जाने चाहिए:

$DB_HOST = 'YOUR_IP_ADDRESS';
$DB_UNAME = 'MYSQL_USERNAME';
$DB_PWD = 'MYSQL_USER'S_PASSWORD';
$DB_DATABASE = 'DATABASE_NAME';

IP पता या तो लोकलहोस्ट होना चाहिए या MySQL डेटाबेस को होस्ट करने वाले कंप्यूटर का IP पता होना चाहिए। अधिमानतः एक आईपी पता ताकि आप भौतिक उपकरणों पर परीक्षण कर सकें। लोकलहोस्ट . का उपयोग करके केवल वर्चुअल डिवाइस पर काम करेगा।

अगला कॉलम एक सरणी में जोड़ रहा है जो एक एकल रिकॉर्ड का निर्माण करेगा (पंक्ति ) JSON प्रतिक्रिया में। उदाहरण के लिए इस लाइन पर एक नज़र डालें:

$stuff["id"] = $row['id'];

$stuff["id"] मूल रूप से टैग . बन जाएगा परिणामी JSON ऑब्जेक्ट में जबकि $row['id'] वह है जो आपके डीबी की तालिका से कॉलम नाम इंगित करता है। तो $row["...."] डीबी तालिका में कॉलम नामों के समान होना चाहिए। जबकि $stuff["...."] लगभग कुछ भी हो सकता है। जब तक यह आपको समझ में आता है।

यह लाइन echo(json_encode($response)); बदलेगा JSON प्रारूप में प्रतिक्रिया।

अब जावा कोड को देखते हैं। इसमें सबसे पहले एक वर्ग है जो आपको परिणाम के माध्यम से विश्लेषण करने में मदद करेगा। इसे एक वेबसाइट से एक ट्यूटोरियल से हटा दिया गया था (मुझे याद नहीं है जो ) जावा क्लास में बस निम्न कोड पेस्ट करें। इस फाइल में कुछ भी बदलने की जरूरत नहीं है। यह कैसे काम करता है, इसे समझने के लिए इसे अच्छी तरह से पढ़ें। मैंने इसका नाम JSONParser . रखा है (कृपया कोड का संपादन इतिहास देखें ):

अंत में, वास्तव में परिणामी JSON कैसे प्राप्त करें और इसे Activity . में पार्स करें / Fragment

मैं डेटा को AsyncTask . में पार्स करता हूं , जो वैसे भी आवश्यक है, यह देखते हुए कि आप एक नेटवर्क ऑपरेशन कर रहे होंगे। (कृपया कोड का संपादन इतिहास देखें )

इस जावा में ध्यान देने योग्य बातें:

  1. यह String URL_TO_PHP = "http://IP_ADDRESS/some_folder_name/my_test.php"; 192.168.0.x . जैसा IP पता होना चाहिए या यदि आप किसी वर्चुअल डिवाइस पर परीक्षण कर रहे हैं, तो यह 10.0.2.2 . होना चाहिए . पहले वाला (192.. ) एम्यूलेटर और बाद वाले पर काम नहीं करेगा (10.0... ) भौतिक डिवाइस पर काम नहीं करेगा।
  2. इसमें:String TAG_STUFF = "stuff"; , "stuff" PHP फ़ाइल से इसके साथ मेल खाता है:$response["stuff"] = array(); . TAG_STUFF मूल रूप से $response["stuff"] . में क्या उपयोग करना चाहिए ।

आशा है कि उपरोक्त सभी समझ में आता है। अगर आपको मदद चाहिए तो कमेंट करें।;-)

कार्य समाधान के साथ अद्यतन:

ये वाकई बहुत अजीब है। लेकिन, मेरे पास एक कामकाजी समाधान है। ओपी के कोड का उपयोग करते समय, एप्लिकेशन वास्तव में क्रैश हो जाता है। यह परीक्षण करने के लिए समय की कमी के कारण कि यह क्रैश क्यों होता है, मैं इसके बजाय सीधे समाधान पोस्ट कर रहा हूं।

सबसे पहले, testing रखने के बजाय एक स्वतंत्र वर्ग के रूप में, इसे MainActivity . में वापस एक आंतरिक वर्ग के रूप में बनाएं ।

class testing extends AsyncTask<Void, Void, Void>   {
....
}

दूसरा, वैश्विक स्तर पर चर घोषित करें (jParser , URL_TO_PHP , आदि ), onPreExecute() . से पहले की मौजूदा घोषणाओं के विपरीत . स्पष्टता के लिए नीचे संपूर्ण समाधान देखें...

public class MainActivity extends Activity {

    JSONParser jParser;
    String URL_TO_PHP = "http://testbox.site50.net/test.php";
    String TAG_SUCCESS = "success";
    String TAG_STUFF = "stuff";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    ....

    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button1:
                new testing().execute();
                break;
            default:
                break;
        }

    }

    private class testing extends AsyncTask<Void, Void, Void> {

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

        @Override
        protected Void doInBackground(Void... args) {

            /* Building Parameters */
            List<NameValuePair> params = new ArrayList<>();

            /* getting JSON string from URL */
            JSONObject json = jParser.makeHttpRequest(URL_TO_PHP, "GET", params);

            try {
                /* Checking for SUCCESS TAG */
                int success = json.getInt(TAG_SUCCESS);
                if (success == 1) {
                    JSONArray JAStuff = json.getJSONArray(TAG_STUFF);

                    /** CHECK THE NUMBER OF RECORDS **/
                    int intStuff = JAStuff.length();

                    if (intStuff != 0) {

                        for (int i = 0; i < JAStuff.length(); i++) {
                            JSONObject JOStuff = JAStuff.getJSONObject(i);
                            Log.e("ALL THE STUFF", JOStuff.toString());
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
        }
    }
}

परीक्षण के दौरान, मैंने परिणामों का एक स्क्रीनग्रैब भी लिया। यह रहा:

दोबारा, क्योंकि मैं इस समय थोड़ा पतला हूं, मैं यह पता लगाने में सक्षम नहीं हूं कि वास्तव में ओपी के कोड में दुर्घटना का कारण क्या है। लेकिन यह पता लगाना काफी दिलचस्प है..



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या काउचडब लूप कर सकता है

  2. JTextField सेट से बचनाकार्यक्रम के चारों ओर पाठ पुनरावृत्ति

  3. MySQL:मैपिंग टेबल को समझना

  4. MySQL क्वेरी से फ़ील्ड प्रकार कैसे वापस करें?

  5. MySQL में डेटा कैसे जेनरेट करें?