Android:AsyncTask 和读取互联网数据

标签 android android-asynctask

我编写了一个代码来从互联网下载一些数据。我想把它放入 asyncTask 中。之后下载就停止了。看起来它无法完成 try{} 部分,因此跳到异常。

从主 Activity “Nekaj”中,我调用 loadData() 类,该类扩展了 AsyncData。从那里我在 try 命令中调用“oto”类。 “oto”类用于从互联网读取内容并返回字符串数组。当我直接从“Nekaj”类调用 oto 类时,这有效。我使用 AsyncTask 做错了什么? 这是代码:

    public class Nekaj extends Activity {

TextView Tkolo, Tbroj1;
String[] brojevi_varijabla;
String privremena_varijabla = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bez_provjere_739);
    Tkolo = (TextView) findViewById(R.id.Xkolo);
    Tbroj1 = (TextView) findViewById(R.id.Xbroj1);

    /*
     * try { privremena_varijabla = test.kolo_739();
     * Tkolo.setText(privremena_varijabla); } catch (Exception e) { // TODO
     * Auto-generated catch block e.printStackTrace(); }
     */

    new loadData().execute();
}

public class loadData extends AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub

        Oto test = new Oto();

        try {
            brojevi_varijabla = test.brojevi_739();
            if (Integer.valueOf(brojevi_varijabla[0]) > 10) {
                Tbroj1.setText("" + brojevi_varijabla[0]);
            } else {
                Tbroj1.setText(" " + brojevi_varijabla[0]);
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }
}

public class Oto {

    public String[] brojevi_739() throws Exception {

        int i = 0;
        int uvjet = 0;
        int varijabla = 0;
        char[] znak = { '>', '<' };
        BufferedReader in = null;
        String data[] = null;
        String provjera = "date-info";
        int[] polje = new int[2];

        try {
            HttpClient klijent = new DefaultHttpClient();
            URI webstranica = new URI(
                    "https://www.aaa.bb");
            HttpGet zahtjev = new HttpGet();
            zahtjev.setURI(webstranica);
            HttpResponse odgovor = klijent.execute(zahtjev);
            in = new BufferedReader(new InputStreamReader(odgovor
                    .getEntity().getContent()));
            StringBuffer brojevi = new StringBuffer("");
            String brojevi_string = null;
            String neki_string = null;
            String red = "";

            in.skip(21000);
            while ((red = in.readLine()) != null) {
                varijabla = red.indexOf(provjera);

                if (varijabla != -1) {

                    // 1. KOLO
                    if (uvjet == 0) { // onda sadrži taj
                                        // substring
                                        // !!!!
                        red = in.readLine(); // sada string red sadrži ono
                                                // što
                                                // želim, još moram samo to
                                                // izrezati!!
                        do {
                            if (i == 0) {
                                varijabla = red.indexOf(znak[i]);
                            }

                            else {
                                varijabla = red.indexOf(znak[i], polje[0]);
                            }

                            if (varijabla != -1) // ako taj znak postoji u
                                                    // stringu
                            {
                                if (i == 0) {
                                    polje[i] = varijabla + 1;
                                }

                                else {
                                    polje[i] = varijabla;
                                }
                                i++;
                            }

                        } while (i <= 1);

                        neki_string = red.substring(polje[0], polje[1]);
                        Tkolo.setText(neki_string);

                        provjera = "Dobitna kombinacija";
                        uvjet++;
                        continue;
                    }


                }
            }

            in.close();

            brojevi_string = brojevi.toString();

            data = brojevi_string.split("\n");

            return data;

        } finally {
            if (in != null) {
                try {
                    in.close();
                    return data;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }


}}

最佳答案

您做错的是 doInBackground() 方法中的 Tbroj1.setText() 。您所要做的就是使用 onPostExecute 方法将数据发布到 UI 上:

public class loadData extends AsyncTask<String, Integer, Boolean> {
 protected Long doInBackground(String... arg0) {
     Oto test = new Oto();
     Boolean result = false;

    try {
        brojevi_varijabla = test.brojevi_739();
        result = true;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return result;
 }


 protected void onPostExecute(Boolean result) {
     if(result){
        if (Integer.valueOf(brojevi_varijabla[0]) > 10) {
            Tbroj1.setText("" + brojevi_varijabla[0]);
        } else {
            Tbroj1.setText(" " + brojevi_varijabla[0]);
        }
     }

 }
}

关于Android:AsyncTask 和读取互联网数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10635073/

相关文章:

java - AsyncTask 中通过代码旋转屏幕崩溃

java - 如何从 AsyncTask 获取并显示值?

android - 更新 ListView 中的进度条

android - 如何将模式工作表顶部边缘更改为圆形不起作用

android - 单击操作栏中的按钮弹出菜单

使用 Collections.sort 时 android.os.AsyncTask 中出现 java.lang.ArrayIndexOutOfBoundsException

java - 从 Android 中的 AsyncTask 返回一个值

android - Firebase 谷歌身份验证在 Release模式下不起作用

android - Admob SMART_BANNER 和 BANNER 之间的区别

Android 3.x EditText 光标颜色