Monday, October 14, 2013

Fragment Error in Google Maps V2[android help]


Fragment Error in Google Maps V2



I am trying to create a tourism app that involves a tab layout and a map. I got my tab layout using fragments and viewpager from androidhive and google map from wptrafficanalyzer. However I am experiencing a lot of errors, and I don't know how to deal with them since this is my first time dealing with fragments. I created my own version of the google maps from android hive, however, I can't integrate it in one of the tabs in my tab layout. Can anyone please help? I'll post the code If you need it. Thanks!


Here is my MainActivity.java (Google Map).



public class MainActivity extends FragmentActivity {

final Context context = this;
Button routes;
double latitude = 14.635576;
double longitude = 121.033115;
LatLng latlng = new LatLng(14.6353475, 121.0327501);
LatLngBounds QC = new LatLngBounds(
new LatLng(14.656669, 120.998598), new LatLng(14.666965, 121.098934));
MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Shell").snippet("Sa tabi ng Estuar Building");
Marker mark;
GoogleMap map;
ArrayList markerPoints;
TextView tvDistanceDuration;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

routes = (Button) findViewById (R.id.buttonRoutes);
routes.setBackgroundResource(R.drawable.drivinghires);

tvDistanceDuration = (TextView) findViewById(R.id.tv_distance_time);


routes.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

// custom dialog
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.options);
dialog.setTitle("Title...");

// set the custom dialog components - text, image and button
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.jeep);
ImageView image1 = (ImageView) dialog.findViewById(R.id.image1);
image1.setImageResource(R.drawable.drivinghires);


Button dialogButton = (Button) dialog.findViewById(R.id.buttonOk);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});

dialog.show();
}
});


// Initializing
markerPoints = new ArrayList();

// Getting reference to SupportMapFragment of the activity_main
SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

// Getting Map for the SupportMapFragment
map = fm.getMap();



// Set Compass Enabled

map.getUiSettings().setCompassEnabled(true);
map.getUiSettings().setRotateGesturesEnabled(true);

// create marker


// Changing marker icon
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.gasten));
map.moveCamera(CameraUpdateFactory.newLatLngZoom(QC.getCenter(), 12));

// Enable MyLocation Button in the Map
map.setMyLocationEnabled(true);

mark = map.addMarker(marker);

//button






map.setOnCameraChangeListener(new OnCameraChangeListener() {

@Override
public void onCameraChange(CameraPosition arg0) {

// adding marker

if(arg0.zoom <16){
mark.setVisible(false);}
else
mark.setVisible(true);

if(arg0.zoom > 17){
mark.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.gasten));
}




}
});

// Setting onclick event listener for the map
map.setOnMapClickListener(new OnMapClickListener() {

@Override
public void onMapClick(LatLng point) {

// Already two locations
if(markerPoints.size()>1){
markerPoints.clear();
map.clear();

MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Shell").snippet("Sa tabi ng Estuar Building");

// Changing marker icon
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.gasstation));

// adding marker
map.addMarker(marker);
}

// Adding new item to the ArrayList
markerPoints.add(point);

// Creating MarkerOptions
MarkerOptions options = new MarkerOptions();

// Setting the position of the marker
options.position(point);

/**
* For the start location, the color of marker is GREEN and
* for the end location, the color of marker is RED.
*/
if(markerPoints.size()==1){
options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
}else if(markerPoints.size()==2){
options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
}

// Add new marker to the Google Map Android API V2
map.addMarker(options);

// Checks, whether start and end locations are captured
if(markerPoints.size() >= 2){
LatLng origin = markerPoints.get(0);
LatLng dest = markerPoints.get(1);

// Getting URL to the Google Directions API
String url = getDirectionsUrl(origin, dest);

DownloadTask downloadTask = new DownloadTask();

// Start downloading json data from Google Directions API
downloadTask.execute(url);
}
}
});
}

