PlacePicker.IntentBuilder打开后立即关闭

艾伦·佩里

我在我的应用程序中实现了PlacePicker.IntentBuilder UI。最长的时间它没有问题,但是现在只要出现UI,它就会关闭并且不确定原因。疯狂的事情是查看不会崩溃或不会引起任何异常的logcat,所以我不知道问题是什么。这是创建和调用它的类。

    package com.example.apthagreat.faf;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
    import com.google.android.gms.common.GooglePlayServicesRepairableException;
    import com.google.android.gms.location.places.Place;
    import com.google.android.gms.location.places.ui.PlacePicker;
    import com.google.android.gms.maps.model.LatLng;
    import com.google.android.gms.maps.model.LatLngBounds;

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.StatusLine;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;


    public class DetermineSearchCoordinatesScreen extends ActionBarActivity
    {
        //Instance Variables
    int PLACE_PICKER_REQUEST = 1;
    int SELECTED_PLACE_REQUEST = 2;
    LatLng southWestBounds;
    LatLng northEastBounds;
    String zipCodeString;
    String zipCodeURL;
    String user;


    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_determine_search_coordinates_screen);
        final EditText zipCode = (EditText) findViewById(R.id.enterZip);
        final Button findZip = (Button) findViewById(R.id.findZipButton);
        user = getIntent().getExtras().getString("username");
        //Find button is used when user enters a zip code and not the device's GPS
        findZip.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if (findZip.getText().equals("FIND!"))
                {
                    //build the URL to be passed to determine coordinates for given zip code
                    zipCodeURL = "http://maps.googleapis.com/maps/api/geocode/json?address=";
                    zipCodeString = zipCode.getText().toString();
                    if (zipCodeString.length() == 5)
                    {
                        //Fetch to go get GPS coordinates for zip code
                        zipCodeURL += zipCodeString;
                        GetZipCoordinates task = new GetZipCoordinates(southWestBounds, northEastBounds);
                        task.execute(zipCodeURL);
                        findZip.setText("PUSH TO SEE PLACES");
                    }
                    else
                    {
                        Toast.makeText(getApplicationContext(), "Must enter a valid 5 digit zip code", Toast.LENGTH_SHORT).show();
                    }

                }
                else if (findZip.getText().equals("PUSH TO SEE PLACES"))
                {
                    //AsyncTask was successful in finding coordinates and now we can pass the coordinates in and display places to user
                    PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
                    LatLngBounds llb = new LatLngBounds(southWestBounds, northEastBounds);
                    builder.setLatLngBounds(llb);
                    findZip.setText("FIND!");
                    try
                    {
                        startActivityForResult(builder.build(DetermineSearchCoordinatesScreen.this), PLACE_PICKER_REQUEST);
                    }
                    catch (GooglePlayServicesRepairableException e)
                    {
                        e.printStackTrace();
                    }
                    catch (GooglePlayServicesNotAvailableException e)
                    {
                        e.printStackTrace();
                    }
                    catch(NullPointerException npe)
                    {
                        Toast.makeText(getBaseContext(),"Retrieval of coordinates is not yet complete! Try Again.", Toast.LENGTH_LONG).show();
                    }
                }
            }

        });
        //Here we will use the device's GPS coordinates and display nearby places
        Button currentSpot = (Button) findViewById(R.id.currentLocationButton);
        currentSpot.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
                try
                {
                    startActivityForResult(builder.build(DetermineSearchCoordinatesScreen.this), PLACE_PICKER_REQUEST);
                }
                catch (GooglePlayServicesRepairableException e)
                {
                    e.printStackTrace();
                }
                catch (GooglePlayServicesNotAvailableException e)
                {
                    e.printStackTrace();
                }
            }
        });

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_search_category_location_screen, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings)
        {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void setNorthEastBounds(LatLng northEastBounds)
    {
        this.northEastBounds = northEastBounds;
    }

    public void setSouthWestBounds(LatLng southWestBounds)
    {
        this.southWestBounds = southWestBounds;
    }

    /*
        Once the user selects a place, a dialog will appear prompting the user if they would like
        to create an activity at this place
     */
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == PLACE_PICKER_REQUEST)
        {
            if (resultCode == RESULT_OK)
            {
                //The place the user selected
                final Place place = PlacePicker.getPlace(data, this);
                //The dialog that will prompt the user to create an activity when a place is selected
                AlertDialog.Builder createActivity = new AlertDialog.Builder(this);
                createActivity.setMessage("Would you like to create an activity at this location?");
                createActivity.setPositiveButton("YES", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        //Here the user will be directed to the create activity screen and the name and address of selected place will be passed along with it
                        Intent create = new Intent(getApplicationContext(), CreateActivityScreen.class);
                        create.putExtra("username", user);
                        create.putExtra("placeName", place.getName());
                        create.putExtra("placeAddress", place.getAddress());
                        startActivityForResult(create, SELECTED_PLACE_REQUEST);

                        finish();
                    }
                });
                createActivity.setNegativeButton("NO", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        //If the user doesn't want to create an activity nothing will happen
                    }
                });
                createActivity.show();
            }
        }
    }

    /*
        The class that is taking the URL and fetching to the internet to find
        the GPS coordinates for the user given zip code.
        Parses the data into a JSON object and converts it into Latitude and Longitude
        coordinates.
        The coordinates are given in the form of the Southwest bound coordinates and
        Northeast bound coordinates around the zip code.
     */
    private class GetZipCoordinates extends AsyncTask<String, Void, String>
    {
        LatLng sw;
        LatLng ne;

        public GetZipCoordinates(LatLng sw, LatLng ne)
        {
            this.sw = sw;
            this.ne = ne;
        }

        @Override
        protected String doInBackground(String... placesURL)
        {
            //fetch places
            StringBuilder placesBuilder = new StringBuilder();
            //process search parameter string(s)
            for (String placeSearchURL : placesURL)
            {
                //execute search
                HttpClient placesClient = new DefaultHttpClient();
                try
                {
                    //try to fetch the data
                    HttpGet placesGet = new HttpGet(placeSearchURL);
                    HttpResponse placesResponse = placesClient.execute(placesGet);
                    StatusLine placeSearchStatus = placesResponse.getStatusLine();
                    //System.err.println(placeSearchStatus);
                    if (placeSearchStatus.getStatusCode() == 200)
                    {
                        //we have an OK response
                        HttpEntity placesEntity = placesResponse.getEntity();
                        InputStream placesContent = placesEntity.getContent();
                        InputStreamReader placesInput = new InputStreamReader(placesContent);
                        BufferedReader placesReader = new BufferedReader(placesInput);
                        String lineIn;
                        while ((lineIn = placesReader.readLine()) != null)
                        {
                            placesBuilder.append(lineIn);
                        }
                    }
                }
                catch (Exception e)
                {
                    System.err.println("The website is never executed");
                }
            }
            return placesBuilder.toString();
        }

        //Take the results from the URL, separate it, and get the Southwest and Northeast bound coordinates
        protected void onPostExecute(String result)
        {
            LatLng SWBounds = null;
            LatLng NEBounds = null;
            try
            {
                JSONObject resultObject = new JSONObject(result);
                JSONArray placesArray = resultObject.getJSONArray("results");
                try
                {
                    JSONObject placeObject = placesArray.getJSONObject(0);
                    JSONObject southWestLoc = placeObject.getJSONObject("geometry").getJSONObject("bounds").getJSONObject("southwest");
                    JSONObject northEastLoc = placeObject.getJSONObject("geometry").getJSONObject("bounds").getJSONObject("northeast");
                    SWBounds = new LatLng(Double.valueOf(southWestLoc.getString("lat")), Double.valueOf(southWestLoc.getString("lng")));
                    NEBounds = new LatLng(Double.valueOf(northEastLoc.getString("lat")), Double.valueOf(northEastLoc.getString("lng")));
                    setSouthWestBounds(SWBounds);
                    setNorthEastBounds(NEBounds);
                }
                catch (JSONException jse)
                {
                    System.err.println("The bounds were not computed");
                }
            }
            catch (Exception e)
            {
                System.err.println("The JSON object was never read");
            }
        }
    }

    @Override
    public void onPause()
    {
        super.onPause();
        //Blank the URL after the Map is displayed
        zipCodeURL = null;
    }

    @Override
    public void onResume()
    {
        super.onResume();
        //For safe measures, set to blank when activity reappears
        zipCodeURL = "";
    }

}

