我正在研究 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 语句为假,因此说初始化失败。
如何等待线程完成以便检查变量。
感谢您的任何帮助,您可以提供。