douka19950505 2014-11-22 11:47
浏览 49
已采纳

从mysql / php获取数据时出错

Im trying to get data from my database , but it comes to a crash in my App. I already tried to debug it step by step and found out that this line is going to crash

jArray = new JSONArray(result);

Here is my whole Code :

   public class get_data extends AsyncTask<Void, Void, Boolean>
    {

        @Override
        protected Boolean doInBackground(Void... params) {

            String result = null;
            InputStream is = null;
            StringBuilder sb = null;
            // http post
            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://example.com/output.php");
                // httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
            } catch (Exception e) {
                Log.e("log_tag", "Error in http connection" + e.toString());
            }
            // convert response to string
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        is, "iso-8859-1"), 8);
                sb = new StringBuilder();
                sb.append(reader.readLine() + "
");
                String line = "0";
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "
");
                }
                is.close();
                result = sb.toString();
            } catch (Exception e) {
                Log.e("log_tag", "Error converting result " + e.toString());
            }
            // paring data
            JSONArray jArray;
            try {
                jArray = new JSONArray(result);
                JSONObject json_data = null;
                ct_name = new String[jArray.length()];
                for (int i = 0; i < jArray.length(); i++) {
                    json_data = jArray.getJSONObject(i);
                    ct_id = json_data.getInt("A_ID");
                    ct_name[i] = json_data.getString("A_USERNAME");
                }
            } catch (JSONException e1) {
                Toast.makeText(getBaseContext(), "No output", Toast.LENGTH_LONG)
                        .show();
            } catch (ParseException e1) {
                e1.printStackTrace();
            }
            ausgabe.setText(ct_name[0]);
            return null;
        }
    }

Im calling it in onCreate :

new get_data().execute();

Report :

11-22 12:31:18.762: E/AndroidRuntime(376): FATAL EXCEPTION: AsyncTask #1
11-22 12:31:18.762: E/AndroidRuntime(376): Process: com.JewE.engoneengine, PID: 376
11-22 12:31:18.762: E/AndroidRuntime(376): java.lang.RuntimeException: An error occured while executing doInBackground()
11-22 12:31:18.762: E/AndroidRuntime(376):  at android.os.AsyncTask$3.done(AsyncTask.java:300)
11-22 12:31:18.762: E/AndroidRuntime(376):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
11-22 12:31:18.762: E/AndroidRuntime(376):  at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
11-22 12:31:18.762: E/AndroidRuntime(376):  at java.util.concurrent.FutureTask.run(FutureTask.java:242)
11-22 12:31:18.762: E/AndroidRuntime(376):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-22 12:31:18.762: E/AndroidRuntime(376):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-22 12:31:18.762: E/AndroidRuntime(376):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-22 12:31:18.762: E/AndroidRuntime(376):  at java.lang.Thread.run(Thread.java:841)
11-22 12:31:18.762: E/AndroidRuntime(376): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
11-22 12:31:18.762: E/AndroidRuntime(376):  at android.os.Handler.<init>(Handler.java:200)
11-22 12:31:18.762: E/AndroidRuntime(376):  at android.os.Handler.<init>(Handler.java:114)
11-22 12:31:18.762: E/AndroidRuntime(376):  at android.widget.Toast$TN.<init>(Toast.java:388)
11-22 12:31:18.762: E/AndroidRuntime(376):  at android.widget.Toast.<init>(Toast.java:114)
11-22 12:31:18.762: E/AndroidRuntime(376):  at android.widget.Toast.makeText(Toast.java:273)
11-22 12:31:18.762: E/AndroidRuntime(376):  at com.JewE.engoneengine.java_get_data$get_data.doInBackground(java_get_data.java:90)
11-22 12:31:18.762: E/AndroidRuntime(376):  at com.JewE.engoneengine.java_get_data$get_data.doInBackground(java_get_data.java:1)
11-22 12:31:18.762: E/AndroidRuntime(376):  at android.os.AsyncTask$2.call(AsyncTask.java:288)
11-22 12:31:18.762: E/AndroidRuntime(376):  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-22 12:31:18.762: E/AndroidRuntime(376):  ... 4 more

The PHP is correct Im getting my json data :

[{"A_ID":"1","A_USERNAME":"johann","A_PASSWORD":"joejoe"}]
  • 写回答

3条回答 默认 最新

  • douluyezhen4512 2014-11-25 16:04
    关注

    I got it !

    I just forgot to delete the html tags in my php script :) Now I just have sth like this :

      <?php
        ...
        ?>
    

    That was it ! Hopefully I can help someone

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?