1

我想从 web 目录文件列表中显示 listview。如何在android中访问web目录文件列表。

例如: http: //mp3.com/song/

这是网络目录。

公共类 MainActivity 扩展 Activity {

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

    // JSONObject json = JSONfunctions
    // .getJSONfromURL("http://selangorbn.fm/song/");
    // Log.d("TAG", "json" + json);

}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    new Getparse().execute();
}

private void parse() throws IOException {

    String line = null, response;

    URL url = new URL("http://selangorbn.fm/song/");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    BufferedReader rd = new BufferedReader(new InputStreamReader(
            conn.getInputStream()));
    while (rd.readLine() != null) {
        line += rd.readLine();
    }

    System.out.println(line);

}

public class Getparse extends AsyncTask<Void, Void, integer> {
    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
    }

    @Override
    protected integer doInBackground(Void... params) {
        // TODO Auto-generated method stub
        try {
            parse();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(integer result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

} 获得空值。

4

4 回答 4

1

这对您不起作用,因为您尝试在主应用程序线程上与 Internet 交谈。这样做会暂停应用程序,直到收到回复。因此Android有内部检查。您应该从代码中获取主线程异常的网络。

您需要启动一个单独的线程并从那里与服务器交谈。获得列表后,使用runOnUiThread更新结果(您不能从网络线程中触摸任何 GUI 元素)。

仅当您可以从不合作的第三方服务器获得的所有信息时,解析 HTML 才是合理的。正如 kumar 建议的那样,如果可以,请使用 JSON 或 XML。

于 2012-12-24T07:52:51.857 回答
1
try {
                    org.jsoup.nodes.Document doc = Jsoup.connect("https://test.com/appdata/0131").get();
                    doc.select("img").remove();
                    Elements links = doc.select("a");
                    List<String> listmainlinks = new ArrayList<>();
                    List<String> listweblinks = new ArrayList<>();
                    for (org.jsoup.nodes.Element link : links) {
                        String linkInnerH = link.html();
                        String linkHref = link.attr("href");
                        System.out.println("linkHref: "+ linkHref);
                        System.out.println("linkInnerH: "+ linkInnerH);
                        if(linkInnerH.equals("") ||linkInnerH.equals(" ")||linkInnerH.equals(null) || linkHref.contains("?C=N;O=D")|| linkHref.contains("?C=M;O=A")||linkHref.contains("?C=S;O=A") ||linkHref.contains("?C=D;O=A")){ }
                       else if(linkHref.contains("/"))
                        {
                            if(!linkInnerH.contains("Parent Directory"))
                            listmainlinks.add(linkHref);
                        }

                        else{



                                listweblinks.add("https://test.com/appdata/0131" + linkHref);


                        }

                        }
                    System.out.println("listmainlinks "+ listmainlinks);
                    System.out.println("listweblinks "+listweblinks);
                   /* Elements img = doc.getElementsByTag("img");

                    int counter = 0;

                    for (org.jsoup.nodes.Element el : img) {
                        // If alt is empty or null, add one to counter
                        if(el.attr("alt") == null || el.attr("alt").equals("")) {
                            counter++;
                        }
                        System.out.println("image tag: " + el.attr("src") + " Alt: " + el.attr("alt"));
                    }
                    System.out.println("Number of unset alt: " + counter);*/

                } catch (IOException e) {
                    e.printStackTrace();
                }


https://test.com/appdata/
I/System.out: listmainlinks [0216/, 0128/, 0131/]
I/System.out: listweblinks []
https://test.com/appdata/0131/
I/System.out: listmainlinks []
I/System.out: listweblinks [https://test.com/appdata/0131/logo.png]
于 2018-04-12T06:24:36.690 回答
0

使用 JSOUP,您可以列出远程目录中的所有文件。但是我面临的一个问题是,如果该目录中有主页(例如:index.html),那么它就不会超出该文件的范围。这是一个缺点。

于 2013-02-01T19:09:07.417 回答
0

您可以使用 jsoup 获取链接到文件夹的 href 标签及其名称

Document doc = Jsoup.connect(urltod).timeout(0).get();
                     doc.select("img").remove();
                     Elements links = doc.select("a");
                     List<String> listmainlinks = new ArrayList<>();
                     List<String> listnumberslinks = new ArrayList<>();
                     List<String> listweblinks = new ArrayList<>();
                    for (Element link : links) {
//                       String linkOuterH = link.outerHtml();  //allhreaf incl name
                        String linkInnerH = link.html(); // foldername
                         String linkHref = link.attr("href");  //folderlink
//                      System.out.println("linkHref "+linkInnerH );
                        if(linkInnerH.equals("") ||linkInnerH.equals(" ")||linkInnerH.equals(null) ){ }
                        else{ 
                            if(linkInnerH.contains("size=\"2\"")){
                                String[] afterfonttagarray =linkInnerH.split("\">");
                                String afterfonttag = afterfonttagarray[1];
                                String[] beforefonttagarray =afterfonttag.split("</font>");
                                String beforefonttag = beforefonttagarray[0];
                                listmainlinks.add(beforefonttag);
                                listweblinks.add("http://www.abc.com/audio/"+linkHref);

                        } 
                    }

                    System.out.println("listmainlinks "+ listmainlinks); "+listnumberslinks);
                    System.out.println("listweblinks "+listweblinks);

这将为您提供文件夹名称以及与它们关联的链接,稍后您可以使用 ArrayList> albumsList 来存储和迭代列表或任何内容

于 2013-09-22T15:34:56.970 回答