当我上这堂课并按下按钮调用PlacePlace.IntentBuilder时,这是日志记录

04-16 21:19:24.513    7650-7650/com.example.apthagreat.faf D/Activity﹕ performCreate Call debug elastic valuetrue
04-16 21:19:24.683    7650-7671/com.example.apthagreat.faf D/OpenGLRenderer﹕ endAllStagingAnimators on 0x9d2dd000 (RippleDrawable) with handle 0xb4ad4d60
04-16 21:19:24.703    7650-7650/com.example.apthagreat.faf I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@24ce418b time:4496690
04-16 21:19:24.973    7650-7650/com.example.apthagreat.faf V/ActivityThread﹕ updateVisibility : ActivityRecord{26aa4d14 token=android.os.BinderProxy@1b7217fa {com.example.apthagreat.faf/com.example.apthagreat.faf.ActivityListScreen}} show : false
04-16 21:19:26.633    7650-7650/com.example.apthagreat.faf D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-16 21:19:26.813    7650-7671/com.example.apthagreat.faf D/OpenGLRenderer﹕ endAllStagingAnimators on 0x9d2e9600 (RippleDrawable) with handle 0x9f64add0
04-16 21:19:27.543    7650-7650/com.example.apthagreat.faf W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
04-16 21:19:28.143    7650-7650/com.example.apthagreat.faf I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@24ce418b time:4500135

