java - एंड्रॉइड में वेब एपीआई पद्धति से दिए गए मूल्य का मैं कैसे उपयोग करूं?



android android-asynctask (1)

ऐसा करने के बारे में उलझन में होने के बाद (जैसा कि यहां और यहां देखा जा सकता है , अब मैं अपने सर्वर ऐप और इस कोड के साथ उचित रीस्टापल विधि से सफलतापूर्वक कनेक्ट हो रहा हूं:

public void onFetchBtnClicked(View v){
    if(v.getId() == R.id.FetchBtn){
        Toast.makeText(getApplicationContext(), "You mashed the button, dude.", Toast.LENGTH_SHORT).show();
    new CallAPI().execute("http://10.0.2.2:28642/api/Departments/GetCount?serialNum=4242");
    }
}

public static class CallAPI extends AsyncTask<String, String, String> {

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

        String urlString=params[0]; // URL to call
        String resultToDisplay = "";
        InputStream in = null;

        // HTTP Get
        try {
            URL url = new URL(urlString);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            in = new BufferedInputStream(urlConnection.getInputStream());
        } catch (Exception e ) {
            System.out.println(e.getMessage());
            return e.getMessage();
        }
        return resultToDisplay;

    }

    protected void onPostExecute(String result) {
        Log.i("FromOnPostExecute", result);
    }

} // end CallAPI

मुझे एहसास हुआ कि मुझे कुछ (आरंभीकरण पर एक खाली स्ट्रिंग के अलावा) को निकाल देना चाहिए, परिणामस्वरूप ट्यूटोरियल, लेकिन क्या? "में" का क्या हिस्सा मुझे एक स्ट्रिंग तक पहुंच / गुप्त करने की आवश्यकता है?

अद्यतन करें

"मैनुअल" तरीका मेरे लिए काम कर रहा है, लेकिन फैंसीपेट्स अपाचे io यूटील्स "इतना नहीं" (अच्छी तरह से, यह संकलित है ...) यह मेरा कोड है:

try {
    URL url = new URL(urlString);
    HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
    in = new BufferedInputStream(urlConnection.getInputStream());
    resultToDisplay = getStringFromInputStream(in);
    total = IOUtils.toString(in);

परिणामटौडिसप्ले के असाइनमेंट काम करता है (मुझे मिलता है, "18") कुल की असाइनमेंट नहीं है (मुझे मिलती है, "")

नोट : "GetStringFromInputStream ()" विधि रघुनाथन के लिंक से है

2 अद्यतन करें

यह सिर्फ बांका काम करता है (एपैश कॉमन्स 'आईओटील्स का उपयोग करने के लिए WIllJBD के विचार का उपयोग करके):

new CallWebAPI().execute("http://10.0.2.2:28642/api/Departments/GetCount?serialNum=4242");
. . .
private class CallWebAPI extends AsyncTask<String, String, String> {

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

        String urlString=params[0]; // URL to call
        String result = "";

        // HTTP Get
        try {
            URL url = new URL(urlString);
            HttpURLConnection urlConnection =  
                (HttpURLConnection)url.openConnection();
            InputStream inputStream = urlConnection.getInputStream();
            if (null != inputStream)
                result= IOUtils.toString(inputStream);
        } catch (Exception e ) {
            System.out.println(e.getMessage());
            return e.getMessage();
        }
        return result;
    }

    @Override
    protected void onPostExecute(String result) {
        Log.i("RenameTheWashingtonFootballTeamTheRedskinPeanuts", result);
    }
}

... और इसलिए जाहिरा तौर पर "build.gradle के निर्भरता अनुभाग में" संकलन फ़ाइलें ('लिब्स / कॉमन्स-आइओ-2.4.jar') "कुछ भी जोड़ना जरूरी नहीं है, क्योंकि प्रतीत होता है कि एक समय में कम से कम आवश्यक था, इस के अनुसार। यदि कोई भी बिल्डिंग के लिए ऐसे [मी, पीपी] अंतरालों को सत्यापित कर सकता है। ग्रैडल अब जरूरी नहीं हैं, मैं धीरे-धीरे हो जाएगा

4 अपडेट करें

मैंने देखा कि मैंने अनवरत रूप से onPostExecute () पद्धति से "@ ओवरराइड" को हटा दिया है, लेकिन इसमें कोई फर्क नहीं पड़ा - यह इसके बिना ठीक काम किया है, और इसे ठीक करने के बाद यह ठीक काम करता है तो इसका फायदा यह नहीं है - क्या यह सिर्फ अनावश्यक फुज्जी है?


क्यों नहीं IOUtils की तरह कुछ का उपयोग करें?

InputStream inputStream = urlConnection.getInputStream();
if (inputStream != null)
    String content = IOUtils.toString(inputStream);

http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/IOUtils.html

अब आप कई पुस्तकालयों में से एक का उपयोग करते हुए स्ट्रिंग को जेसन या एक्सएमएल में पार्स कर सकते हैं।





bufferedinputstream