-1

我是 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在另一个读取 QR 码的类中,我在读取 QR 码new CreateNewProduct().execute();后调用它。

这是 LogCat:

更新:

在我添加http://setTexT()作为评论后,JSON 错误被添加到 LogCat:

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

谢谢您的帮助!

4

3 回答 3

1

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

于 2013-05-16T17:09:49.690 回答
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

于 2013-05-15T21:48:04.083 回答
0

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

由于您不允许UI从后台访问元素,这一行

qrCodeText.setText("DONE!");

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

于 2013-05-15T21:48:37.063 回答