有人可以帮我吗

CG帕特森

我有同样的问题。请确保您启用“为Android API的地方”,而不仅仅是“Places API的”开发者控制台“ Android的Places API”将不会显示在“ API和Auth / API”下,因为它尚未流行。您将必须使用API​​搜索框进行搜索。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

启动后会立即关闭Google PlacePicker

来自分类Dev

PlacePicker 在启动时立即关闭

来自分类Dev

不打开小部件屏幕的 PlacePicker

来自分类Dev

PlacePicker未选择素材主题

来自分类Dev

调用 PlacePicker 时出现 NullPointerException

来自分类Dev

打开后对话框立即关闭

来自分类Dev

不推荐使用PlacePicker.getPlace()

来自分类Dev

Android虚拟设备在打开后立即关闭

来自分类Dev

用参数启动exe,但是打开后程序立即关闭?

来自分类Dev

Eclipse打开,然后在出现图形后立即关闭

来自分类Dev

'Workbook.open'错误-打开文件后立即关闭文件

来自分类Dev

Dmenu启动的某些程序在打开后立即关闭

来自分类Dev

Android 应用程序打开后立即关闭

来自分类Dev

无法理解以下内容:malloc后立即释放;打开后立即关闭文件

来自分类Dev

QWizard立即打开和关闭

来自分类Dev

无法将Google Places PlacePicker导入Android项目

来自分类Dev

Xamarin.Android 找不到类型或命名空间名称“PlacePicker”

来自分类Dev

如何修复在单击按钮打开后立即关闭的模式弹出窗口

来自分类Dev

插入计算机后便会打开,然后立即关闭

来自分类Dev

18.04 打开笔记本电脑盖从睡眠中唤醒后立即关闭

来自分类Dev

AdMob AD 视图控制器在打开后立即关闭

来自分类Dev

cronjob打开,然后立即关闭ssh隧道

来自分类Dev

Xamarin iOS 打开并立即关闭

来自分类Dev

关闭连接后立即移除连接对象

来自分类Dev

Android Place Picker启动后立即关闭

来自分类Dev

Xamarin Android应用启动后立即关闭

来自分类Dev

输入值后程序立即关闭

来自分类Dev

Docker容器在启动后立即关闭

来自分类Dev

Cronjob在启动后立即关闭mac

Related 相关文章

热门标签

归档