71
respostas

Acessar findViewById() no medoto Async

public class TorneiosTask extends AsyncTask<Void, Void, ArrayList> {
    private Context context;
    private ProgressDialog dialog;

    public TorneiosTask(Context context) {
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
         dialog = ProgressDialog.show(context, "Aguarde Progresso", "Listando Torneios", true, true);
    }

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

        ArrayList<Torneios> toneios = null;

        try {
            toneios = new ParseTorneios(context).getTorneios();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        //if (toneios != null){
         //   ListView listView = (ListView) findViewById(R.id.ListView);
         //   TorneiosAdapter adapter = new TorneiosAdapter(context, toneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
         //   listView.setAdapter(adapter);
       // }

        return toneios;
    }

    @Override
    protected void onPostExecute(ArrayList toneios) {


        if (toneios != null){
            ListView listView = (ListView) findViewById(R.id.ListView);
            TorneiosAdapter adapter = new TorneiosAdapter(context, (ArrayList<Torneios>) toneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
            listView.setAdapter(adapter);
        }


        dialog.dismiss();


    }
}

o Código não está encontrando o "findViewById" ao fazer uma requisição assíncrona.

Esse exemplo é da aula de Web Service do Android II

71 respostas

Oi Gabriel, tudo bem ?

Então cara, vamos nos lembrar algo, o método findViewById() só é encontrado na Activity e na View.

O que você pode fazer para melhorar esse cenário é aplicar o design pattern Delegate, dá uma olhadinha nesse post aqui do blog que você vai entender como fazer : http://blog.alura.com.br/utilizando-o-padrao-delegate-em-android/

Espero ter ajudado !

Abraços

Sim ok

Acessou o id, mas agora a lista não está sendo preenchida após a finalização do onPostExecute()

