0

对 Android 来说相当新,并使用 Android 2.3.5 (Gingerbread) 创建/测试了我的应用程序。我有多个数据库连接,我使用了 HTTP Post(但没有使用 AsyncTask),一切都很好。然后我在 Android 4.0.3 (Ice Cream Sandwhich) 上对其进行了测试,但我无法连接到数据库,因此我的应用程序无法运行。

想知道我需要考虑什么才能让这个工作应用程序在 Ice Cream Sandwhich 上运行?我确实将数据库连接移出 UI 线程(但不是 AsyncTask),但它仍然没有连接。

这是我在 UI 线程之外创建的课程:

公共类 InputsRecapGetTask {

public InputsRecapGetTask(InputsRecap activity,
        ProgressDialog progressDialog) {
    this.activity = activity;
    this.progressDialog = progressDialog;

    getDatabase();

}

public void getDatabase() {
    // TODO Auto-generated method stub
    progressDialog.show();

    // create new default httpClient
            HttpClient httpclient = new DefaultHttpClient();
            // create new http post with url to php file as pararmenter
            HttpPost httppost = new HttpPost(
                    "http://test.com/returnBBD.php");

            // assign input text to strings
            user = Login.userStatic;
4

1 回答 1

0

你检查过日志吗?IIRC,Android 4 要求 http 请求不是从主线程完成的。必须有消息告诉这一点。

另一方面,请记住

  1. 如果您转动屏幕,创建 AsyncTask 的 Activity 可能会(永远)从屏幕上移除并被另一个 Activity 替换;它(第一个活动)将收到结果,但不会显示任何内容;

  2. 在 Android 4 中,默认情况下,所有 AsyncTask 都由单个线程提供服务;这保证响应按请求发出的顺序到达,但也意味着第二个请求将仅在第一个请求完成(或超时)后开始。

根据 MVC,数据检索必须由模型完成,而不是由生命周期为 View 的控制器(Activity)完成。

于 2013-03-05T05:47:48.013 回答