मुझे निम्नलिखित कोड के साथ कुछ समस्याएं आ रही हैं। मैं निम्नलिखित Reddit URL से पढ़ने की कोशिश कर रहा हूँ:

https://www.reddit.com/r/earthporn/.json?after=

यहां वह कोड है जिसे सही ढंग से निष्पादित नहीं किया जा रहा है।

public static String readContents(String url){
        try{
        InputStream input= new URL(url).openStream();
        Reader reader = new InputStreamReader(input);
        BufferedReader in = new BufferedReader(reader);
        String line, str;
        str = "";
        while ((line=in.readLine()) != null) {
            str += line;
            System.out.println(line);
        }
        return str;
        }catch(IOException e){
            Log.d("READ FAILED", e.toString());
            return null;
        }
    }
}

और यहीं से मैं इसे कॉल करता हूं

List<Post> fetchPosts(){
    String raw=RemoteData.readContents(url);
    List<Post> list=new ArrayList<Post>();
    try{
        JSONObject data=new JSONObject(raw).getJSONObject("data");
        JSONArray children=data.getJSONArray("children");

        //Using this property we can fetch the next set of
        //posts from the same subreddit
        after=data.getString("after");

        for(int i=0;i<children.length();i++){
            JSONObject cur=children.getJSONObject(i)
                    .getJSONObject("data");
            Post p=new Post();
            p.title=cur.optString("title");
            p.url=cur.optString("url");
            p.numComments=cur.optInt("num_comments");
            p.points=cur.optInt("score");
            p.author=cur.optString("author");
            p.subreddit=cur.optString("subreddit");
            p.permalink=cur.optString("permalink");
            p.domain=cur.optString("domain");
            p.id=cur.optString("id");
            p.thumbnail=cur.optString("thumbnail");
            if(p.title!=null)
                list.add(p);
        }
    }catch(Exception e){
        Log.e("fetchPosts()",e.toString());
    }
    return list;
}

डिबगिंग करते समय मुझे निम्नलिखित परिणाम मिलते हैं: कच्चा खाली रह जाता है। यहां छवि विवरण दर्ज करें

क्या किसी के पास कोई सुराग है कि यह कुछ भी क्यों नहीं पढ़ रहा है? मुझे आशा है कि मैंने इसे समझने के लिए पर्याप्त कोड शामिल किया है। अगर अब और जरूरत है तो कृपया मुझे बताएं।

1
Jeremy Rowler 28 मार्च 2017, 23:36
न ही वास्तव में संबंधित लेकिन str = ""; while ((line=in.readLine()) != null) { str += line; ... यदि आप लंबी फ़ाइल पढ़ रहे हैं तो यह बहुत बुरा विचार है। प्रत्येक बार जब आप a=a+"b" कॉल करते हैं, तब से स्ट्रिंग परिणाम को लूप में न बनाएं क्योंकि जावा को स्ट्रिंगबिल्डर बनाने की आवश्यकता होती है जो पुराने मान की प्रतिलिपि बनाएगा, नया भाग संलग्न करेगा और फिर उस सामग्री के आधार पर नया स्ट्रिंग बनाएगा (जिसके लिए एक और पुनरावृत्ति की आवश्यकता होती है)। लूप से पहले एक स्ट्रिंगबिल्डर बनाना बेहतर है, append लूप में सभी भाग और अंत में इसे toSring() में परिवर्तित करें।
 – 
Pshemo
28 मार्च 2017, 23:52
क्या आपको कोई विशिष्ट त्रुटि मिल रही है या यह खाली है?
 – 
sam_c
29 मार्च 2017, 00:32
चूंकि HttpClient को बहिष्कृत कर दिया गया है, URLConnection का उपयोग करके इसे कैसे करें, इसका यहां एक अच्छा उदाहरण है;
 – 
Alex Jolig
24 जिंदा 2018, 18:57

1 उत्तर

सबसे बढ़िया उत्तर

नमस्ते प्रतिक्रिया प्राप्त करने के लिए आपको एक HttpsURLConnection खोलना होगा, समस्या यह है कि आपको URL से एक शून्य प्रतिक्रिया मिल रही है, इसलिए आपको यहां वह कोड होना चाहिए जो मेरे लिए काम करता है:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.net.MalformedURLException;
import java.net.URL;


import javax.net.ssl.HttpsURLConnection;


public class main {
    public static String getJSON(String url) {
        HttpsURLConnection con = null;
        try {
            URL u = new URL(url);
            con = (HttpsURLConnection) u.openConnection();

            con.connect();


                BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line + "\n");
                }
                br.close();
                return sb.toString();


        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (con != null) {
                try {
                    con.disconnect();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        return null;
    }

    public static void main(String[] args) {

        String url = "https://www.reddit.com/r/earthporn/.json?after=";
        System.out.println(getJSON(url));

    }

}
1
monem ktata 29 मार्च 2017, 00:32
अच्छी तरह से काम!! आपको धन्यवाद
 – 
Jeremy Rowler
29 मार्च 2017, 04:32
हमें sb.append(line + "\n") में "\n" की आवश्यकता क्यों है? एसबी.एपेंड (लाइन) में क्या गलत है।
 – 
user8038009
22 फरवरी 2018, 19:21