我正在尝试从URL获取标记。我想要的是从this web service得到所有标记。
我的代码无效。它从Web服务获取map_icon但未在地图上显示。我能做些什么才能让它发挥作用?
记录消息:
E/pj: http://towncitycards.com/wp-content/uploads/2015/01/googlemapicons/5percent.png
W/art: Suspending all threads took: 78.773ms
E/addMarkers: 0
W/System.err: android.os.NetworkOnMainThreadException
W/System.err: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
W/System.err: at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86)
W/System.err: at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)
W/System.err: at java.net.InetAddress.getAllByName(InetAddress.java:752)
W/System.err: at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
W/System.err: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187)
W/System.err: at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156)
W/System.err: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:345)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:243)
W/System.err: at app.towncitycards.activities.Frnt_mapActivity.addMarkers(Frnt_mapActivity.java:299)
W/System.err: at app.towncitycards.activities.Frnt_mapActivity.access$300(Frnt_mapActivity.java:73)
W/System.err: at app.towncitycards.activities.Frnt_mapActivity$Frnt_mIcons_Activity.onPostExecute(Frnt_mapActivity.java:428)
W/System.err: at app.towncitycards.activities.Frnt_mapActivity$Frnt_mIcons_Activity.onPostExecute(Frnt_mapActivity.java:332)
W/System.err: at android.os.AsyncTask.finish(AsyncTask.java:667)
W/System.err: at android.os.AsyncTask.-wrap1(AsyncTask.java)
W/System.err: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:154)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6119)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
E/pj: http://towncitycards.com/wp-content/uploads/2015/01/googlemapicons/save£2.png
E/addMarkers: 1
W/System.err: android.os.NetworkOnMainThreadException
W/System.err: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
W/System.err: at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86)
W/System.err: at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)
W/System.err: at java.net.InetAddress.getAllByName(InetAddress.java:752)
W/System.err: at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
W/System.err: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187)
W/System.err: at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156)
W/System.err: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:345)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:243)
W/System.err: at app.towncitycards.activities.Frnt_mapActivity.addMarkers(Frnt_mapActivity.java:299)
W/System.err: at app.towncitycards.activities.Frnt_mapActivity.access$300(Frnt_mapActivity.java:73)
W/System.err: at app.towncitycards.activities.Frnt_mapActivity$Frnt_mIcons_Activity.onPostExecute(Frnt_mapActivity.java:428)
W/System.err: at app.towncitycards.activities.Frnt_mapActivity$Frnt_mIcons_Activity.onPostExecute(Frnt_mapActivity.java:332)
W/System.err: at android.os.AsyncTask.finish(AsyncTask.java:667)
W/System.err: at android.os.AsyncTask.-wrap1(AsyncTask.java)
W/System.err: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:684)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:154)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6119)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
我的代码
public class Frnt_mapActivity extends Activity {
public String Shop_title;
public String Shop_address;
public String Shop_icons;
ProgressDialog mDialog;
JSONObject jsonobject3;
JSONArray jsonarray3;
// Google Map
private static GoogleMap googlemap;
ArrayList<SearchBeams>getAllimgs;
// Location
ArrayList<String> world_locationlist;
ArrayList<LocationBeams> worldlocation;
// Looking for
ArrayList<String> looking_forlist;
ArrayList<LookingForBeams> world_looking_for;
public static ArrayList<SearchBeams> searchdata_list;
public static ArrayList<NormalSearchBeams> normlSearchList;
public static String mid;
public static String mpost_title;
public static String mimage;
public static List<String> imglist;
ArrayList<All_products_lat_long> venueList;
RelativeLayout r1;
public static ArrayList<SearchBeams> GetIMG;
public static TextView txtlocation;
public static TextView txtlookingfor;
public static ArrayList<All_products_lat_long> mpItm;
String vals;
private int i;
private Intent intent;
HashMap<Marker, Integer> hashMap=new HashMap<Marker, Integer>();
public static LatLng latlong ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.frnt_map_activity);
googlemap=((MapFragment)getFragmentManager().findFragmentById(R.id.places_map)).getMap();
googlemap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googlemap.setMyLocationEnabled(true);
googlemap.getUiSettings().setZoomControlsEnabled(true);
googlemap.getUiSettings().setMyLocationButtonEnabled(true);
googlemap.getUiSettings().setCompassEnabled(true);
googlemap.getUiSettings().setRotateGesturesEnabled(true);
googlemap.getUiSettings().setZoomGesturesEnabled(true);
googlemap.setMyLocationEnabled(true);
intent=new Intent(Frnt_mapActivity.this,MainActivity.class);
googlemap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker arg0) {
i=hashMap.get(arg0);
intent.putExtra("PRODUCT_ID", venueList.get(i).getId());
startActivity(intent);
//overridePendingTransition( R.anim.slide_right, R.anim.slide_left );
}
});
new Frnt_mIcons_Activity().execute();
}
private void addMarkers() {
for(int k=0; k<venueList.size(); k += 1){
//nirmal
try{
Log.e("pj",venueList.get(k).getMap_icon());
//new AddMarkerAsyncTask(venueList.get(k),k).execute();
double ln = Double.parseDouble(venueList.get(k).getLongitude());
double la = Double.parseDouble(venueList.get(k).getLatitude());
String title=venueList.get(k).getPost_title()==null?"":venueList.get(k).getPost_title();
URL url = new URL(venueList.get(k).getMap_icon());
Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
BitmapDescriptor bd=BitmapDescriptorFactory.fromBitmap(image);
Marker marker=googlemap.addMarker(new MarkerOptions()
.position(new LatLng(la, ln))
.title(title)
.icon(bd));
hashMap.put(marker, k);
}catch (Exception e){
Log.e("addMarkers",k+"");
e.printStackTrace();
}
}
}
/******************FOR MAP******************/
class Frnt_mIcons_Activity extends AsyncTask<String, String, String> {
public ArrayList<All_products_lat_long> maplist;
@Override
protected void onPreExecute() {
mDialog = new ProgressDialog(Frnt_mapActivity.this);
mDialog.setMessage("Loading...");
mDialog.setCancelable(false);
mDialog.show();
super.onPreExecute();
}
// Slow Implementation
private String inputStreamToString(InputStream is) {
String s = "";
String line = "";
// Wrap a BufferedReader around the InputStream
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
// Read response until the end
try {
while ((line = rd.readLine()) != null) {
s += line;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Return full string
return s;
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
maplist = new ArrayList<All_products_lat_long>();
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient client = new DefaultHttpClient();
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("http", socketFactory, 443));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());
// Set verifier
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
HttpPost httpPost = new HttpPost("http://towncitycards.com/webservice_action.php?action=all_products");
try{
HttpResponse response = httpClient.execute(httpPost);
String data = inputStreamToString(response.getEntity().getContent());
jsonobject3 = new JSONObject(data);
jsonarray3 = new JSONArray(jsonobject3.getString("all_products"));
venueList =new ArrayList<All_products_lat_long>();
for(int j=0; j<jsonarray3.length();j++){
JSONObject itemobj = jsonarray3.getJSONObject(j);
//SHOW SEARCH RESULT
All_products_lat_long searchItems = new All_products_lat_long();
searchItems.setId(itemobj.getString("ID"));
searchItems.setPost_title(itemobj.getString("post_title"));
searchItems.setMap_icon(itemobj.getString("map_icon"));
searchItems.setLongitude(itemobj.getString("longitude"));
searchItems.setLatitude(itemobj.getString("latitude"));
// System.out.println("######Ashish is object >>"+itemobj);
venueList.add(searchItems);
// System.out.println("SEARCHLISTSS@@@@@@@"+venueList.get(j).getLongitude());
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(String result) {
super.onPostExecute(result);
//System.out.println("SEARCHLISTSS@@@@@@@"+venueList);
//System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAA"+venueList);
try{
if(venueList.size()>0)
{
addMarkers();
//Toast.makeText(Frnt_mapActivity.this,"Search for the venue11.",Toast.LENGTH_SHORT).show();
}
else
Toast.makeText(Frnt_mapActivity.this,"Search for the venue.",Toast.LENGTH_SHORT).show();
//LatLng coordinate = new LatLng(22.75852160, 75.8911550);
LatLng coordinate = new LatLng(50.85514, 0.58382);
CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 18);
googlemap.animateCamera(yourLocation);
for (int i = 0; i < jsonarray3.length(); i++) {
jsonobject3 = jsonarray3.getJSONObject(i);
Shop_title = jsonobject3.optString("post_title");
Shop_address = jsonobject3.optString("map_icon");
Shop_icons = jsonobject3.optString("map_icon");
//}
}
}catch(Exception e){
e.printStackTrace();
}
if(mDialog!=null && mDialog.isShowing()){
mDialog.dismiss();
}
}
}
}
答案 0 :(得分:0)
NetworkOnMainThreadException
当应用程序尝试在其主线程上执行网络操作时引发的异常。
在onPostExecute()
中将您的Json解析代码移至doInBackground
现在在addMarkers()
方法中使用picasso
加载标记图像并使用位图。
private Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
//here you get the image bitmap
//do your work
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
}
使用:
来调用它 Picasso.with(this).load("your_url").into(target);
在gradle中添加:compile 'com.squareup.picasso:picasso:2.5.2'