Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:在Android places Api中提供自动建议?_Android_Google Maps_Search_Autocomplete - Fatal编程技术网

Android:在Android places Api中提供自动建议?

Android:在Android places Api中提供自动建议?,android,google-maps,search,autocomplete,Android,Google Maps,Search,Autocomplete,我对android Google maps非常陌生。我编写了以下程序,用于在android中显示自动建议。当我在自动完成文本框中键入文本时,它将输入url,但输出未显示在程序中。请查看一次,并让我知道我在哪里犯了错误 ExampleApp.java package com.example.exampleapp; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConn

我对android Google maps非常陌生。我编写了以下程序,用于在android中显示自动建议。当我在自动完成文本框中键入文本时,它将输入url,但输出未显示在程序中。请查看一次,并让我知道我在哪里犯了错误

   ExampleApp.java
package com.example.exampleapp;

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater.Filter;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

import android.widget.Filterable;
import android.widget.Toast;

public class ExampleApp extends Activity implements OnItemClickListener{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        AutoCompleteTextView autoCompView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
        autoCompView.setAdapter(new PlacesAutoCompleteAdapter(this, R.layout.list_item));
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub
        String str = (String) arg0.getItemAtPosition(arg2);
        Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
    }


}
class PlacesAutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
    private ArrayList<String> resultList;

    public PlacesAutoCompleteAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }
    private static final String PLACES_API_BASE = "https://maps.googleapis.com/maps/api/place";
    private static final String TYPE_AUTOCOMPLETE = "/autocomplete";
    private static final String OUT_JSON = "/json";

    private static final String API_KEY = "";
    @Override
    public int getCount() {
        return resultList.size();
    }

    @Override
    public String getItem(int index) {
        return resultList.get(index);
    }

    @Override
    public android.widget.Filter getFilter() {
        Filter filter = new Filter() {
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                if (constraint != null) {
                    // Retrieve the autocomplete results.
                    resultList = autocomplete(constraint.toString());

                    // Assign the data to the FilterResults
                 //   filterResults.values = resultList;
                  //  filterResults.count = resultList.size();
                }
                return filterResults;
            }

            private ArrayList<String> autocomplete(String input) {
                ArrayList<String> resultList = null;

                HttpURLConnection conn = null;
                StringBuilder jsonResults = new StringBuilder();
                try {
                    StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
                    sb.append("?sensor=false&key=" + API_KEY);
                    sb.append("&components=country:uk");
                    sb.append("&input=" + URLEncoder.encode(input, "utf8"));

                    URL url = new URL(sb.toString());
                    conn = (HttpURLConnection) url.openConnection();
                    InputStreamReader in = new InputStreamReader(conn.getInputStream());

                    // Load the results into a StringBuilder
                    int read;
                    char[] buff = new char[1024];
                    while ((read = in.read(buff)) != -1) {
                        jsonResults.append(buff, 0, read);
                    }
                } catch (MalformedURLException e) {
                   // Log.e(LOG_TAG, "Error processing Places API URL", e);
                    return resultList;
                } catch (IOException e) {
                    //Log.e(LOG_TAG, "Error connecting to Places API", e);
                    return resultList;
                } finally {
                    if (conn != null) {
                        conn.disconnect();
                    }
                }

                try {
                    // Create a JSON object hierarchy from the results
                    JSONObject jsonObj = new JSONObject(jsonResults.toString());
                    JSONArray predsJsonArray = jsonObj.getJSONArray("predictions");

                    // Extract the Place descriptions from the results
                    resultList = new ArrayList<String>(predsJsonArray.length());
                    for (int i = 0; i < predsJsonArray.length(); i++) {
                        resultList.add(predsJsonArray.getJSONObject(i).getString("description"));
                    }
                } catch (JSONException e) {
                   // Log.e(LOG_TAG, "Cannot process JSON results", e);
                }

                return resultList;
            }
            protected void publishResults(CharSequence constraint, FilterResults results) {
                if (results != null) {
                    notifyDataSetChanged();
                }
                else {
                    notifyDataSetInvalidated();
                }
            }

            @Override
            public boolean onLoadClass(Class arg0) {
                // TODO Auto-generated method stub
                return false;
            }};
        return (android.widget.Filter) filter;
    }
}

FilterResults.java

package com.example.exampleapp;

import java.util.ArrayList;

public class FilterResults {

    protected ArrayList<String> values;
    protected int count;

}


