【问题标题】:Passing data to AsynTask将数据传递给 AsyncTask
【发布时间】:2015-06-14 00:03:19
【问题描述】:

当我以这种方式传递 arg 时,一切正常:

new MerrTeDhenatEDegeve().execute("https://navigator.bkt.com.al/bktnavigator/al/deget/al_ilamre_deget.php");

当我以这种方式传递 arg 时,它会崩溃:

sh_d sh_d_instance = new sh_d();

new MerrTeDhenatEDegeve().execute(new String(sh_d_instance.deshifro(url_Deget)));

这是我的异步类:

class MerrTeDhenatEDegeve extends AsyncTask<String, String, String> {

    // Marrja e te dhenave te degeve
    protected String doInBackground(String... args) {

        // Ketu po krijojme parametrat qe do te na duhet per te krijuar querin ne db
        List<NameValuePair> params = new ArrayList<NameValuePair>();

        // Ketu po bejme kerkesen per tek serveri dhe presim te marrim pergjigjen e json ne string
        JSONObject jsonDega = jParserDega.makeHttpRequest(args[0], "GET", params);

        try {
            // Si fillim kontrollojme nqs kemi sukses ne marrjen e te dhenave apo jo
            int sukses = jsonDega.getInt(TAG_SUKSES);

            if (sukses == 1) {
                // Ne rast suksesi atehere dmth qe kemi marre te dhenat e degeve dhe fillojme qe ti vendosim ato ne listat perkatese te tyre
                Deget = jsonDega.getJSONArray(TAG_DEGET);

                // Bredhim tek secili objekt me te dhenat e vektorit json dhe per secilin prej objekteve marrim vlerat qe na duhen
                for (int i = 0; i < Deget.length(); i++) {

                    JSONObject VlObj = Deget.getJSONObject(i);

                    // Rruajme te dhenat ne listat perkatese ne menyre qe pastaj ti kapim globalisht
                    listaDegaID.add(VlObj.getString(TAG_DEGE_DID));
                    listaDegaEmrave.add(VlObj.getString(TAG_DEGE_EMRI));
                    listaDegaAdresave.add(VlObj.getString(TAG_DEGE_ADRESA));
                    listaDegaQyteteve.add(VlObj.getString(TAG_DEGE_QYTETI));
                    listaDegaLat.add(VlObj.getString(TAG_DEGE_LATITUDE));
                    listaDegaLng.add(VlObj.getString(TAG_DEGE_LONGITUDE));
                    listaDegaUrlFoto1.add(VlObj.getString(TAG_DEGE_URLFOTO_1));
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }
}

所以当它从另一个返回字符串的方法获取数据时它会崩溃。

我需要帮助。 谢谢

【问题讨论】:

标签: android asynctaskloader


【解决方案1】:

您遇到了哪些错误?你能发布堆栈跟踪吗?不看堆栈很难说什么,但是,我会告诉你检查这个deshifro 方法的结果。如果它返回 null,您很可能会在此处收到 nullPointerException:JSONObject jsonDega = jParserDega.makeHttpRequest(args[0], "GET", params);

【讨论】:

  • 我已经检查过 deshifro 并且它的回复与此相同:“navigator.bkt.com.al/bktnavigator/al/deget/al_ilamre_deget.php
  • 它没有显示任何错误它运行正常,但是当从主要活动启动异步时它崩溃
  • 当它崩溃时它不会抛出任何错误?它必须!某些东西使应用程序崩溃,它需要显示一些东西。如果您使用的是 AS,logcat 可能会在崩溃后将过滤器删除到您的应用程序中,但无论如何都要尝试查看堆栈是否有错误。您是否有任何机会尝试从 doInBackground 方法内部更改布局中的某些内容?如果是,则应用程序将崩溃,因为只有主线程可能会导致布局更改。
  • 它在控制台上给了我这个错误:[2015-06-14 01:17:45 - ddms] null java.nio.BufferOverflowException at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:200 ) 在 com.android.ddmlib.JdwpPacket.movePacket(JdwpPacket.java:235) 在 com.android.ddmlib.Debugger.sendAndConsume(Debugger.java:347) 在 com.android.ddmlib.Client.forwardPacketToDebugger(Client.java: 698) 在 com.android.ddmlib.MonitorThread.processClientActivity(MonitorThread.java:344) 在 com.android.ddmlib.MonitorThread.run(MonitorThread.java:263)
  • 我正在尝试解密该 url 的加密版本并将其传递给 asyncttask。进行解密的方法是“deshifro”。当我在 Toast msg 上看到 deshifro 的输出时,它工作正常。
猜你喜欢
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2013-02-15
相关资源
最近更新 更多