gpt4 book ai didi

java - Android Studio - 从 Google Places Details API 电话号码解析 JSON,首次运行时给出 null

转载 作者:行者123 更新时间:2023-12-01 17:18:21 25 4
gpt4 key购买 nike

这里有一个奇怪的问题。目前,我有一个 Activity ,它使用 Google Places Search API 获取所有出租车公司的名称和地点 ID,并将它们放入 ListView 中。然后,当单击该项目时,它将获取地点 ID 并运行地点详细信息 API 来获取电话号码。

目前,我遇到了这样的问题:第一次在 ListView 中单击该项目时,JSON 解析器将返回 NULL,并且手机将调用 6855 或 685-5 等号码。如果您返回并单击同一项目或另一个项目,则电话号码将正确获取。

在 Activity 中,我运行 2 个 JSON 解析器,但它们运行的​​时间不同。

创建时:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_taxi);
mQueue = Volley.newRequestQueue(this);
pQueue = Volley.newRequestQueue(this);
listItem = new ArrayList<>();
placeid = new ArrayList<>();
police = findViewById(R.id.textView11);
userlist = findViewById(R.id.users_list);
jsonParse();
userlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String phone = jsonParseNumber(position);
}
});
}

jsonParse(获取本地出租车公司名称)

        private void jsonParse() {
String url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=51.6232817,0.2919483&radius=1000&type=taxi%20service&keyword=taxi&key=APIKEY";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("results");
for (int i = 0; i < jsonArray.length(); i++){
JSONObject result = jsonArray.getJSONObject(i);
String name = result.getString("name");
String id = result.getString("place_id");
placeid.add(id);
listItem.add(name);
}
adapter = new ArrayAdapter(Taxi.this, R.layout.row, listItem);
userlist.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}

}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});

mQueue.add(request);
}

jsonParseNumber(获取数字并调用它 - 这是第一次运行时返回 NULL 的代码)

private String jsonParseNumber(int pos) {
String id = placeid.get(pos);
String url = "https://maps.googleapis.com/maps/api/place/details/json?placeid="+id+"&key=APIKEY";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject jsonArray = response.getJSONObject("result");
for (int i = 0; i < jsonArray.length(); i++){
number = jsonArray.getString("formatted_phone_number");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});

pQueue.add(request);
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel: " + number));
startActivity(intent);
return number;

}

起初我认为可能是在解析器完成之前调用了拨号操作,因此我将其移至 jsonParseNumber 的末尾以确保但它仍然执行相同的操作。

快速说明:

Activity 中的 2 个 JSON 解析器

第一个解析器从 GOOGLE PLACES SEARCH API 获取 JSON,以获取该地区出租车公司的名称和地点 ID

第二个解析器使用地点 ID 从 GOOGLE PLACES DETAILS 获取 JSON 来获取电话号码

当第二个解析器运行时,它将在第一次运行时返回 NULL,但是如果再次调用,它将返回预期的电话号码并调用它。

最佳答案

这是因为,当您返回“number”时,您的号码为空。您不会等到 api 调用完成。最好在收到执行特定操作的响应时实现回调。

关于java - Android Studio - 从 Google Places Details API 电话号码解析 JSON,首次运行时给出 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61345141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com