2014-11-22 154 views
0

我试图从我的数据库中获取数据,但它涉及到我的应用程序崩溃。 我已经试图一步一步地调试,发现这条线会崩溃从MySQL/php获取数据时出错

jArray = new JSONArray(result);

这里是我的全部代码:

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() + "\n"); 
       String line = "0"; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       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; 
     } 
    } 

进出口调用它的onCreate:

新GET_DATA()执行();

报告:

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 

的PHP是正确的即时通讯让我的JSON数据:

[{"A_ID":"1","A_USERNAME":"johann","A_PASSWORD":"joejoe"}] 

回答

0

我明白了!

我只是忘了删除我的PHP脚本的HTML标签:)现在我只是有某事像这样:

<?php 
    ... 
    ?> 

这就是它!希望我能帮助别人

0

你可以尝试做以下,而不是建设和直接调用您的AsyncTask:

new Handler(Looper.getMainLooper()).post(new Runnable() { 

    public void Run() { 
      new get_data().execute(); 
    } 
}); 

这是根据答案p被用户Timo Ohr罗列,可以找到here

1

使用如下所示的异步任务,不要忘了,包括权限的Android清单

<uses-permission android:name="android.permission.INTERNET" /> 

用这个异步任务在Android中:

要调用异步任务此任何方法使用方法:

List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("key1", "value1")); 
    params.add(new BasicNameValuePair("key1", "value2")); 
    new WEBSERVICEREQUESTOR(URL, params).execute(); 

制作类此为成员:

class WEBSERVICEREQUESTOR extends AsyncTask<String, Integer, String> 
{ 

    String URL; 
    List<NameValuePair> parameters; 

    private ProgressDialog pDialog; 

    public WEBSERVICEREQUESTOR(String url, List<NameValuePair> params) 
    { 
     this.URL = url; 
     this.parameters = params; 
    } 

    @Override 
    protected void onPreExecute() 
    { 
     pDialog = new ProgressDialog(LoginActivity.this); 
     pDialog.setMessage("Processing Request..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(String... params) 
    { 
     try 
     { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpEntity httpEntity = null; 
      HttpResponse httpResponse = null; 

      HttpPost httpPost = new HttpPost(URL); 

      if (parameters != null) 
      { 
       httpPost.setEntity(new UrlEncodedFormEntity(parameters)); 
      } 
      httpResponse = httpClient.execute(httpPost); 

      httpEntity = httpResponse.getEntity(); 
      return EntityUtils.toString(httpEntity); 

     } catch (Exception e) 
     { 

     } 
     return ""; 
    } 

    @Override 
    protected void onPostExecute(String result) 
    { 
     pDialog.dismiss(); 

     try 
     { 

     } catch (Exception e) 
     { 

     } 
     super.onPostExecute(result); 
    } 

} 
相关问题