 if (toneios != null){
            ListView listView = (ListView) activity.findViewById(R.id.ListView);
            TorneiosAdapter adapter = new TorneiosAdapter(context, (ArrayList<Torneios>) toneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
            listView.setAdapter(adapter);
        }

Esse é o resultado, porém a lista não está sendo populada

W/System.err: org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT [{"id":1,"Nome_T...@1:1443 in java.io.InputStreamReader@1768602a) 
W/System.err:     at org.kxml2.io.KXmlParser.next(KXmlParser.java:432)
W/System.err:     at org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
W/System.err:     at exemplo.com.br.exemplo.ParseTorneios.getTorneios(ParseTorneios.java:50)
W/System.err:     at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:43)
W/System.err:     at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:21)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:292)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err:     at java.lang.Thread.run(Thread.java:818)

Só falta esse detalhe para minha aplicação entrar em funcionamento total, é um saco não ter conhecimento...

Mas obrigado pela ajuda

Inclusive o progress bar finaliza sua atividade

Esse trecho do retorno:

position:TEXT [{"id":1,"Nome_T...@1:1443 in java.io.InputStreamReader@1768602a

Significa que o resultado está retornando O que me parece é que a lista não está sendo encontrada

Essa é a resposta que recebo se trabalho com um retorno de XML local, dentro do projeto

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View exemplo.com.br.exemplo.TorneisoActivity.findViewById(int)' on a null object reference

Gabriel, Esta dando uma exception!! Da uma olhadinha no seu try catch : XmlPullParserException!

Você precisa ver o que está acontecendo na hora de converter o xml pra objeto. Está com problemas nisso.

Abraço

E quando da exception sua lista fica nula o que gera o nullpointer

Nada a ver essa resposta

Tem nada a ver...como o problema

     @Override
    protected void onPostExecute(Object toneios) {


        //View view =  inflater.inflate(R.layout.list_item, null);


        if (toneios != null){
            ListView listView = (ListView) activity.findViewById(R.id.ListView);
            TorneiosAdapter adapter = new TorneiosAdapter(context, (ArrayList<Torneios>) toneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
            listView.setAdapter(adapter);
        }


        dialog.dismiss();


    }

Tenta me dar uma força nessa O curso está incompleto em relação a esse assunto

Só preciso retornar para minha lista e depois paro de enviar perguntas

Ela fica em branco

Aqui está o retorno completo:

W/PathParser: Points are too far apart 4.000000596046461
I/Timeline: Timeline: Activity_launch_request id:exemplo.com.br.exemplo time:25410925
W/PathParser: Points are too far apart 4.000000596046461
D/wangcy9: setStatusIcon occur wrong theme!
D/wangcy9: setStatusIcon occur wrong theme!
I/ViewRootImpl: CPU Rendering VSync enable = true
I/ViewRootImpl: CPU Rendering VSync enable = true
I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@5c30a2e time:25411297
W/System.err: org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT [{"id":1,"Nome_T...@1:1443 in java.io.InputStreamReader@38a95690) 
W/System.err:     at org.kxml2.io.KXmlParser.next(KXmlParser.java:432)
W/System.err:     at org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
W/System.err:     at exemplo.com.br.exemplo.ParseTorneios.getTorneios(ParseTorneios.java:50)
W/System.err:     at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:43)
W/System.err:     at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:21)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:292)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err:     at java.lang.Thread.run(Thread.java:818)

Mudei esse trecho de código

 if (toneios != null){
            ListView listView = (ListView) activity.findViewById(R.id.ListView);
            TorneiosAdapter adapter = new TorneiosAdapter(context, (ArrayList<Torneios>) toneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
            listView.setAdapter(adapter);
        }

para esse


            ListView listView = (ListView) activity.findViewById(R.id.ListView);
            TorneiosAdapter adapter = new TorneiosAdapter(context, (ArrayList<Torneios>) toneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
            listView.setAdapter(adapter);

e recebi essa exeption:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: exemplo.com.br.exemplo, PID: 5959
                  java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View exemplo.com.br.exemplo.TorneisoActivity.findViewById(int)' on a null object reference
                      at exemplo.com.br.exemplo.TorneiosTask.onPostExecute(TorneiosTask.java:69)
                      at android.os.AsyncTask.finish(AsyncTask.java:636)
                      at android.os.AsyncTask.access$500(AsyncTask.java:177)
                      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5268)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)

Está trazendo um erro no findById(), está retornando null é o que parece

Alguma alternativa?

Oi Gabriel,

O erro que está dando é o seguinte :


W/System.err: org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT [{"id":1,"Nome_T...@1:1443 in java.io.InputStreamReader@38a95690) 
W/System.err:     at org.kxml2.io.KXmlParser.next(KXmlParser.java:432)
W/System.err:     at org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
W/System.err:     at exemplo.com.br.exemplo.ParseTorneios.getTorneios(ParseTorneios.java:50)
W/System.err:     at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:43)
W/System.err:     at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:21)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:292)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err:     at java.lang.Thread.run(Thread.java:818)

Como podemos perceber é XmlPullParserException, agora analisando o seu código temos a seguinte situação :

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

        ArrayList<Torneios> toneios = null;

        try {
            toneios = new ParseTorneios(context).getTorneios();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return torneios;
    }

Conforme isso a sua classe ParseTorneios pode gerar duas exceptions - XmlPullParserException e IOException. Agora seguindo o fluxo o que ocorre é o seguinte, você inicialmente define sua lista de torneios como nulle tenta pegar ela, o que está gerando uma exception, logo não consegue atribuir nenhum valor, sendo assim o valor retornado é uma referência nula.

Agora quando você está tratando a resposta no método onPostExecute() você está fazendo isso :

 if (toneios != null){
            ListView listView = (ListView) activity.findViewById(R.id.ListView);
            TorneiosAdapter adapter = new TorneiosAdapter(context, (ArrayList<Torneios>) toneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
            listView.setAdapter(adapter);
        }

Porém sua lista é nula, por esse motivo ela não entra no if . No momento em que você removeu essa validação, você levou outra Exception :


E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: exemplo.com.br.exemplo, PID: 5959
                  java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View exemplo.com.br.exemplo.TorneisoActivity.findViewById(int)' on a null object reference
                      at exemplo.com.br.exemplo.TorneiosTask.onPostExecute(TorneiosTask.java:69)
                      at android.os.AsyncTask.finish(AsyncTask.java:636)
                      at android.os.AsyncTask.access$500(AsyncTask.java:177)
                      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5268)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)

Que pode ter dois problemas nesse ponto, a sua referência da Activityestar nula e quando corrigido isso você levará devido a sua listagem.

Espero ter ajudado.

Abraços

Percebi que talvez seja o charchet UTF pois recebi essa resposta:

Unexpected token (position:TEXT [{"id":1,"Nome_T...@1:1443 in java.io.InputStreamReader@5da9128)

Acho que no xml falta a inclusão do encoding="UTF-8"

Sabe como posso fazer isso na saída dos dados da Webservice? Onde a mesma é feita em C#

public List<Torneio> Get()
        {
            var dao = new Aplicacao_Torneio();

            var restul = dao.Listar_Todos_Torneios();
            return dao.Listar_Todos_Torneios();

        }

Ou posso incluir isso na chegada dos dados? Ou no parse?

Pois ele não está aceitando o caracter (ª) e a exclamação

Situação:

A lista não está mais retornando nula. Ajustei isso

A exeption que estou tomando agora é que o id do findviewById está retornando nulo no método onPostExecute()

Oi Gabriel,

Posta o código inteiro da sua asynctask!

Aí a gente dá uma olhada e resolve! Pode ser ?

Abraços

public class TorneiosTask extends AsyncTask<Void, Void, ArrayList<Torneios>> {
    private Context context;
    private ProgressDialog dialog;
    public TorneisoActivity activity;
    //ArrayList<Torneios> toneios = null;
    ArrayList<Torneios> torneios = new ArrayList<Torneios>();

    public TorneiosTask(Context context) {
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
         dialog = ProgressDialog.show(context, "Aguarde Progresso", "Listando Torneios", true, true);
    }



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



        try {
            //toneios = new ParseTorneios(context).getTorneios();





                Torneios usuario = null;
                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                factory.setNamespaceAware(true);
                XmlPullParser parser = factory.newPullParser();

                //InputStream inputStream = context.getAssets().open("dados_torneios");

                URL url = new URL("http://www.webapi.kinghost.net/api/Torneios");
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());


                parser.setInput(inputStream, null);
                int eventType = parser.getEventType();
                String tagName = null;
                String tagIncial = null;


                while (eventType != XmlPullParser.END_DOCUMENT) {
                    eventType = parser.next();
                    tagName = parser.getName();

                    switch (eventType) {
                        case XmlPullParser.START_TAG:
                            if (tagName.equals("ArrayOfTorneio")) {
                                torneios = new ArrayList<>();
                            } else if (tagName.equals("Torneio")) {
                                usuario = new Torneios();
                                //usuario.id = Integer.parseInt(parser.getAttributeValue(0));
                            }

                            tagIncial = tagName;
                            break;

                        case XmlPullParser.TEXT:
                            if (usuario != null) {
                                if (tagIncial.equals("Nome_Torneio")) {
                                    usuario.Nome_Torneio = parser.getText();
                                } else if (tagIncial.equals("Nome_Clube")) {
                                    usuario.Nome_Clube = parser.getText();
                                }
                                else if (tagIncial.equals("id")) {
                                    usuario.id = Integer.parseInt(parser.getText());
                                }
                                else if (tagIncial.equals("Inicio")) {
                                    usuario.Inicio = parser.getText();
                                }
                                else if (tagIncial.equals("Fim")) {
                                    usuario.Fin = parser.getText();
                                }
                            }
                            break;

                        case XmlPullParser.END_TAG:
                            if (tagName.equals("ArrayOfTorneio")) {
                                return torneios;
                            } else if (tagName.equals("Torneio")) {
                                torneios.add(usuario);
                                usuario = null;
                            }

                            tagIncial = "";
                            break;
                    }
                }

                //return torneios;












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


        //if (toneios != null){
         //   ListView listView = (ListView) findViewById(R.id.ListView);
         //   TorneiosAdapter adapter = new TorneiosAdapter(context, toneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
         //   listView.setAdapter(adapter);
       // }

        return torneios;
    }

    @Override
    protected void onPostExecute(ArrayList torneios) {


        //View view =  inflater.inflate(R.layout.list_item, null);


        if (torneios != null){
            ListView listView = (ListView)  activity.findViewById(R.id.ListView);
            TorneiosAdapter adapter = new TorneiosAdapter(context, (ArrayList<Torneios>) torneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
            listView.setAdapter(adapter);
        }


        dialog.dismiss();


    }
}

Oi Gabriel,

O que está acontecendo para você levar o NullPointerException é que você esqueceu de atribuir uma referência para o atributo TorneioActivity activity, ai quando você tenta usar uma referência que é nula gera a Exception, para você solucionar isso, eu imagino que o Contextque você está passando seja sua própria Activity , que já resolveria o problema todo.


public class TorneiosTask extends AsyncTask<Void, Void, ArrayList<Torneios>> {
    private ProgressDialog dialog;
    public TorneisoActivity activity;
    ArrayList<Torneios> torneios = new ArrayList<Torneios>();

    public TorneiosTask(TorneisoActivity activity) {
        this.activity = activity;
    }

    //resto do código

}
`

Você só precisa alterar os locais que usava o contextpara activitye acredito que deva funcionar !

Espero ter ajudado.

Abraço

Fiz o que vc pediu e a lista continua em branco e o retorno é esse, porém não está parando a aplicação

W/System.err: org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT [{"id":1,"Nome_T...@1:1443 in java.io.InputStreamReader@29dd2195) 
W/System.err:     at org.kxml2.io.KXmlParser.next(KXmlParser.java:432)
W/System.err:     at org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
W/System.err:     at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:93)
W/System.err:     at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:35)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:292)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err:     at java.lang.Thread.run(Thread.java:818)
I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@15465731 time:9646691

A aplicação ficou assim

public class TorneiosTask extends AsyncTask<Void, Void, ArrayList<Torneios>> {
    //private Context context;
    private ProgressDialog dialog;
    public TorneisoActivity activity;
    //ArrayList<Torneios> toneios = null;
    ArrayList<Torneios> torneios = new ArrayList<Torneios>();

    //public TorneiosTask(Context context) {
    //    this.context = context;
    //}

    public TorneiosTask(TorneisoActivity activity) {
        this.activity = activity;
    }


    @Override
    protected void onPreExecute() {
         dialog = ProgressDialog.show(activity, "Aguarde Progresso", "Listando Torneios", true, true);
    }



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



        try {
            //toneios = new ParseTorneios(context).getTorneios();





                Torneios usuario = null;
                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                factory.setNamespaceAware(true);
                XmlPullParser parser = factory.newPullParser();

                //InputStream inputStream = context.getAssets().open("dados_torneios");

                URL url = new URL("http://www.webapi.kinghost.net/api/Torneios");
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());


                parser.setInput(inputStream, null);
                int eventType = parser.getEventType();
                String tagName = null;
                String tagIncial = null;


                while (eventType != XmlPullParser.END_DOCUMENT) {
                    eventType = parser.next();
                    tagName = parser.getName();

                    switch (eventType) {
                        case XmlPullParser.START_TAG:
                            if (tagName.equals("ArrayOfTorneio")) {
                                torneios = new ArrayList<>();
                            } else if (tagName.equals("Torneio")) {
                                usuario = new Torneios();
                                //usuario.id = Integer.parseInt(parser.getAttributeValue(0));
                            }

                            tagIncial = tagName;
                            break;

                        case XmlPullParser.TEXT:
                            if (usuario != null) {
                                if (tagIncial.equals("Nome_Torneio")) {
                                    usuario.Nome_Torneio = parser.getText();
                                } else if (tagIncial.equals("Nome_Clube")) {
                                    usuario.Nome_Clube = parser.getText();
                                }
                                else if (tagIncial.equals("id")) {
                                    usuario.id = Integer.parseInt(parser.getText());
                                }
                                else if (tagIncial.equals("Inicio")) {
                                    usuario.Inicio = parser.getText();
                                }
                                else if (tagIncial.equals("Fim")) {
                                    usuario.Fin = parser.getText();
                                }
                            }
                            break;

                        case XmlPullParser.END_TAG:
                            if (tagName.equals("ArrayOfTorneio")) {
                                return torneios;
                            } else if (tagName.equals("Torneio")) {
                                torneios.add(usuario);
                                usuario = null;
                            }

                            tagIncial = "";
                            break;
                    }
                }

                //return torneios;












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


        //if (toneios != null){
         //   ListView listView = (ListView) findViewById(R.id.ListView);
         //   TorneiosAdapter adapter = new TorneiosAdapter(context, toneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
         //   listView.setAdapter(adapter);
       // }

        return torneios;
    }

    @Override
    protected void onPostExecute(ArrayList torneios) {


        //View view =  inflater.inflate(R.layout.list_item, null);


        if (torneios != null){
            ListView listView = (ListView)  activity.findViewById(R.id.ListView);
            TorneiosAdapter adapter = new TorneiosAdapter(activity, (ArrayList<Torneios>) torneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
            listView.setAdapter(adapter);
        }


        dialog.dismiss();


    }
}

Gabriel,

Seu código está funcionando, o que tá dando problema agora é a conversão do seu xml, continua estourando a Exception, ou seja está caindo no catch.

Fazer a leitura na mão de um xml é bem chato e complicado, você não quer usar nenhum lib para isso não ? Ou melhor, não consegue migrar de xml para json ? Pois você poderia utilizar o GSON, uma lib do google para conversão de json para objeto e de objeto para json.

Caso você queira utilizar o xml, tem essa lib aqui : http://x-stream.github.io/ contudo eu não a recomendo, pelo fato dela utilizar Reflection.

Espero ter ajudado.

Abraços

Não rolou

Não sei como fazer isso

Oi Gabriel, tudo bem ?

O que você mudou ?

Não sei como importar essa biblioteca e nem como usa-lá

Não tenho conhecimento para isso nessa IDE

No build.Gradle

dependencies { }

Qual dependência tenho que adicionar

Não encontre isso no artigo que vc me mandou

Ou pelo menos me diz como eu estancio uma classe de X-stream

Porque a api que eu aprendi a fazer ai na alura só me devolve dados xml

pode conferir: http://www.webapi.kinghost.net/api/Torneios

Oi Gabriel !

Para você colocar o Xstrem você precisa adicionar:

compile group: 'com.thoughtworks.xstream', name: 'xstream', version: '1.4.2'

Para você instanciar um XStream é bem simples :

XStream stream = new XStream(new DomDriver());

E para ler basta fazer :

stream.alias("nome", Object.class);
Object o = stream.fromXML(xml);

Você precisa dar um alias para ele para que ele saiba encontrar o nome da tag e transformar no seu objeto, por isso passamos o class do objeto, para que ele faça o bind.

E para ler fazemos o fromXML passando o xml para ele, através de um InputStream. E ai você pode devolver o objeto que deseja, fazendo cast.

Ok

Minha Classe está assim agora:

@XStreamAlias("Torneios")
public class Torneios {

    @XStreamAlias("id")
    public int id;
    @XStreamAlias("Nome_Torneio")
    public String Nome_Torneio;
    @XStreamAlias("Inicio")
    public String Inicio;
    @XStreamAlias("Fin")
    public String Fin;
    @XStreamAlias("Nome_Clube")
    public String Nome_Clube;


    public String toString() {
        return "id: "+id+" idade: "+Nome_Clube+" nome: "+Nome_Torneio;
    }
}

E estou tentando printar o resultado

 protected ArrayList<Torneios> doInBackground(Void... params) {

        try {
            //toneios = new ParseTorneios(context).getTorneios();


                Torneios usuario = null;
                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                factory.setNamespaceAware(true);
                XmlPullParser parser = factory.newPullParser();

                //InputStream inputStream = context.getAssets().open("dados_torneios");


                stream.processAnnotations(Torneios.class);


                URL url = new URL("http://www.webapi.kinghost.net/api/Torneios");
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());



                parser.setInput(inputStream, null);
                int eventType = parser.getEventType();
                String tagName = null;
                String tagIncial = null;

            Object readObject = stream.fromXML(url);
            System.out.println(readObject);

             /*   while (eventType != XmlPullParser.END_DOCUMENT) {
                    eventType = parser.next();
                    tagName = parser.getName();

                    switch (eventType) {
                        case XmlPullParser.START_TAG:
                            if (tagName.equals("ArrayOfTorneio")) {
                                torneios = new ArrayList<>();
                            } else if (tagName.equals("Torneio")) {
                                usuario = new Torneios();
                                //usuario.id = Integer.parseInt(parser.getAttributeValue(0));
                            }

                            tagIncial = tagName;
                            break;

                        case XmlPullParser.TEXT:
                            if (usuario != null) {
                                if (tagIncial.equals("Nome_Clube")) {
                                    usuario.Nome_Clube = parser.getText();
                                }
                                else if (tagIncial.equals("id")) {
                                    usuario.id = Integer.parseInt(parser.getText());
                                }
                                else if (tagIncial.equals("Inicio")) {
                                    usuario.Inicio = parser.getText();
                                }
                                else if (tagIncial.equals("Fim")) {
                                    usuario.Fin = parser.getText();
                                }
                            }
                            break;

                        case XmlPullParser.END_TAG:
                            if (tagName.equals("ArrayOfTorneio")) {
                                return torneios;
                            } else if (tagName.equals("Torneio")) {
                                torneios.add(usuario);
                                usuario = null;
                            }

                            tagIncial = "";
                            break;
                    }
                }*/

                //return torneios;

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


        //if (toneios != null){
         //   ListView listView = (ListView) findViewById(R.id.ListView);
         //   TorneiosAdapter adapter = new TorneiosAdapter(context, toneios);
            //TorneiosAdapter<Torneios> adapter = new TorneiosAdapter<Torneios>(this, R.layout.list_item, toneios);
         //   listView.setAdapter(adapter);
       // }

        return torneios;
    }

E ai estou tomando esse erro

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
                  Process: exemplo.com.br.exemplo, PID: 18818
                  java.lang.RuntimeException: An error occured while executing doInBackground()
                      at android.os.AsyncTask$3.done(AsyncTask.java:304)
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                      at java.lang.Thread.run(Thread.java:818)
                   Caused by: com.thoughtworks.xstream.io.StreamException:  : Unexpected token (position:TEXT [{"id":1,"Nome_T...@1:2499 in java.io.InputStreamReader@15317ee5) 
                      at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:105)
                      at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:85)
                      at com.thoughtworks.xstream.XStream.fromXML(XStream.java:934)
                      at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:90)
                      at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:37)
                      at android.os.AsyncTask$2.call(AsyncTask.java:292)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                      at java.lang.Thread.run(Thread.java:818) 
                   Caused by: org.xml.sax.SAXParseException: Unexpected token (position:TEXT [{"id":1,"Nome_T...@1:2499 in java.io.InputStreamReader@15317ee5) 
                      at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146)
                      at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:98)
                      at com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:85) 
                      at com.thoughtworks.xstream.XStream.fromXML(XStream.java:934) 
                      at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:90) 
                      at exemplo.com.br.exemplo.TorneiosTask.doInBackground(TorneiosTask.java:37) 
                      at android.os.AsyncTask$2.call(AsyncTask.java:292) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                      at java.lang.Thread.run(Thread.java:818) 
I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@36c2997a time:67108569
E/WindowManager: android.view.WindowLeaked: Activity exemplo.com.br.exemplo.TorneisoActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{32040bc8 V.E..... R......D 0,0-1026,470} that was originally added here
                     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:364)
                     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
                     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
                     at android.app.Dialog.show(Dialog.java:298)
                     at android.app.ProgressDialog.show(ProgressDialog.java:116)
                     at android.app.ProgressDialog.show(ProgressDialog.java:104)
                     at exemplo.com.br.exemplo.TorneiosTask.onPreExecute(TorneiosTask.java:56)
                     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591)
                     at android.os.AsyncTask.execute(AsyncTask.java:539)
                     at exemplo.com.br.exemplo.TorneisoActivity.onCreate(TorneisoActivity.java:49)
                     at android.app.Activity.performCreate(Activity.java:6033)
                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397)
                     at android.app.ActivityThread.access$800(ActivityThread.java:151)
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310)
                     at android.os.Handler.dispatchMessage(Handler.java:102)
                     at android.os.Looper.loop(Looper.java:135)
                     at android.app.ActivityThread.main(ActivityThread.java:5268)
                     at java.lang.reflect.Method.invoke(Native Method)
                     at java.lang.reflect.Method.invoke(Method.java:372)
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)

Gabriel, faz um teste :

Invés de instanciar o DomDriver instancia o JettisonMappedXmlDriver e vê o que acontece

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: exemplo.com.br.exemplo, PID: 1109
                  java.lang.NoClassDefFoundError: Failed resolution of: Lorg/codehaus/jettison/mapped/Configuration;
                      at com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver.<init>(JettisonMappedXmlDriver.java:55)
                      at exemplo.com.br.exemplo.Torneios_2.<init>(Torneios_2.java:52)
                      at exemplo.com.br.exemplo.TorneisoActivity.onCreate(TorneisoActivity.java:48)
                      at android.app.Activity.performCreate(Activity.java:6033)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397)
                      at android.app.ActivityThread.access$800(ActivityThread.java:151)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5268)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
                   Caused by: java.lang.ClassNotFoundException: Didn't find class "org.codehaus.jettison.mapped.Configuration" on path: DexPathList[[dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-xstream-1.4.2_2c2e67c49ee1a88ef6cc9da8600468861a3b5991-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-xpp3_min-1.1.4c_faba8854ec5f691d10bf365e880e4ccb5dd3a343-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-xmlpull-1.1.3.1_5ef8e201102f5762cf03f3cc493e163e8ffc2204-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-support-annotations-25.1.0_b641714a7cbd9c737fffd02bc779c74548a9cac5-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-retrofit-2.0.0-beta4_1e5086520885daf03b790582757dc32403e1b13a-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-okio-1.6.0_b13726475f93b464ec88e5df816ce42a6958334a-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-okhttp-3.0.1_4abf30b96195e2f5ef677c1c83aa0362f447ab80-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-gson-2.4_dcb80a1fd0e0128964ca4a572f26adb8b06b3167-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-glide-3.7.0_511cb2c4af20cf7b33aa2d21b276320021a32e47-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-converter-gson-2.0.0-beta4_754245365acb7d01a2b4278c8bdadef2db82e6c6-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-com.android.support-transition-25.1.0_1e7528d9838b431e51cf4e6bcf59c4bc53ed9c4c-classes.dex", dex file "/data/data/exemplo.com.br.exemplo/files/instant-run/dex/slice-com.android.support-support-vector-drawable-25.1.0_8f15

Oi Gabriel..

JettisonMappedXmlDriver é um driver para json, tenho fortes indicios que seu webservice está devolvendo um json.

O problema que deu ai foi que ele não encontrou o JettisonMappedXmlDriver.

Te dou três caminhos

  • verificar o lado do servidor e corrigir para ele devolver um xml
  • manter do jeito que está e tentar usar o Gson, para ler o JSON que está vindo do seu servidor.
  • ver o que é necessário para colocar o JettisonMappedXmlDriver e testar novamente

Para ajudar vou te dar a dependência :

// https://mvnrepository.com/artifact/org.codehaus.jettison/jettison
compile group: 'org.codehaus.jettison', name: 'jettison', version: '1.3.8'

Vou de Gson

Me da um exemplo de como eu trasnformo uma tag em objeto

Por favor seja claro

A partir desse ponto:

  URL url = new URL("http://www.webapi.kinghost.net/api/Torneios");
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());

Esse é o ponto onde eu retorno para minha aplicação a lista

Só pra constar:

Já adicionei essas duas biblotecas

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'

Gabriel a que você precisa é essa aqui :

compile 'com.google.code.gson:gson:2.8.0'

Para você usar esse cara é bem simples você vai precisar passar a resposta do seu servidor como uma String e a classe que ele vai ter criar.

Gson gson = new Gson();
List<Torneio> torneios = gson.fromJson(json, Torneio.class);

Basicamente é isso !

Caso contrário pode utilizar a classe JsonStringerque ensinamos no curso.

Abraços

 ArrayList<Torneios> torneios = new ArrayList<Torneios>();
    Gson gson = new Gson();

 URL url = new URL("http://www.webapi.kinghost.net/api/Torneios");
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());

                torneios = gson.fromJson(url, Torneios.class);

A parte " torneios = gson.fromJson(url, Torneios.class);"

Não está sendo aceita é essa url? Essa classe é a classe onde estou trabalhando?

Cara tu não vai se livrar de mim enquanto esse problema não estiver resolivido

Cara não tá rolando

Cara boa noite, Estou acompanhando essa discussão há um tempo, mas nunca sei como tentar te ajudar, você pode disponibilizar o código, ou parte dele, pra eu tentar ver o que está acontecendo?

Caso contrario vou tentar fazer algo aqui amanhã à noite pra tentar te ajudar...

Ok

Os códigos estão em:

https://wetransfer.com/downloads/65faa2c051243ad259a4e9a2078823d120170104092027/1851bcd561e09f56f4dd88ded4b68a9120170104092027/d3bb4d

Pois o problema original do post era não encontrar o findViewByID() em uma chamada assíncrona (isso foi sanado).

Dentro dessa mesma classe assíncrona chamada de TorneiosTask é que vem o problema.

  1. Chamar os dados de uma web service: http://www.webapi.kinghost.net/api/Torneios

  2. Transformar isso em objeto

3 Popular uma lista no método onPostExecute

Eu chamo a classe assíncrona TorneiosTask no oncreate() da classe TorneiosActivity()

Se puder dar uma olhada no código que enviei via wetrasfer, agradeço, se não puder eu explico tudo de novo aqui pelo fórum, mas isso é bem cansativo e não tem retornado sucesso

veja que no método doInBackground() estou tendando serializar a minha chamada que para mim é XML, mas o moderador que estava me ajudando achou que os dados eram na verdade passador por Json

Agradeço a ajuda

Gabriel.

Você precisa passar a resposta do seu servidor, ou seja a resposta do webservice.

Para fazer isso vamos usar a classe Scanner do java :

Scanner scanner = new Scanner(connection.getInputStream());

Agora falta lermos o corpo da sua requisição e a transformar em String :


        String linha;
        String json = "";

        while ((linha = scanner.nextLine()) != null) {
           json += linha;
       }

Agora você pode passar o json para o seu Gson ler e transformar em objeto :

Gson gson = new Gson();
List<Torneio> torneios = gson.fromJson(json, Torneio.class)l;

Espero ter ajudado !

Abraços

Não rolou vou aguardar a resposta do "ayrtonkrizan"

Espero que com o que eu respondi pra ele, o mesmo possa me ajudar com mais clareza

Desculpa Gabriel,

Ontem eu não consegui mexer nesse projeto, porque cheguei muito tarde do trabalho em casa. Vou tentar te responder hoje sem falta!!!!

Atualizando código

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


        URL url = null;
        try {



            Gson gson = new Gson();

            url = new URL("http://www.webapi.kinghost.net/api/Torneios");
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());

            Scanner scanner = new Scanner(urlConnection.getInputStream());

            String linha;
            String json = "";

            while ((linha = scanner.nextLine()) != null) {
                Log.i("Json ", String.valueOf(linha));
                json += linha;
           }

            torneios = gson.fromJson(json, Torneios.class);


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






        return torneios;
    }

Retornando esses dados no log e essa exeption:

I/Json: [{"id":1,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Caça Pesca","Inicio":"18/02/2016","Fim":"28/02/2016","id_clube":7},{"id":2,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Giovana Campo Clube","Inicio":"10/03/2016","Fim":"20/03/2016","id_clube":8},{"id":3,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Cruzeiro","Inicio":"07/04/2016","Fim":"17/04/2016","id_clube":3},{"id":4,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Sociedade Recreativa Aquarius","Inicio":"12/05/2016","Fim":"22/05/2016","id_clube":4},{"id":5,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Bohrer Sports","Inicio":"09/06/2016","Fim":"19/06/2016","id_clube":6},{"id":6,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Tênis Vacaria","Inicio":"01/07/2016","Fim":"10/07/2016","id_clube":9},{"id":7,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Juventude","Inicio":"04/08/2016","Fim":"14/08/2016","id_clube":2},{"id":8,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Clube Juvenil","Inicio":"09/09/2016","Fim":"18/09/2016","id_clube":1},{"id":9,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Cruzeiro","Inicio":"07/10/2016","Fim":"16/10/2016","id_clube":3},{"id":10,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Assoc. Motoristas","Inicio":"04/11/2016","Fim":"20/11/2016","id_clube":5},{"id":11,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Cruzeiro","Inicio":"02/12/2016","Fim":"04/12/2016","id_clube":3},{"id":22,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Caça Pesca","Inicio":"10/02/2017","Fim":"19/02/2017","id_clube":7},{"id":23,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Giovana Campo Clube","Inicio":"10/03/2017","Fim":"19/03/2017","id_clube":8},{"id":24,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Cruzeiro","Inicio":"31/03/2017","Fim":"09/04/2017","id_clube":3},{"id":25,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Sociedade Recreativa Aquarius","Inicio":"12/05/2017","Fim":"21/05/2017","id_clube":4},{"id":26,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Bohrer Sports","Inicio":"03/06/2017","Fim":"11/06/2017","id_clube":6},{"id":27,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Tênis Vacaria","Inicio":"30/06/2017","Fim":"09/07/2017","id_clube":9},{"id":28,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Juventude","Inicio":"04/08/2017","Fim":"13/08/2017","id_clube":2},{"id":29,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Clube Juvenil","Inicio":"15/09/2017","Fim":"24/09/2017","id_clube":1},{"id":30,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Assoc. Motoristas","Inicio":"10/11/2017","Fim":"19/11/2017","id_clube":5}]
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
                  Process: exemplo.com.br.exemplo, PID: 10160
                  java.lang.RuntimeException: An error occured while executing doInBackground()
                      at android.os.AsyncTask$3.done(AsyncTask.java:304)
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                      at java.lang.Thread.run(Thread.java:818)
                   Caused by: java.util.NoSuchElementException
                      at java.util.Scanner.nextLine(Scanner.java:1363)
                      at exemplo.com.br.exemplo.Torneios_2.doInBackground(Torneios_2.java:93)
                      at exemplo.com.br.exemplo.Torneios_2.doInBackground(Torneios_2.java:50)
                      at android.os.AsyncTask$2.call(AsyncTask.java:292)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                      at java.lang.Thread.run(Thread.java:818) 
I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@36c2997a time:127378691
I/Process: Sending signal. PID: 10160 SIG: 9
Application terminated.

Fa z desta forma :


        URL url = new URL("http://www.webapi.kinghost.net/api/Torneios");
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        Scanner scanner = new Scanner(urlConnection.getInputStream());

        String json = "";


        while (scanner.hasNext()) {
            json += scanner.nextLine();
       }

O Log mostrou dois resultados:

I/Json: [{"id":1,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Caça Pesca","Inicio":"18/02/2016","Fim":"28/02/2016","id_clube":7},{"id":2,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Giovana Campo Clube","Inicio":"10/03/2016","Fim":"20/03/2016","id_clube":8},{"id":3,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Cruzeiro","Inicio":"07/04/2016","Fim":"17/04/2016","id_clube":3},{"id":4,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Sociedade Recreativa Aquarius","Inicio":"12/05/2016","Fim":"22/05/2016","id_clube":4},{"id":5,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Bohrer Sports","Inicio":"09/06/2016","Fim":"19/06/2016","id_clube":6},{"id":6,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Tênis Vacaria","Inicio":"01/07/2016","Fim":"10/07/2016","id_clube":9},{"id":7,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Juventude","Inicio":"04/08/2016","Fim":"14/08/2016","id_clube":2},{"id":8,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Clube Juvenil","Inicio":"09/09/2016","Fim":"18/09/2016","id_clube":1},{"id":9,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Cruzeiro","Inicio":"07/10/2016","Fim":"16/10/2016","id_clube":3},{"id":10,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Assoc. Motoristas"
I/Json: [{"id":1,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Caça Pesca","Inicio":"18/02/2016","Fim":"28/02/2016","id_clube":7},{"id":2,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Giovana Campo Clube","Inicio":"10/03/2016","Fim":"20/03/2016","id_clube":8},{"id":3,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Cruzeiro","Inicio":"07/04/2016","Fim":"17/04/2016","id_clube":3},{"id":4,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Sociedade Recreativa Aquarius","Inicio":"12/05/2016","Fim":"22/05/2016","id_clube":4},{"id":5,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Bohrer Sports","Inicio":"09/06/2016","Fim":"19/06/2016","id_clube":6},{"id":6,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Tênis Vacaria","Inicio":"01/07/2016","Fim":"10/07/2016","id_clube":9},{"id":7,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Juventude","Inicio":"04/08/2016","Fim":"14/08/2016","id_clube":2},{"id":8,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Clube Juvenil","Inicio":"09/09/2016","Fim":"18/09/2016","id_clube":1},{"id":9,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Cruzeiro","Inicio":"07/10/2016","Fim":"16/10/2016","id_clube":3},{"id":10,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Assoc. Motoristas","Inicio":"04/11/2016","Fim":"20/11/2016","id_clube":5},{"id":11,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Cruzeiro","Inicio":"02/12/2016","Fim":"04/12/2016","id_clube":3},{"id":22,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Caça Pesca","Inicio":"10/02/2017","Fim":"19/02/2017","id_clube":7},{"id":23,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Giovana Campo Clube","Inicio":"10/03/2017","Fim":"19/03/2017","id_clube":8},{"id":24,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Cruzeiro","Inicio":"31/03/2017","Fim":"09/04/2017","id_clube":3},{"id":25,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Sociedade Recreativa Aquarius","Inicio":"12/05/2017","Fim":"21/05/2017","id_clube":4},{"id":26,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Bohrer Sports","Inicio":"03/06/2017","Fim":"11/06/2017","id_clube":6},{"id":27,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Tênis Vacaria","Inicio":"30/06/2017","Fim":"09/07/2017","id_clube":9},{"id":28,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Recreio Juventude","Inicio":"04/08/2017","Fim":"13/08/2017","id_clube":2},{"id":29,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Clube Juvenil","Inicio":"15/09/2017","Fim":"24/09/2017","id_clube":1},{"id":30,"Nome_Torneio":"Apenas Nome","Nome_Clube":"Assoc. Motoristas","Inicio":"10/11/2017","Fim":"19/11/2017","id_clube":5}]

Repetiu duas vezes.

Agora como que eu faço para popular a lista?

Como eu transformo isso em objeto para ser visualizado na tela?

Ele não repetiu.

Dá uma olhadinha na condição do while, ele apenas incrementou.

Agora você já tem o Json em String pode usar o Gsonpara converter para um objeto, da mesma forma que havia te mostrado ali em cima.

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 3 path $[0]

Erro, pra variar

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 3 path $[0]

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 3 path $[0]

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

Erro pra variar:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARR

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
                  Process: exemplo.com.br.exemplo, PID: 31283
                  java.lang.RuntimeException: An error occured while executing doInBackground()
                      at android.os.AsyncTask$3.done(AsyncTask.java:304)
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                      at java.lang.Thread.run(Thread.java:818)
                   Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 3 path $[0]
                      at com.google.gson.Gson.fromJson(Gson.java:899)
                      at com.google.gson.Gson.fromJson(Gson.java:852)
                      at com.google.gson.Gson.fromJson(Gson.java:801)
                      at com.google.gson.Gson.fromJson(Gson.java:773)
                      at exemplo.com.br.exemplo.Torneios_2.doInBackground(Torneios_2.java:99)
                      at exemplo.com.br.exemplo.Torneios_2.doInBackground(Torneios_2.java:50)
                      at android.os.AsyncTask$2.call(AsyncTask.java:292)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                      at java.lang.Thread.run(Thread.java:818) 
                   Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 3 path $[0]
                      at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
                      at com.google.gson.Gson$FutureTypeAdapter.read(Gson.java:969)
                      at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
                      at com.google.gson.Gson.fromJson(Gson.java:887)
                      at com.google.gson.Gson.fromJson(Gson.java:852) 
                      at com.google.gson.Gson.fromJson(Gson.java:801) 
                      at com.google.gson.Gson.fromJson(Gson.java:773) 
                      at exemplo.com.br.exemplo.Torneios_2.doInBackground(Torneios_2.java:99) 
                      at exemplo.com.br.exemplo.Torneios_2.doInBackground(Torneios_2.java:50) 
                      at android.os.AsyncTask$2.call(AsyncTask.java:292) 
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                      at java.lang.Thread.run(Thread.java:818) 
I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@36c2997a time:133306457
E/WindowManager: android.view.WindowLeaked: Activity exemplo.com.br.exemplo.TorneisoActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{13c63050 V.E..... R......D 0,0-1026,470} that was originally added here
                     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:364)
                     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
                     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
                     at android.app.Dialog.show(Dialog.java:298)
                     at android.app.ProgressDialog.show(ProgressDialog.java:116)
                     at android.app.ProgressDialog.show(ProgressDialog.java:104)
                     at exemplo.com.br.exemplo.Torneios_2.onPreExecute(Torneios_2.java:68)
                     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591)
                     at android.os.AsyncTask.execute(AsyncTask.java:539)
                     at exemplo.com.br.exemplo.TorneisoActivity.onCreate(TorneisoActivity.java:48)
                     at android.app.Activity.performCreate(Activity.java:6033)
                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397)
                     at android.app.ActivityThread.access$800(ActivityThread.java:151)
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310)
                     at android.os.Handler.dispatchMessage(Handler.java:102)
                     at android.os.Looper.loop(Looper.java:135)
                     at android.app.ActivityThread.main(ActivityThread.java:5268)
                     at java.lang.reflect.Method.invoke(Native Method)
                     at java.lang.reflect.Method.invoke(Method.java:372)
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)

Me mostra a sua classe Torneio por gentileza

public class Torneios extends ArrayList<Torneios> {

    @SerializedName("id")
    public int id;
    @SerializedName("Nome_Torneio")
    public String Nome_Torneio;
    @SerializedName("Inicio")
    public String Inicio;
    @SerializedName("Fin")
    public String Fin;
    @SerializedName("Nome_Clube")
    public String Nome_Clube;


    public String toString() {
        return "id: "+id+" idade: "+Nome_Clube+" nome: "+Nome_Torneio;
    }

    public void id(int i) {
    }

    public void Nome_Torneio(String s) {
    }

    public void Fin(String s) {
    }

    public void Nome_Clube(String joaosilva) {
    }
}

Oi Gabriel,

Acabei de fazer uns testes aqui..

Para fazer seu webservice funcionar, precisei criar uma nova classe :

import java.util.ArrayList;

public class ListaTorneio extends ArrayList<Torneio>{

}

Que é apenas uma classe que servirá para conversão, ou seja um DTO.

Nisso eu peguei a resposta do seu WebService e pedi para o Gson criar nosso novo objeto :

Gson gson = new Gson();

ListaTorneio lista = gson.fromJson(json, ListaTorneio.class);

Com isso você já possui a listagem, basta passar ela para frente.

Outra coisa que eu alterei foi sua classe Torneio:

public class Torneio {

    @SerializedName("id")
    public int id;
    @SerializedName("Nome_Torneio")
    public String Nome_Torneio;
    @SerializedName("Inicio")
    public String Inicio;
    @SerializedName("Fin")
    public String Fin;
    @SerializedName("Nome_Clube")
    public String Nome_Clube;

    //getters e setters
}

E está funcionando. :)

Abraços

Meu deus perdi minha paciencia contigo

Com quem que eu falo pra fazer uma reclamação???????????????

Só tá enrolando cara

Não tem sentido o que tu ta falando

Não tem o menor sentido

Acho que entendi:

você quer que eu fique muito bravo e te mande a merda e ai vcs tem um motivo pra se livrar de mim

Me passa pra quem sabe ou senão eu vou no procon meter um processo................................

Não é possivel que a cada 5 min tu vem com uma resposta mais absurda que a outra...

Se vc não sabe o que ta fazendo, passa pra outro

Não fica me fazendo perder meu tempo

Boa tarde,

O que não fez sentido Gabriel, ele ta usando a API ?

Ele ta tentando te ajudar cara....

Mas não está ajudando Me da a impressão que ele está me enrolando

Não faz sentido pra mim o que ele ta dizendo

Cara mandei o código por wet trasnfer pra vcs e ninguem respondeu

Agora esse cara ai fica dando dica que não faz sentido nenhum,

Porque não pegam o código que mandei e me enviam um exemplo claro de como popular uma simples lista

Gabriel Mendeiros porque esse stresse? só está tentando te ajudar, e sempre que tenho duvida esse cara que você ta nervoso com ele, ele sempre me ajudou e foi sempre preciso nas palavras para me ajudar. O problema não é se stressar, até porque na programação é pior ficar bravo, além do mais todos gostam de educação e respeito... Ta certo que você não ta chegando a um resultado que você quer, mais ficando desse jeito só vai piorar a situação!!! abraços