i write the above code but the application closed .please see once and let me know where i am doing mistake in the above code ?
Thanks in Advance..........
ExampleApp.java
包com.example.exampleapp;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.net.urlcoder;
导入java.util.ArrayList;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.view.LayoutInflater.Filter;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.AutoCompleteTextView;
导入android.widget.Filterable;
导入android.widget.Toast;
公共类ExampleApp扩展活动实现McClickListener{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AutoCompleteTextView autoCompView=(AutoCompleteTextView)findViewById(R.id.autocomplete);
autoCompView.setAdapter(新的PlacesAutoCompleteAdapter(这个,R.layout.list_项));
}
@凌驾
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3){
//TODO自动生成的方法存根
字符串str=(字符串)arg0.getItemAtPosition(arg2);
Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
}
}
类PlacesAutoCompleteAdapter扩展ArrayAdapter实现可筛选{
私有ArrayList结果列表;
public PlacesAutoCompleteAdapter(上下文上下文,int textViewResourceId){
super(上下文,textViewResourceId);
}
私有静态最终字符串PLACES\u API\u BASE=”https://maps.googleapis.com/maps/api/place";
私有静态最终字符串类型\u AUTOCOMPLETE=“/AUTOCOMPLETE”;
私有静态最终字符串输出_JSON=“/JSON”;
私有静态最终字符串API_KEY=“”;
@凌驾
public int getCount(){
返回resultList.size();
}
@凌驾
公共字符串getItem(int索引){
返回resultList.get(索引);
}
@凌驾
public android.widget.Filter getFilter(){
过滤器过滤器=新过滤器(){
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
if(约束!=null){
//检索自动完成结果。
结果列表=自动完成(constraint.toString());
//将数据分配给FilterResults
//filterResults.values=结果列表;
//filterResults.count=resultList.size();
}
返回过滤器结果;
}
专用ArrayList自动完成(字符串输入){
ArrayList resultList=null;
HttpURLConnection conn=null;
StringBuilder jsonResults=新建StringBuilder();
试一试{
StringBuilder sb=新的StringBuilder(PLACES\u API\u BASE+TYPE\u AUTOCOMPLETE+OUT\u JSON);
sb.追加(“?传感器=假&键=“+API_键”);
sb.追加(“&components=国家:英国”);
sb.append(“&input=“+urlcoder.encode”(输入,“utf8”));
URL=新URL(sb.toString());
conn=(HttpURLConnection)url.openConnection();
InputStreamReader in=新的InputStreamReader(conn.getInputStream());
//将结果加载到StringBuilder中
int-read;
char[]buff=新字符[1024];
while((read=in.read(buff))!=-1){
附加(buff,0,read);
}
}捕获(格式错误){
//e(Log_标记,“错误处理位置API URL”,e);
返回结果列表;
}捕获(IOE异常){
//Log.e(Log_标签,“连接到位置API时出错”,e);
返回结果列表;
}最后{
如果(conn!=null){
连接断开();
}
}
试一试{
//根据结果创建JSON对象层次结构
JSONObject jsonObj=新的JSONObject(jsonResults.toString());
JSONArray predsjssonarray=jsonObj.getJSONArray(“预测”);
//从结果中提取位置描述
resultList=新的ArrayList(predsjSonaray.length());
对于(int i=0;ipackage com.inukshk.adapter;

import java.util.ArrayList;

import android.content.Context;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.Filterable;

import com.inukshk.CreateInukshk.CreateInukshk;

public class PlacesAutoCompleteAdapter extends ArrayAdapter<String> implements
        Filterable {
    private ArrayList<String> resultList;

    public PlacesAutoCompleteAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

    @Override
    public int getCount() {
        return resultList.size();
    }

    @Override
    public String getItem(int index) {
        return resultList.get(index);
    }

    @Override
    public Filter getFilter() {
        Filter filter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                if (constraint != null) {
                    // Retrieve the autocomplete results.

                    resultList = CreateInukshk.autocomplete(constraint
                            .toString());

                    // Assign the data to the FilterResults
                    filterResults.values = resultList;
                    filterResults.count = resultList.size();
                }
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence constraint,
                    FilterResults results) {
                if (results != null && results.count > 0) {
                    notifyDataSetChanged();
                } else {
                    notifyDataSetInvalidated();
                }
            }
        };
        return filter;
    }
}
autoCompView = (AutoCompleteTextView) findViewById(R.id.editloc);
        autoCompView.setAdapter(new PlacesAutoCompleteAdapter(this,
                R.layout.list_item));
private static final String PLACES_API_BASE = "https://maps.googleapis.com/maps/api/place";
    private static final String TYPE_AUTOCOMPLETE = "/autocomplete";
    private static final String OUT_JSON = "/json";
    private static final String API_KEY = "YOUR API KEY";
public static ArrayList<String> autocomplete(String input) {

        ArrayList<String> resultList = null;

        HttpURLConnection conn = null;
        StringBuilder jsonResults = new StringBuilder();
        try {
            StringBuilder sb = new StringBuilder(PLACES_API_BASE
                    + TYPE_AUTOCOMPLETE + OUT_JSON);
            sb.append("?sensor=false&key=" + API_KEY);
            // sb.append("&components=country:uk");
            sb.append("&input=" + URLEncoder.encode(input, "utf8"));

            URL url = new URL(sb.toString());
            conn = (HttpURLConnection) url.openConnection();
            InputStreamReader in = new InputStreamReader(conn.getInputStream());

            // Load the results into a StringBuilder
            int read;
            char[] buff = new char[1024];
            while ((read = in.read(buff)) != -1) {
                jsonResults.append(buff, 0, read);
            }
        } catch (MalformedURLException e) {
            Log.e(TAG, "Error processing Places API URL", e);
            return resultList;
        } catch (IOException e) {
            Log.e(TAG, "Error connecting to Places API", e);
            return resultList;
        } finally {
            if (conn != null) {
                conn.disconnect();
            }
        }

        try {
            // Create a JSON object hierarchy from the results
            JSONObject jsonObj = new JSONObject(jsonResults.toString());
            JSONArray predsJsonArray = jsonObj.getJSONArray("predictions");

            // Extract the Place descriptions from the results
            resultList = new ArrayList<String>(predsJsonArray.length());
            for (int i = 0; i < predsJsonArray.length(); i++) {
                resultList.add(predsJsonArray.getJSONObject(i).getString(
                        "description"));
            }

        } catch (JSONException e) {
            Log.e(TAG, "Cannot process JSON results", e);
        }

        return resultList;
    }
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content" />
You have to manually attach the debugger while the emulator says "Waiting for debugger to attach". In Netbean's menu bar, click "Debug", then "Attach Debugger...". You have to select your package from the "Process" drop down list, and then click "Attach". That should do it.
This works in Netbeans 7 anyway.
You have two choices: connect a debugger, or kill the process.

Looking at your logcat, you have at least two different desktop applications that are trying to connect to each application process, which is where the "Ignoring second debugger" messages are coming from.

This would happen if you were, say, running Eclipse with the ADT plugin, and the stand-alone DDMS at the same time. I don't know what you're running or what the netbeans plugin does, but I would start by figuring out if you have two different things fighting for control.
autoCompView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                YOURTEXT = autoCompView.getText().toString();
                //new AsyncGetAutoPlace().execute(autoCompView.getText()
                //      .toString().trim());
            }
        });
