Android:AsyncTask导致应用崩溃,没有打印错误日志

时间:2017-08-19 21:59:18

标签: android android-studio android-asynctask

我目前正在尝试将Android应用与服务器连接的教程(链接:https://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/)。 但是,我对AsyncTask有困难,它应该加载数据库的元素。它导致应用程序崩溃并且在logcat中没有留下任何错误日志(也尝试过“无过滤器”)。我也用try catch块包围了execute调用,但应用程序仍然崩溃。是什么原因导致错误?

以下是代码摘录:

public class AllProductsActivity extends ListActivity {
private static String url_all_products = "https://api.androidhive.info/android_connect/get_all_products.php";
... 
@Override
    public void onCreate(Bundle savedInstanceState) {
try {
            new LoadAllProducts().execute();
        }catch (Exception e){
            e.printStackTrace();
            System.out.println(e.getMessage());
        }

...

/**
     * Background Async Task to Load all product by making HTTP Request
     * */
    class LoadAllProducts extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(AllProductsActivity.this);
            pDialog.setMessage("Loading products. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        /**
         * getting All products from url
         * */
        @Override
        protected String doInBackground(String... args) {
            // Building Parameters
            List<Pair> params = new ArrayList<Pair>();
            // getting JSON string from URL
            JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);

            // Check your log cat for JSON reponse
            Log.d("All Products: ", json.toString());

            try {
                // Checking for SUCCESS TAG
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    // products found
                    // Getting Array of Products
                    products = json.getJSONArray(TAG_PRODUCTS);

                    // looping through All Products
                    for (int i = 0; i < products.length(); i++) {
                        JSONObject c = products.getJSONObject(i);

                        // Storing each json item in variable
                        String id = c.getString(TAG_PID);
                        String name = c.getString(TAG_NAME);

                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        map.put(TAG_PID, id);
                        map.put(TAG_NAME, name);

                        // adding HashList to ArrayList
                        productsList.add(map);
                    }
                } else {
                    // no products found
                    // Launch Add New product Activity
                    Intent i = new Intent(getApplicationContext(),
                            AddNewProductActivity.class);
                    // Closing all previous activities
                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(i);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String file_url) {
            // dismiss the dialog after getting all products
            pDialog.dismiss();
            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {
                    /**
                     * Updating parsed JSON data into ListView
                     * */
                    ListAdapter adapter = new SimpleAdapter(
                            AllProductsActivity.this, productsList,
                            R.layout.list_item, new String[] { TAG_PID,
                            TAG_NAME},
                            new int[] { R.id.pid, R.id.name });
                    // updating listview
                    setListAdapter(adapter);
                }
            });

        }

    }

1 个答案:

答案 0 :(得分:1)

问题不在于您的代码实现。我可以在你的代码中看到webservice url

private static String url_all_products = "https://api.androidhive.info/android_connect/get_all_products.php";

问题出在这个Web服务上。那不再有用了。我测试了webservice,因为你提到了邮递员的教程链接,这已不再适用了。希望你明白我的观点。如果您有任何混淆,请随时问我。