私はListViewに項目のリストを読み込むAndroidアプリケーションを書いています。 ListViewには、ユーザーが選択したアイテムを識別するアダプタとonClick()メソッドが含まれています。Android開発 - 通常のコードが実行される前のAsynタスクの結果を取得
すべてがうまくいますが、onClick()には、GPSデータベースからGPS座標を取得する非同期タスクを実行するための呼び出しがあります。問題は、Asyncが完了せず、後続の操作にAsyncの座標が必要であることです。 onClick()メソッド内
:
new AsyncGetSkipDetails().execute(skipNo);
Uri gmmIntentUri = Uri.parse("google.navigation:q=" + lat + "," + lng);
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
if (mapIntent.resolveActivity(getPackageManager()) != null) {
startActivity(mapIntent);
}
これはGoogleマップを開き、Googleマップ上の場所を表示するには、緯度とLNGを使用しています。
マイ非同期タスク:
public class AsyncGetSkipDetails extends AsyncTask<String, String, String> {
ProgressDialog progress = ProgressDialog.show(PendingOrdersActivity.this, "Please Wait", "Please Wait While Skip Coordinates Are Loaded");
HttpURLConnection conn;
URL url = null;
@Override
protected void onPreExecute() {
//this method will be running on UI thread
progress.setCancelable(false);
progress.isIndeterminate();
progress.show();
}
@Override
protected String doInBackground(String... params) {
try {
// Enter URL address where your php file resides
url = new URL("http://johandrefouche.ddns.net/SG/getskipdetails.inc.php");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "exception";
}
try {
// Setup HttpURLConnection class to send and receive data from php and mysql
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(READ_TIMEOUT);
conn.setConnectTimeout(CONNECTION_TIMEOUT);
conn.setRequestMethod("GET");
// setDoInput and setDoOutput method depict handling of both send and receive
conn.setDoInput(true);
conn.setDoOutput(true);
// Append parameters to URL
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("skipNumber", params[0]);
String query = builder.build().getEncodedQuery();
// Open connection for sending data
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
conn.connect();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return "exception";
}
try {
int response_code = conn.getResponseCode();
// Check if successful connection made
if (response_code == HttpURLConnection.HTTP_OK) {
// Read data sent from server
InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
//StringBuilder result = new StringBuilder();
String line;
line = reader.readLine();
// Pass data to onPostExecute method
return (line);
} else {
return ("unsuccessful");
}
} catch (IOException e) {
e.printStackTrace();
return "exception";
} finally {
conn.disconnect();
}
}
@Override
protected void onPostExecute(String line) {
//this method will be running on UI thread
tempSkip = line.split("<br>");
progress.dismiss();
}
}
私は緯度とLNGが戻されるまで待つことなく、助けにはならないためにプログレスバーを追加してみました。
私は非同期をテストし、onPostExecute()内から別のメソッドを呼び出すと動作します。
お願いします。 Android開発の新機能
これを参照してください、https://stackoverflow.com/a/43690935/5993410 –