0

ページから href 要素を抽出し、結果を文字列配列に格納できます。次に、TextView 内に表示します。ListView に表示しようとすると問題が発生します。この場合、ArrayAdapters の操作方法がわかりません。これは、TextView に表示される作業コードです。

package com.example.jsouptestarray;

import java.io.IOException;
import java.util.ArrayList;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.example.jsouptestarray.R;


import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.text.method.ScrollingMovementMethod;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView text;
    ListView list; 

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

        new MyTask().execute();  
    }

    private class MyTask extends AsyncTask<Void, Void, ArrayList<String>> {

        ArrayList<String> arr_linkText=new ArrayList<String>();

        @Override
        protected ArrayList<String> doInBackground(Void... params) {

             Document doc;
             String linkText = ""; 

             try {
                 doc = Jsoup.connect("https://www.google.com/").get();
                 Elements links = doc.getElementsByTag("a");
                 for (Element el : links) { 
                     linkText = el.attr("href");
                     arr_linkText.add(linkText); // add value to ArrayList
                 }
             } catch (IOException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }

             return arr_linkText;     //<< retrun ArrayList from here
        } 


        @Override
        protected void onPostExecute(ArrayList<String> result) {        

            // get all value from result to display in TextView
            for (String temp_result : result) {
                 System.out.println("links :: "+temp_result);
                 text = (TextView) findViewById (R.id.textView2);
                 text.append(temp_result + "\n" + "\n");
                 text.setMovementMethod(new ScrollingMovementMethod());
            }
        }

    }
}

これは ListView での私の試みですが、エラーが発生し、修正方法がわかりません。

list = (ListView) findViewById(R.id.listView1);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
          android.R.layout.simple_list_item_1, android.R.id.text1, temp_result);

// Assign adapter to ListView
list.setAdapter(adapter); 

ここにエラーのスクリーンショットがあります

ここに画像の説明を入力

誰かが私がそれを修正するのを手伝ってくれることを願っています。あなたの時間をありがとう!

4

2 に答える 2

2

に置き換えthisますMainActivity.this。AsyncTask 内にいる場合はthis、コンストラクターに渡すことができない AsyncTask インスタンスを参照します (異なる、無関係な、互換性のないクラス)

したがって、Activity を引数として呼び出す必要があり、AsyncTask は Activity の一部であるため、Activity インスタンスを明示的に参照できますClassName.this

于 2013-01-10T23:00:50.057 に答える
2

あなたの場合、コンストラクターの4番目の要素は余分です。一度にデータを設定するために使用できます。 APIが表示されます。これを試して:

list = (ListView) findViewById(R.id.listView1);
ArrayAdapter<String> adapter = 
    new ArrayAdapter<String>(MainActivity.this, 
                             android.R.layout.simple_list_item_1, 
                             android.R.id.text1);

for (String temp_result : result)
{
   adapter.add(temp_result);
}

// Assign adapter to ListView
list.setAdapter(adapter); 
于 2013-01-10T23:09:28.770 に答える