Привет, я новичок в разработке Android и сейчас пытаюсь установить соединение со своей базой данных, чтобы иметь возможность работать с данными на своем телефоне.
Я использую OkHttp и mysqli с php.
Я написал обработчик, который обращается к страницам .php и выполняет вызовы базы данных.
public class OkHttpHandler extends AsyncTask {
private OkHttpClient client = null;
public String latestMessage = "";
public OkHttpHandler(){
client = new OkHttpClient();
}
@Override
protected String doInBackground(String... params) {
Request.Builder builder = new Request.Builder();
builder.url(params[0].toString());
Request request = builder.build();
try{
Response response = client.newCall(request).execute();
latestMessage = response.body().string();
return response.body().string();
} catch(Exception e){
e.printStackTrace();
}
//latestMessage = "failed";
return null;
}
И я хочу сделать что-то вроде этого:
public int getSongwriterId(String songwriter) {
OkHttpHandler okHttpHandler = new OkHttpHandler();
okHttpHandler.execute(url_get_songwriter_id + "?songwriter=" + songwriter);
String responseString = "";
while(responseString == "") {
responseString = okHttpHandler.latestMessage;
}
okHttpHandler.cancel(true);
Songwriter s = getSongwriterFromJSON(responseString);
return s.getId();
}
Теперь я знаю, что это уродливое while(true) — дерьмовое решение. Но как мне это сделать, чтобы я был на 100% уверен, что получил строку ответа до того, как передать ее в "getSongwriterFromJSON"?
Я действительно не понимаю, как это должно работать.
Код работает нормально, когда я отлаживаю его шаг за шагом, но приложение время от времени просто выдает черный экран без отладки. Я предполагаю, что это из-за цикла while(true), который, вероятно, просто запускается и запускается, и тактирует поток, так что мой фоновый поток просто умирает - я действительно больше не знаю.
Пожалуйста, если вы оказываете помощь, объясните, что я делаю неправильно и как мне следует поступить правильно. Спасибо.
Отредактируйте используемый php-файл:
Подробнее здесь: https://stackoverflow.com/questions/439 ... l-database