//Autocomplete for location ----------------------------------------------
ArrayList<String> names;
String browserKey = "AIzaSyA.....................";
String url;
private static final String TAG_RESULT = "predictions";
ArrayAdapter<String> adapter;
    edtLocation = (AutoCompleteTextView) findViewById(R.id
            .edt_location);
    edtLocation.setThreshold(1);


    names = new ArrayList<String>();
    edtLocation.addTextChangedListener(new TextWatcher() {

        public void afterTextChanged(Editable s) {

        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {

        }

        public void onTextChanged(CharSequence s, int start, int before,
                                  int count) {

            if (s.toString().length() <= 6) {

                names = new ArrayList<String>();
                updateList(s.toString());


            }


        }
    });
  //Method to get location suggestion
public void updateList(String place) {
    String input = "";

    try {
        input = "input=" + URLEncoder.encode(place, "utf-8");
    } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
    }

    String output = "json";
    String parameter = input + "&types=(regions)&sensor=true&key="
            + browserKey;

    url = "https://maps.googleapis.com/maps/api/place/autocomplete/"
            + output + "?" + parameter;


    Log.e("browsekey", browserKey);
    Log.e("URL-LOCation", url);

    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, url,
            null, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject response) {

            System.out.println("keyresponse==>>" + response.toString());

            try {

                JSONArray ja = response.getJSONArray(TAG_RESULT);

                for (int i = 0; i < ja.length(); i++) {
                    JSONObject c = ja.getJSONObject(i);
                    String description = c.getString("description");
                    Log.d("description", description);
                    names.add(description);
                }

                adapter = new ArrayAdapter<String>(
                        getApplicationContext(),
                        android.R.layout.simple_list_item_1, names) {
                    @Override
                    public View getView(int position,
                                        View convertView, ViewGroup parent) {
                        View view = super.getView(position, convertView, parent);
                        TextView text = (TextView) view.findViewById(android.R.id.text1);
                        text.setTextColor(Color.BLACK);
                        return view;
                    }
                };
                edtLocation.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            } catch (Exception e) {
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    });
    MyApplication.getInstance().addToReqQueue(jsonObjReq, "jreq");
}
public class MyApplication extends Application {

private RequestQueue mRequestQueue;
private static MyApplication mInstance;

@Override
public void onCreate() {
    super.onCreate();
    mInstance = this;
}

public static synchronized MyApplication getInstance() {
    return mInstance;
}

public RequestQueue getReqQueue() {
    if (mRequestQueue == null) {
        mRequestQueue = Volley.newRequestQueue(getApplicationContext());
    }

    return mRequestQueue;
}

public <T> void addToReqQueue(Request<T> req, String tag) {

    getReqQueue().add(req);
}

public <T> void addToReqQueue(Request<T> req) {

    getReqQueue().add(req);
}

public void cancelPendingReq(Object tag) {
    if (mRequestQueue != null) {
        mRequestQueue.cancelAll(tag);
    }
}