私はすべてを試しましたが、nothingsは機能します。AsyncTask:onPostExecute()は呼び出されません
私は、動作するApiを呼び出そうとしています。しかし、onPostExecute()は呼び出されないため、コールバックが機能しません。
class RetrieveInput extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream stream = connection.getInputStream();
Scanner s = new Scanner(stream).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
return result;
} catch (IOException ex) {
Log.d("Error", "Error fetching data");
Log.d("STACKTRACE", ex.getStackTrace().toString());
}
return null;
}
@Override
protected void onPostExecute(String result) {
repo.setString(result);
}
}
これはAsyncTaskが呼び出されるところである:
この
は私のAsyncTaskクラスですpublic void getString() {
if (url != null) {
RetrieveInput input = new RetrieveInput();
input.execute(url);
}
}
これは私のコールバックが配置されている場所です。事前に
public class UserRepository implements IRepository {
private Connection connection;
private String result;
private Gson gson;
public UserRepository() {
this.connection = new Connection(this);
this.gson = new Gson();
}
public User find(String userName) {
connection.setUrl("http://10.0.2.2:8080/api-0.1.0/users/get/" + userName);
connection.getString();
User user = gson.fromJson(this.result, User.class);
return user;
}
@Override
public void setString(String result) {
this.result = result;
}
}
感謝を!
を実行すると、InBackground()が呼び出されるか、そうでない場合もありますか? – Kriti
それが呼び出されます!結果の文字列にJSON –
が含まれている可能性があります。 'connection.setConnectTimeout(10000);'を使って、関数が常に返ることを確認してください。また、 'doInBackground'メソッドの異なる行にブレークポイントを置くことによって、あなたのアプリケーションをデバッグしてみてください。 –