Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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上带自动完成功能的google距离矩阵_Android_Google Maps_Google Maps Api 3_Autocomplete_Autocompletetextview - Fatal编程技术网

android上带自动完成功能的google距离矩阵

android上带自动完成功能的google距离矩阵,android,google-maps,google-maps-api-3,autocomplete,autocompletetextview,Android,Google Maps,Google Maps Api 3,Autocomplete,Autocompletetextview,我正试着按照标题所说的去做,那就是在android上创建一个带有谷歌距离矩阵和自动完成功能的应用程序。到目前为止,通过我自己的研究和对书籍的研究,很难想出代码,我终于来到这里。到目前为止,我已经去了 和谷歌方向文件 所有这些链接并没有真正帮助我理解它,我确实理解了请求API地址并返回JSON的概念,我必须“解析”JSON并提取必要的信息,在我的例子中就是距离。但我没有得到的是如何创建一个自动完成,其中包含来自谷歌地图距离矩阵的建议,以及如何相应地发送出发地和目的地。这真的很令人沮丧,这就是

我正试着按照标题所说的去做,那就是在android上创建一个带有谷歌距离矩阵和自动完成功能的应用程序。到目前为止,通过我自己的研究和对书籍的研究,很难想出代码,我终于来到这里。到目前为止,我已经去了

和谷歌方向文件

所有这些链接并没有真正帮助我理解它,我确实理解了请求API地址并返回JSON的概念,我必须“解析”JSON并提取必要的信息,在我的例子中就是距离。但我没有得到的是如何创建一个自动完成,其中包含来自谷歌地图距离矩阵的建议,以及如何相应地发送出发地和目的地。这真的很令人沮丧,这就是我在Claytical.com上看到的

这里是main.java

package com.example.autocomplete;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
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.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

public class Main extends Activity {
    /** Called when the activity is first created. */
public ArrayAdapter<String> adapter;
public AutoCompleteTextView textview;
public Object s;

class GetPlaces extends AsyncTask<String, Void, ArrayList<String>>
{
public ArrayAdapter<String> adapter;
public AutoCompleteTextView textview;
Object s;


@Override
           // three dots is java for an array of strings
protected ArrayList<String> doInBackground(String... args)
{

Log.d("gottaGo", "doInBackground");

ArrayList<String> predictionsArr = new ArrayList<String>();

try
{



        URL googlePlaces = new URL(
        // URLEncoder.encode(url,"UTF-8");
                "https://maps.googleapis.com/maps/api/place/autocomplete/json?input="+ URLEncoder.encode(s.toString(), "UTF-8") +"&types=geocode&language=en&sensor=true&key=<yourapikeygoeshere>");
        URLConnection tc = googlePlaces.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                tc.getInputStream()));

        String line;
        StringBuffer sb = new StringBuffer();
                        //take Google's legible JSON and turn it into one big string.
        while ((line = in.readLine()) != null) {
        sb.append(line);
        }
                        //turn that string into a JSON object
        JSONObject predictions = new JSONObject(sb.toString()); 
                       //now get the JSON array that's inside that object            
        JSONArray ja = new JSONArray(predictions.getString("predictions"));

            for (int i = 0; i < ja.length(); i++) {
                JSONObject jo = (JSONObject) ja.get(i);
                                //add each entry to our array
                predictionsArr.add(jo.getString("description"));
            }
} catch (IOException e)
{

Log.e("YourApp", "GetPlaces : doInBackground", e);

} catch (JSONException e)
{

Log.e("YourApp", "GetPlaces : doInBackground", e);

}

return predictionsArr;

}

//then our post

@Override
protected void onPostExecute(ArrayList<String> result)
{

Log.d("YourApp", "onPostExecute : " + result.size());
//update the adapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(),                 R.layout.item_list);
adapter.setNotifyOnChange(true);

//attach the adapter to textview
textview.setAdapter(adapter);

for (String string : result)
{

Log.d("YourApp", "onPostExecute : result = " + string);
adapter.add(string);
adapter.notifyDataSetChanged();

}

Log.d("YourApp", "onPostExecute : autoCompleteAdapter" + adapter.getCount());

}

private Context getBaseContext() {
// TODO Auto-generated method stub
return null;
}

}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.item_list);
    final AutoCompleteTextView textView = (AutoCompleteTextView)
            findViewById(R.id.autoCompleteTextView1);
    adapter.setNotifyOnChange(true);
    textView.setAdapter(adapter);
     textView.addTextChangedListener(new TextWatcher() {

public void onTextChanged(CharSequence s, int start, int before, int count) {
if (count%3 == 1) {
adapter.clear();
            GetPlaces task = new GetPlaces();
                    //now pass the argument in the textview to the task
                            task.execute(textView.getText().toString());
    }
}

public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}

public void afterTextChanged(Editable s) {

}
});






}
}
它启动得很好,并显示自动完成的文本视图,但我一输入一封信,它就崩溃了。
感谢您阅读本文,并提前感谢您的帮助

确定第一件事是您的URL格式不正确:

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=" + URLEncoder.encode(s.toString(), "UTF-8") + "&types=geocode&language=en&sensor=true&key=<yourapikeygoeshere>

下一个循环是替换

JSONObject jo = (JSONObject) ja.get(i);


试试这个,让我知道它是如何运行的。

在开发过程中,我也使用相同的代码来设计自动完成文本视图。我面临同样的问题,并最终解决了它

需要在您的Google控制台中同时启用“Android的Google Place API”和“Web服务的Google Place API”

此外,您还需要将URLEncoder.encode(s.toString(),“UTF-8”)替换为URLEncoder.encode(args[0].toString(),“UTF-8”)


我希望这会对您有所帮助。

您可以发布日志猫,在它崩溃时显示错误吗?编辑以显示日志猫:)我确实将API键放在那里,并替换了您告诉我的部分,但当我这样做时,eclipse建议我删除JSONArray ja中的预测,我做到了,然后它告诉我删除JSONObject predictions=newJSONObject(sb.toString());完全是。
https://maps.googleapis.com/maps/api/place/autocomplete/json?input=" + URLEncoder.encode(s.toString(), "UTF-8") + "&types=geocode&language=en&sensor=true&key=<yourapikeygoeshere>
JSONArray ja = new JSONArray(predictions.getString("predictions"));
JSONArray ja = new JSONArray(predictions.getJSONArray("predictions"));
JSONObject jo = (JSONObject) ja.get(i);
JSONObject jo = ja.getJSONObject(i);