1

Webディレクトリのファイル一覧からリストビューを表示したい。AndroidでWebディレクトリファイルリストにアクセスする方法.

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

これは Web ディレクトリです。

public class MainActivity extends 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;
}

null 値を取得しています。

4

4 に答える 4

1

メインアプリケーションスレッドでインターネットと通信しようとするため、これはうまくいきません。これを行うと、応答が受信されるまでアプリケーションが停止します。したがって、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 を使用すると、リモート ディレクトリ内のすべてのファイルを一覧表示できます。しかし、私が直面した問題の 1 つは、そのディレクトリにホームページ (例: index.html) がある場合、そのファイルを超えて読み取っていないことです。これは 1 つの欠点です。

于 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);

これにより、フォルダ名とそれらに関連付けられたリンクが後で得られます

于 2013-09-22T15:34:56.970 に答える