java - 致命异常 :Async Task #1

标签 java android mysql

我正在尝试从 mysql 数据库中获取数据并将其加载到 ListView 中,但无法执行此操作,因为在出​​现进度对话框后应用程序崩溃了。logcat 显示错误为执行 doInBackground() 时发生错误。请帮忙我,这是我的java文件

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;

    import org.apache.http.NameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import android.app.ListActivity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;

     public class CompScience extends ListActivity{

  // Progress Dialog
    private ProgressDialog pDialog;

    // Creating JSON Parser object
    JSONParser jParser = new JSONParser();

    ArrayList<HashMap<String, String>> productsList;

    // url to get all products list
    private static String url_all_products = "http://10.0.2.2/books/get_all_books.php";

    // JSON Node names
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_PRODUCTS = "computerscience";
    private static final String TAG_PID = "bid";
    private static final String TAG_NAME = "title";
    private static final String TAG_DESCRIPTION = "author";

    // products JSONArray
    JSONArray computerscience = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_comp_science);

        // Hashmap for ListView
        productsList = new ArrayList<HashMap<String, String>>();

        // Loading products in Background Thread
        new LoadAllProducts().execute();

        // Get listview
        ListView lv = getListView();
        // on seleting single product
        // launching  Product Screen
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                //String description = ((TextView) view).getText().toString();
                Intent i = new Intent(CompScience.this,List1.class);
            //  i.putExtra("description", description);


                startActivity(i);
            }

        });
    }


     class LoadAllProducts extends AsyncTask<String, String, String> {
                @Override
                protected void onPreExecute() {
                    super.onPreExecute();
                    pDialog = new ProgressDialog(CompScience.this);
                    pDialog.setMessage("Loading...");
                    pDialog.setIndeterminate(false);
                    pDialog.setCancelable(false);
                    pDialog.show();
                }
                protected String doInBackground(String... args) {
                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    // 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
                            computerscience = json.getJSONArray(TAG_PRODUCTS);

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

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

                                // 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);
                                map.put(TAG_DESCRIPTION, description);

                                // adding HashList to ArrayList
                                productsList.add(map);
                            }
                        } else {
                            Log.e(TAG_PRODUCTS, "No products found");
                        }
                    } 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(
                                    CompScience.this, productsList,
                                    R.layout.list_item, new String[] { TAG_PID,
                                            TAG_NAME,TAG_DESCRIPTION},
                                    new int[] { R.id.bid, R.id.title,R.id.author });
                            // updating listview
                            setListAdapter(adapter);
                        }
                    });

                }



            }

这是日志

    04-08 02:59:40.928: E/AndroidRuntime(2224): FATAL EXCEPTION: AsyncTask #1
    04-08 02:59:40.928: E/AndroidRuntime(2224): java.lang.RuntimeException: An error occured while executing doInBackground()
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at java.lang.Thread.run(Thread.java:841)
    04-08 02:59:40.928: E/AndroidRuntime(2224): Caused by: java.lang.NullPointerException
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at com.example.dashboard.CompScience$LoadAllProducts.doInBackground(CompScience.java:94)
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at com.example.dashboard.CompScience$LoadAllProducts.doInBackground(CompScience.java:1)
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
    04-08 02:59:40.928: E/AndroidRuntime(2224):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
    04-08 02:59:40.928: E/AndroidRuntime(2224):     ... 3 more

浏览器响应:

    {
    "computerscience": [
        {
            "bid": "1",
            "title": "Electronic Principles",
            "author": "Albert Malvino & David J Bates"
        },
        {
            "bid": "2",
            "title": "Electronic Circuits",
            "author": "RD Sudhakar"
        },
        {
            "bid": "3",
            "title": "Digital Principles & Applications",
            "author": "Leach, Malvino, Saha"
        }
    ],
    "success": 1
}

最佳答案

试试看:

List<NameValuePair> params = new ArrayList<NameValuePair>();
        // getting JSON string from URL
        params.add(new BasicNameValuePair(TAG_APPID, appID));
        JSONObject json = jParser.makeHttpRequest(url_all_products, "GET",
                params);
        // Check your log cat for JSON reponse
        Log.d("All Products: ", json.toString());

有你需要的参数:

params.add(new BasicNameValuePair(TAG_APPID, appID));

来自: How to connect Android with PHP, MySQL

关于java - 致命异常 :Async Task #1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22930456/

相关文章:

php - 如何访问 cpanel 服务器中的数据库?

mysql - 如何将与 JBoss 捆绑的 Liferay 6.2 与 MySQL 数据库连接?

java - 在 Java 中排出标准错误

JavaFX 对话 - 游戏

java - 使用Java获取Windows系统温度

由于 sun.misc.IOUtils.createTempFile ("+~JF"、 ".tmp"、null,Java Font.createFont 在 Linux 上失败)

android - 编辑配置自定义特定的检测运行器缺少属性

mysql - 如何使用 Grails 2.0 获得可为空的约束?

android - google map android - 无法从 BitmapDescriptorFactory.fromAsset 设置 map 图标

android - 如何将Imageview置于其他布局之后