将数据从在线MySQL数据库加载到android应用程序

时间:2014-04-17 12:08:48

标签: java android mysql

我正在使用此代码将数据从在线数据库加载到我的Android应用程序。 我想知道我可以添加什么来使这段代码更好? 有时进度对话框一直在旋转,永远不会得到数据,然后应用程序被卡住了,关于我如何阻止它的任何想法?

    class LoadAllSections extends AsyncTask<String, String, String>
{

    // make a progress dialog appear with the selected specifics
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setMessage("Loading all sections, please wait");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    // in the background run this code to retrieve data from the server
    protected String doInBackground(String... args) 
    {
        List<NameValuePair> params = new ArrayList<NameValuePair>();

        JSONObject json = jParser.makeHttpRequest(url_Sections,"POST", params);
        try 
        {
            int success = json.getInt(TAG_SUCCESS);
            sections = json.getJSONArray(TAG_SECTIONS);

            if (success == 1) 
            {
                for (int i = 0; i < sections.length(); i++) 
                {
                    JSONObject c = sections.getJSONObject(i);

                    section_id = c.getString(TAG_SECTION_ID);
                    section_name = c.getString(TAG_SECTION_NAME);
                    section_desc = c.getString(TAG_SECTION_DESC);
                    section_image = c.getString(TAG_SECTION_IMAGE);
                    section_valid = c.getString(TAG_SECTION_VALID);     

                    HashMap <String,String> sectionmap = new HashMap<String,String>();

                    sectionmap.put(TAG_SECTION_ID, section_id);
                    sectionmap.put(TAG_SECTION_NAME, section_name);
                    sectionmap.put(TAG_SECTION_DESC, section_desc);
                    sectionmap.put(TAG_SECTION_IMAGE, section_image);
                    sectionmap.put(TAG_SECTION_VALID, section_valid);

                    sectionlist.add(sectionmap);
                }
            }
            else
            {
            finish();
            }
        }
        catch (JSONException e) 
        {
            e.printStackTrace();
        }
        return null;
    }

    // disable the progress dialog and load data to the gridview
    protected void onPostExecute(String file_url) 
    {
        pDialog.dismiss();
        adapter=new SectionAdapter(MainActivity.this,sectionlist);
        SectionsGridView.setAdapter(adapter);
    }
}

1 个答案:

答案 0 :(得分:0)

我想添加评论,但我不被允许。 没有足够的声誉: - (

  • 将url_section作为doInBackground的参数传递,而不是将其设为全局。
  • 我会将httpRequest insde放在try catch块中。
  • 如果httpRequest没有回答,您是否设置了超时?我会把它设置为 60秒我认为默认设置为600秒。
  • 为什么将file_url传递给onPostExecute而不是传递 sectionList?
  • 看看AsyncTask。如果您不想在方法之间传递任何内容,也可以使用Void。所以在你的情况下,AsyncTask也会这样做。