【问题标题】:Fatal Exception AsyncTask #1 at doInBackground()doInBackground() 处的致命异常 AsyncTask #1
【发布时间】:2013-05-15 21:35:22
【问题描述】:

我是 Android 新手,我正在开发一个应用程序,该应用程序可以从 QR 码获取一些信息,然后连接一个 php 页面。但是,应用程序在读取 QR 码后崩溃,并且 logCat 在我运行它时会给出致命异常 AsyncTask #1。

这里是doInBackground() 代码:

class CreateNewProduct extends AsyncTask<String, String, String>
    { 
        protected String doInBackground(String... args)
        {
            String tc= new String();
            tc= "3123";

            String no = new String();
            no = "3";

            /*String tcKimlik = "3123";
            String hatNo = "3";*/

            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("tc", tc));
            params.add(new BasicNameValuePair("no", no ));

            JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params);

            try
            {
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1)
                {

                    //qrCodeText.setText("DONE!");
                }
                else
                {
                    //qrCodeText.setText("Nope...");
                }
            }
            catch (JSONException e)
            {
                e.printStackTrace();
            }

            return null;
        }

    } // End of CreateNewProduct

CreateNewProduct 在另一个读取二维码的类中,我在读取二维码后将其称为new CreateNewProduct().execute();

这里是 LogCat:

更新:

在我添加http:// 并将setTexT() 作为注释后,LogCat 中添加了 JSON 错误:

05-16 01:00:08.900: E/JSON Parser(11835): Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject

05-16 01:00:08.900: W/dalvikvm(11835): threadid=14: thread exiting with uncaught exception (group=0x410572a0)
05-16 01:00:08.910: E/AndroidRuntime(11835): FATAL EXCEPTION: AsyncTask #1
05-16 01:00:08.910: E/AndroidRuntime(11835): java.lang.RuntimeException: An error occured while executing doInBackground()
05-16 01:00:08.910: E/AndroidRuntime(11835):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at java.lang.Thread.run(Thread.java:856)
05-16 01:00:08.910: E/AndroidRuntime(11835): Caused by: java.lang.NullPointerException
05-16 01:00:08.910: E/AndroidRuntime(11835):    at com.example.yoritreader.MainActivity$CreateNewProduct.doInBackground(MainActivity.java:442)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at com.example.yoritreader.MainActivity$CreateNewProduct.doInBackground(MainActivity.java:1)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-16 01:00:08.910: E/AndroidRuntime(11835):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-16 01:00:08.910: E/AndroidRuntime(11835):    ... 5 more

感谢您的帮助!

【问题讨论】:

    标签: android json android-asynctask httpclient futuretask


    【解决方案1】:
    Target host must not be null, or set in parameters. scheme=null, host=null, path=www.halilcosgun.com/qrcode.php
    

    您可能忘记将协议放在您网站的 URL 中。

    试试http://www.halilcosgun.com/qrcode.php

    https://stackoverflow.com/a/8768930/1296658

    【讨论】:

    • 在我添加“http://”并将“setText”作为注释后,它在 LogCat 中又添加了 2 行
    • Error parsing data org.json.JSONException: Value &lt;!DOCTYPE of type java.lang.String cannot be converted to JSONObject。好吧,您没有从 php 站点读取 JSON,因此在 Android 上无法读取它是正常的。您需要在客户端解析您自己获得的字符串,或者在服务器上公开 JSON 格式字符串。
    • 我还使用了一个名为JSONParser 的类来获取JSONObject。错误可能在其中吗?
    • 问题是你试图解析一个不包含 JSON 作为 JSON 的字符串。看看 JSON 格式是什么样子的@@w3schools.com/json 你暴露的是一个 html 站点,它不能像 JSON 解析器那样解析,但是你需要自己制作一个 HTML 解析器或者在网上找到一个
    • 解决JSON问题也能解决FATAL EXCEPTION: AsyncTask #1问题吗?
    【解决方案2】:

    从 php 文件中删除 &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; 解决了该错误。

    【讨论】:

      【解决方案3】:

      我相信您当前的问题是您在发送请求时需要将"http://" 或类似名称添加到您的url 中。那应该可以解决您当前的问题IllegalStateException。您的下一个问题是尝试从背景Thread 访问UI 元素。您需要将调用setText() 的行移至onPostExecute()Activity 方法

      由于不允许您从该行的后台访问UI 元素

      qrCodeText.setText("DONE!");
      

      以及您尝试更新UI 的任何其他人都会给您一个错误。您可以return successonPostExecute() 并以这种方式执行它,因为所有其他AsyncTask 方法都在UI 上运行。这是假设他们可以访问这些元素,因为它们是 Activity 的内部类或在构造函数中传递对它们的引用

      【讨论】:

      • 在我添加“http://”并将“setText”作为注释后,它向 LogCat 添加了 2 行: E/JSON Parser(11835): Error parsing data org.json.JSONException: java.lang.String 类型的值 SONObject 和 W/dalvikvm(11835): threadid=14: 线程退出未捕获异常 (group=0x410572a0)
      • 请不要更改您的 OP...它会对其他人造成混淆和无用。如果您遇到与原始问题类似的问题,您可以添加它。如果这是一个单独的问题,那么您可以接受有助于解决原始问题的答案并发布新问题
      • 从 LogCat 中可以看到致命异常:AsyncTask #1 仍未解决。 LogCat 中只添加了错误解析数据,我无法得到解决问题的答案。
      • 我知道...添加额外的 logcat 很好。我的意思是注释掉setText() 电话。我会试着多看一些
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多