private String getDirectionsUrl(LatLng origin,LatLng dest){

// Origin of route
String str_origin = "origin="+origin.latitude+","+origin.longitude;

// Destination of route
String str_dest = "destination="+dest.latitude+","+dest.longitude;

// Sensor enabled
String sensor = "sensor=false";

// Building the parameters to the web service
String parameters = str_origin+"&"+str_dest+"&"+sensor;

// Output format
String output = "json";

// Building the url to the web service
String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;

return url;
}

/** A method to download json data from url */
private String downloadUrl(String strUrl) throws IOException{
String data = "";
InputStream iStream = null;
HttpURLConnection urlConnection = null;
try{
URL url = new URL(strUrl);

// Creating an http connection to communicate with url
urlConnection = (HttpURLConnection) url.openConnection();

// Connecting to url
urlConnection.connect();

// Reading data from url
iStream = urlConnection.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

StringBuffer sb = new StringBuffer();

String line = "";
while( ( line = br.readLine()) != null){
sb.append(line);
}

data = sb.toString();

br.close();

}catch(Exception e){
Log.d("Exception while downloading url", e.toString());
}finally{
iStream.close();
urlConnection.disconnect();
}
return data;
}

// Fetches data from url passed
private class DownloadTask extends AsyncTask{

// Downloading data in non-ui thread
@Override
protected String doInBackground(String... url) {

// For storing data from web service
String data = "";

try{
// Fetching the data from web service
data = downloadUrl(url[0]);
}catch(Exception e){
Log.d("Background Task",e.toString());
}
return data;
}

// Executes in UI thread, after the execution of
// doInBackground()
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);

ParserTask parserTask = new ParserTask();

// Invokes the thread for parsing the JSON data
parserTask.execute(result);
}
}

/** A class to parse the Google Places in JSON format */
private class ParserTask extends AsyncTask>> >{

// Parsing the data in non-ui thread
@Override
protected List>> doInBackground(String... jsonData) {

JSONObject jObject;
List>> routes = null;

try{
jObject = new JSONObject(jsonData[0]);
DirectionsJSONParser parser = new DirectionsJSONParser();

// Starts parsing data
routes = parser.parse(jObject);
}catch(Exception e){
e.printStackTrace();
}
return routes;
}

// Executes in UI thread, after the parsing process
@Override
protected void onPostExecute(List>> result) {
ArrayList points = null;
PolylineOptions lineOptions = null;
MarkerOptions markerOptions = new MarkerOptions();
String distance = "";
String duration = "";

if(result.size()<1){
Toast.makeText(getBaseContext(), "No Points", Toast.LENGTH_SHORT).show();
return;
}

// Traversing through all the routes
for(int i=0;i points = new ArrayList();
lineOptions = new PolylineOptions();

// Fetching i-th route
List> path = result.get(i);

// Fetching all the points in i-th route
for(int j=0;j HashMap point = path.get(j);

if(j==0){ // Get distance from the list
distance = (String)point.get("distance");
continue;
}else if(j==1){ // Get duration from the list
duration = (String)point.get("duration");
continue;
}

double lat = Double.parseDouble(point.get("lat"));
double lng = Double.parseDouble(point.get("lng"));
LatLng position = new LatLng(lat, lng);

points.add(position);
}

// Adding all the points in the route to LineOptions
lineOptions.addAll(points);
lineOptions.width(2);
lineOptions.color(Color.RED);
}

tvDistanceDuration.setText("Distance:"+distance + ", Duration:"+duration);

// Drawing polyline in the Google Map for the i-th route
map.addPolyline(lineOptions);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}


I try to put it in my TabTwo.java



public class TabTwo extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.activity_tab_two, container, false);

return rootView;
}

}


When I try to copy my MainActivity.java on my TabTwo, lot of errors appear (create method for setcontentview, create method findViewById etc..)



Read more

stackoverflow.comm



No comments:

Post a Comment

Google Voice on T-Mobile? [General]

Google Voice on T-Mobile? So I recently switched from a GNex on Verizon to a Moto X DE on T-Mobile. I had always used Google Voice for my v...