現在、場所の画面を持つアプリケーションを作成すると、地図マーカーが押されるとAlertDialogがポップアップして情報が表示されます。 AlertDialogのアイコンをURLからのその場所に関連付けられたイメージに設定したいとします。ローカルに保存するイメージの場所が多すぎます。(Android App)URLからダウンロードした画像としてAlertDialog .setIcon()を設定しようとしています
public Drawable pGraphic = null;
public class LoadImageFromWeb extends AsyncTask<String, Void, Drawable> {
protected Drawable doInBackground(String... urls) {
try {
InputStream is = (InputStream) new URL(urls[0]).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
BT_debugger.showIt(d.toString());
return d;
} catch (Exception e) {
BT_debugger.showIt(e.toString());
return null;
}
}
protected void onPostExecute(Drawable result) {
BT_debugger.showIt("Image Loaded");
pGraphic = result;
}
}
//handleMarkerClick..
public void handleMarkerClick(final int markerIndex) {
BT_debugger.showIt(fragmentName + ":handleMarkerClick");
//vars used in callout bubble...
BT_item tappedItem = null;
String latitude = "";
String longitude = "";
String title = "";
String subTitle = "";
String loadScreenWithItemId = "";
String loadScreenWithNickname = "";
String calloutTapChoice = "";
Drawable pinGraphic = null;
//if marker index == -1 then the user tapped the device's location icon...
if(markerIndex == -1){
BT_debugger.showIt(fragmentName + ":handleMarkerClick. Device location tapped");
//use the graphic for the device location...
pinGraphic = getResources().getDrawable(R.drawable.bt_screen_map_marker_device);
//latitude/longitude is current location or last saved location...
if(mapView.isMyLocationEnabled()){
Location deviceLoc = mapView.getMyLocation();
latitude = String.valueOf(deviceLoc.getLatitude());
longitude = String.valueOf(deviceLoc.getLongitude());
//title, subTitle...
title = pokegoaus_appDelegate.rootApp.getRootDevice().getDeviceModel();
subTitle = getString(R.string.mapUserLocationDescription) + "\nLatitude: " + latitude + "\nLongitude: " + longitude;
}else{
//latitude/longitude is last current saved...
latitude = goaus_appDelegate.rootApp.getRootDevice().getDeviceLatitude();
longitude = goaus_appDelegate.rootApp.getRootDevice().getDeviceLongitude();
//title, subTitle...
title = goaus_appDelegate.rootApp.getRootDevice().getDeviceModel();
subTitle = getString(R.string.mapUserLocationDescription) + "\nLatitude: " + latitude + "\nLongitude: " + longitude;
}//isMyLocationEnabled...
}else{
//get the BT_item at this index...
tappedItem = childItems.get(markerIndex);
latitude = BT_strings.getJsonPropertyValue(tappedItem.getJsonObject(), "latitude", "");
longitude = BT_strings.getJsonPropertyValue(tappedItem.getJsonObject(), "longitude", "");
title = BT_strings.getJsonPropertyValue(tappedItem.getJsonObject(), "title", "");
subTitle = BT_strings.getJsonPropertyValue(tappedItem.getJsonObject(), "subTitle", "");
loadScreenWithItemId = BT_strings.getJsonPropertyValue(tappedItem.getJsonObject(), "loadScreenWithItemId", "");
loadScreenWithNickname = BT_strings.getJsonPropertyValue(tappedItem.getJsonObject(), "loadScreenWithNickname", "");
calloutTapChoice = BT_strings.getJsonPropertyValue(tappedItem.getJsonObject(), "calloutTapChoice", "");
String pinColor = BT_strings.getJsonPropertyValue(tappedItem.getJsonObject(), "pinColor", "red");
String locationImage = BT_strings.getJsonPropertyValue(tappedItem.getJsonObject(), "locationImage", "");
new LoadImageFromWeb().execute("http://pheds.com.au/example1.png");
BT_debugger.showIt(fragmentName + ":handleMarkerClick. Tapped: \"" + title + "\"");
}//not the device's location...
//are we showing the details button on this locations pup-up bubble?
boolean showDetailsButton = false;
if(loadScreenWithItemId.length() > 1 || loadScreenWithNickname.length() > 1){
showDetailsButton = true;
}
//if we are showing directions we are not showing details bubble...
if(loadScreenWithItemId.equalsIgnoreCase("showDirections")){
showDetailsButton = false;
}
//if we did not find load screen from id or nickname, look for a load sceen object...
if(!showDetailsButton){
try{
if(tappedItem != null){
JSONObject obj = tappedItem.getJsonObject();
if(obj.has("loadScreenObject")){
showDetailsButton = true;
}
}
}catch(Exception e){
showDetailsButton = false;
}
}
pinGraphic = pGraphic;
final AlertDialog myAlert = new AlertDialog.Builder(this.getActivity()).create();
myAlert.setTitle(title);
myAlert.setMessage(subTitle);
myAlert.setIcon(pinGraphic);
myAlert.setCancelable(false);
myAlert.setButton2(getString(R.string.ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
myAlert.dismiss();
} });
//do we show details button?
if(showDetailsButton){
myAlert.setButton(getString(R.string.details), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
myAlert.dismiss();
showDetailsScreen(markerIndex);
} });
}
//do we show the driving directions button?
if(loadScreenWithItemId.equalsIgnoreCase("showDirections") || calloutTapChoice.equalsIgnoreCase("showDirections")){
myAlert.setButton(getString(R.string.mapDrivingDirections), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
myAlert.dismiss();
showDirections(markerIndex);
} });
}
//show...
myAlert.show();
}
画像がダウンロードされているようです。しかし、私はダウンロードしたイメージをどのように扱い、私のAlertDialogで使用するのかは不明です。 LoadImageFromWebがAsyncTaskクラスであるため、結果をDrawableとして使用する方法がわかりません。事前に
おかげ
Kristanホールズ
無原罪のアプリを
は、アイブ氏は、グライドのreadmeの指示に従いました。 ive added –
compile 'com.github.bumptech.glide:glide:3.7.0' 'com.android.support:support-v4:24.2.1'と同期プロジェクトをコンパイルします。私のプロジェクトにコードを追加し、シンボル「Glide」を解決できません。 。私はインポートグライドを追加することについて何も見ません。 。その欠けていると思っています –
私は必要な輸入品で私の答えを編集しました。 – Tofira