0

我正在研究 android/php 项目。我正在为用户调用一个初始化函数并为该函数传递一个 ID 的 android 库。

然后,该函数应该向我的服务器发送一个 HTTP 帖子,在该服务器上检查我的数据库是否存在 ID。根据来自服务器的响应,我需要设置为设置初始化已完成,或者记录错误以说明无法完成初始化。

但是,因为我需要在线程中运行帖子,所以我的代码直接下降到下一行代码,这意味着初始化失败。那么如何在线程完成之前暂停代码执行。

下面是初始化函数。

public static void Initialise(Context context, String appID)
    {
        appContext = context;
        CritiMon.appID = appID;
        isAppIdCorrect(appID);
        if (appIdValid)
        {
            isInitialised = true;
        }
        else
        {
            Log.e("CritiMon Initialisation", "Incorrect App ID was detected. Please check that you have entered the correct app ID. The app ID can be found on the web pages");
        }
    }

下面是isAppIdCorrect函数

private static void isAppIdCorrect(String appID)
    {

        new Thread(new Runnable() {

            @Override
            public void run() {

                try
                {
                    HttpClient httpClient = new DefaultHttpClient();
                    HttpPost httpPost = new HttpPost(appContext.getString(R.string.post_url) + "/AccountManagement.php");

                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                    nameValuePairs.add(new BasicNameValuePair("type", "checkAppId"));
                    nameValuePairs.add(new BasicNameValuePair("appID", CritiMon.appID));

                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                    HttpResponse response = httpClient.execute(httpPost);
                    InputStream is = response.getEntity().getContent();
                    BufferedInputStream bis = new BufferedInputStream(is);
                    ByteArrayBuffer baf = new ByteArrayBuffer(20);

                    int current = 0;
                    while ((current = bis.read()) != -1)
                    {
                        baf.append((byte)current);
                    }

                    Log.d("Http Response", new String(baf.toByteArray()));

                    String httpResponse = new String(baf.toByteArray());

                    if (httpResponse.equals("200 OK"))
                    {
                        appIdValid = true;
                    }
                    else
                    {
                        appIdValid = false;
                    }

                }
                catch (ClientProtocolException ex)
                {
                    Log.e("ClientProtocolException", ex.toString());
                }
                catch (IOException ex)
                {
                    Log.e("IOException", ex.toString());
                }
                appIdCheckComplete = true;
            }
        }).start();
    }

所以在上面的代码中,isAppIdCorrect函数200 OK按预期返回,但由于该函数在线程中,它在线程完成之前立即转到 if 语句,所以 if 语句为假,因此说初始化失败。

如何等待线程完成以便检查变量。

感谢您的任何帮助,您可以提供。

4

1 回答 1

1

使用带有启动线程的异步模型并设置某种 onCompleteListener 并且在它触发之前什么都不做。看看AsyncTask类。

于 2013-06-15T23:09:58.137 回答