Я собираю свое первое приложение для Android, которое является также моим введением в язык программирования Java, и поэтому я спотыкаюсь о том, что может быть некоторыми очень основными понятиями.
Мой план состоит в том, чтобы установитьсоздать сервер, полный функций php, и поместить все вызовы php в одну статическую библиотеку функций.Я мог бы изменить этот статический класс на singleton, если это упростит эту проблему.
Изнутри действия я делаю следующий вызов:
phpCalls.VerifyAccount(userName, password);
и внутри статического класса phpCalls яПолучил следующий код:
PHP_AsyncTask validateAccountTask = new PHP_AsyncTask();
validateAccountTask.execute(new String[] {DOMAIN + PHP_confirm_account_exists, username, password});
и
private static class PHP_AsyncTask extends AsyncTask<String, Void, String>{
//This class should take the full URL of the php function to call and return the string result. Somehow.
@Override
protected String doInBackground(String... args)
{
String response = "";
try
{
String url = args[0];
String username = args[1];
String password = args[2];
URL validateURL = new URL(url);
String credentials = "Basic " + new String(Base64.encode((username + ":" + password).getBytes(), Base64.NO_WRAP)) ;
//TODO: handle 501 result
HttpURLConnection conn = (HttpURLConnection)validateURL.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Authorization",credentials);
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = reader.readLine()) != null)
{
response += line;
}
reader.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
return response;
}
@Override
protected void onPostExecute(String result)
{
//have something happen when the php returns - need to pass the result somewhere
}
Извините, если форматирование кода не является идеальным - я не являюсь постоянным постером на Stackoverflow.
В любом случае, я пытаюсь определить, как лучше всего обработать результат из вызова php - он возвращается в функцию onPostExecute класса PHP_AsyncTask как результат, но мне нужно как-то передать его обратно в поток пользовательского интерфейса.Очевидно, я не могу создать указатель на функцию в моей деятельности и передать ее в асинхронный класс.Есть ли способ создать слушатель в моей деятельности и передать его так, чтобы я мог передать результат из PHP_AsyncTask обратно в свою деятельность?Или я полностью лаю не на том дереве - есть какой-то предпочтительный подход, который я должен использовать?