我正在开发android / php项目。我正在创建一个用于android的库,用户调用初始化函数,我将该函数传递给ID。
然后该函数应该向我的服务器发送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声明是错误的,因此说初始化失败了。
我如何等待线程完成,以便检查变量。
感谢您提供的任何帮助。