数组覆盖而不是添加

时间:2018-05-31 18:03:01

标签: android

下午好,

我还是编程的初学者,目前正在学习Android。

我正在创建一个屏幕,从网站捕获一些信息并移动到列表视图。当我只使用网站的主页时,下面的代码工作,当我尝试移动到第2页而不是添加到数组的末尾时,它会覆盖整个数组。

我已经达到了我的知识极限,我可以对它们的构建方式犯下一个愚蠢的错误,但我无法单独达成解决方案。

如果我有任何拼写错误,我很抱歉,我正在使用翻译。

    package br.com.testejsoup.eu.testejsoup;

import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

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

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private ListView conteudo;
    String[] aniNomes;
    String[] aniLinks;
    ArrayAdapter<String> adaptador;
    Document doc;


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

        conteudo = findViewById(R.id.html_conteudo);

        new doit().execute();

        conteudo.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                int posicao = position;

                Intent intent = new Intent(MainActivity.this, Episodio.class);
                intent.putExtra("aniLinks", aniLinks[posicao]);
                //Toast.makeText(getApplicationContext(), aniLinks[posicao], Toast.LENGTH_LONG).show();
                startActivity(intent);
            }
        });

    }

    public class doit extends AsyncTask<Void, Void, Void>{
        String URL = "http://www.URL.com/lancamentos?page=";
        String nomeExp;
        Elements nome;
        Elements links;
        int paginas = 5;

        @Override
        protected Void doInBackground(Void... voids) {

            try {


                for (int i=1; i<= paginas;i++) {
                    String new_URL = URL + i;
                    doc = Jsoup.connect(new_URL).get();
                    nome = doc.select("div.nome-thumb a.tt");
                    links = doc.select("div.nome-thumb a.tt");
                    aniNomes = new String[nome.size()];
                    aniLinks = new String[links.size()];

                    for(Element nomeTemp : nome){
                        nomeExp = nomeTemp.text();
                        adaptador.add(nomeExp);
                    }
                }

                    for (int i = 0; i < nome.size(); i++) {
                        aniNomes[i] = nome.get(i).text();
                    }
                    for (int i = 0; i < links.size(); i++) {
                        aniLinks[i] = links.get(i).attr("abs:HREF");
                    }
                    adaptador = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, android.R.id.text1, aniNomes);



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

            return null;
        }


        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            conteudo.setAdapter(adaptador);

        }
    }


}

建议修改后的新代码。 感谢帮助!!!

    package br.com.testejsoup.eu.testejsoup;

import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

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

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

public class MainActivity extends AppCompatActivity {

    private ListView conteudo;
    ArrayList<String> aniNomes = new ArrayList<>();
    ArrayList<String> aniLinks = new ArrayList<>();
    ArrayAdapter<String> adaptador;
    Document doc;


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

        conteudo = findViewById(R.id.html_conteudo);

        new doit().execute();

        conteudo.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                int posicao = position;

                Intent intent = new Intent(MainActivity.this, Episodio.class);
                intent.putExtra("aniLinks", aniLinks.get(position));
                //Toast.makeText(getApplicationContext(), aniLinks[posicao], Toast.LENGTH_LONG).show();
                startActivity(intent);
            }
        });

    }

    public class doit extends AsyncTask<Void, Void, Void>{
        String URL = "http://www.URL.com/lancamentos?page=";
        String nomeExp;
        Elements nome;
        Elements links;
        int paginas = 5;

        @Override
        protected Void doInBackground(Void... voids) {

            try {


                for (int i=1; i<= paginas;i++) {
                    String new_URL = URL + i;
                    doc = Jsoup.connect(new_URL).get();
                    nome = doc.select("div.nome-thumb a.tt");
                    links = doc.select("div.nome-thumb a.tt");
                    for (Element nomeT : nome){
                        aniNomes.add(nomeT.text());
                    }
                    for (Element linkT : links){
                        aniLinks.add(linkT.attr("abs:HREF"));
                    }
                }

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

            return null;
        }


        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            adaptador = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, android.R.id.text1, aniNomes);
            conteudo.setAdapter(adaptador);

        }
    }


}

1 个答案:

答案 0 :(得分:0)

这是因为你在asynctask中创建了一个新的适配器,然后在你的 With ActiveSheet .PageSetup.PrintArea = "$A$1:$V$150" .PageSetup.Zoom = False .PageSetup.FitToPagesWide = 1 .HPageBreaks.Add Before:=.Cells(50, 1) .HPageBreaks.Add Before:=.Cells(101, 1) 方法中调用了onPostExecute,它将旧的适配器及其条目换成新的适配器及其新条目。

我不是在你的asynctask中创建一个新的适配器,而是创建一个数组/ arraylist,向它添加新的条目,然后在你的setAdapter中只需将这个数组/列表中的条目附加到一个和唯一的适配器入口集。

相关问题