执行doInBackground()时发生AsyncTask错误

时间:2014-10-02 19:17:18

标签: java android multithreading android-asynctask

我在下面的代码中遇到错误,为http请求调用asyn方法。它在java.lang.RuntimeException方法中给出了doInBackground()错误。

_____________主要课程____________

 TextView testoInput = (TextView) findViewById(R.id.input);
         final String località = testoInput.getText().toString();

    bottone1.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            TaskAsincrono nuovo = new TaskAsincrono();
            nuovo.execute(località);
        }

__________ ASYNC班级________

公共类TaskAsincrono扩展了AsyncTask> {

    protected  ArrayList<String> doInBackground(String...params) {
        String s = params[0];

        ArrayList<String> risultato =null;

        //Inizio sessione di invio dati rest con sistema GET
        DefaultHttpClient client = new DefaultHttpClient();

            String url ="http://www.replycoupon.it/php/rest_Server/index.php?nome="+s;
            try {   
            URI uri = new URI(url);

            HttpGet get = new HttpGet(uri);

            HttpResponse res = client.execute(get);

            InputStream data = res.getEntity().getContent();

             //Inizio l'operazione di buffering per la lettura

            BufferedReader streamReader = new BufferedReader(new InputStreamReader(data));
            StringBuilder responseStrBuilder = new StringBuilder();

            String inputStr =null;

            while ((inputStr = streamReader.readLine()) != null)
                responseStrBuilder.append(inputStr);


                JSONObject jObj = new JSONObject(responseStrBuilder.toString());

                String clima = jObj.getString("clima");
                String temperatura = jObj.getString("temperatura");

                //Prima di inviare alla main metto il risultato in un arrylist


                risultato.add(clima);
                risultato.add(temperatura);

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
                return risultato;

    }

    protected void onPostExecute(final ArrayList<String> risultato) {
        final TextView testoClima = (TextView) findViewById(R.id.Output);
        final TextView testoTemp = (TextView) findViewById(R.id.Output2);
        testoClima.setText(risultato.get(0).toString());
        testoTemp.setText(risultato.get(1).toString());
    }



}

LOG

10-02 20:53:07.068: D/dalvikvm(4050): GC_FOR_ALLOC freed 234K, 4% free 7914K/8188K, paused 16ms, total 16ms
10-02 20:53:09.728: W/dalvikvm(4050): threadid=11: thread exiting with uncaught exception (group=0x41800ba8)
10-02 20:53:09.728: E/AndroidRuntime(4050): FATAL EXCEPTION: AsyncTask #1
10-02 20:53:09.728: E/AndroidRuntime(4050): Process: luca.tirocinio.client_json, PID: 4050
10-02 20:53:09.728: E/AndroidRuntime(4050): java.lang.RuntimeException: An error occured while executing doInBackground()
10-02 20:53:09.728: E/AndroidRuntime(4050):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
10-02 20:53:09.728: E/AndroidRuntime(4050):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
10-02 20:53:09.728: E/AndroidRuntime(4050):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
10-02 20:53:09.728: E/AndroidRuntime(4050):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
10-02 20:53:09.728: E/AndroidRuntime(4050):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
10-02 20:53:09.728: E/AndroidRuntime(4050):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
10-02 20:53:09.728: E/AndroidRuntime(4050):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
10-02 20:53:09.728: E/AndroidRuntime(4050):     at java.lang.Thread.run(Thread.java:841)
10-02 20:53:09.728: E/AndroidRuntime(4050): Caused by: java.lang.NullPointerException
10-02 20:53:09.728: E/AndroidRuntime(4050):     at luca.tirocinio.client_json.MainActivity$TaskAsincrono.doInBackground(MainActivity.java:117)
10-02 20:53:09.728: E/AndroidRuntime(4050):     at luca.tirocinio.client_json.MainActivity$TaskAsincrono.doInBackground(MainActivity.java:1)
10-02 20:53:09.728: E/AndroidRuntime(4050):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
10-02 20:53:09.728: E/AndroidRuntime(4050):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-02 20:53:09.728: E/AndroidRuntime(4050):     ... 4 more
10-02 20:53:13.768: I/Process(4050): Sending signal. PID: 4050 SIG: 9

1 个答案:

答案 0 :(得分:0)

您正尝试将结果添加到ArrayList<String> risultato,该结果为空。只需将其替换为ArrayList<String> risultato = new ArrayList<String>();

即可