如何在android中访问web目录文件列表

时间:2012-12-24 07:27:39

标签: android listview

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

Ex: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 个答案:

答案 0 :(得分:1)

这对您不起作用,因为您尝试在主应用程序线程上与Internet通信。这样做会使应用程序停止,直到收到回复为止。因此Android有内部检查。您应该从代码中获取network on main thread exception

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

解析HTML只有在您从不合作的第三方服务器获得的全部内容时才是合理的。正如kumar建议的那样,如果可以,请使用JSON或XML。

答案 1 :(得分:0)

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

答案 2 :(得分: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&GT; albumsList用于存储和迭代列表或任何内容

答案 3 :(得分:0)

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]