晚安,
我一直在尝试实施一个简单的Android(tm)应用程序,该应用程序利用Google Places(tm)API来确定本地兴趣点(例如餐馆和酒店),但是我确定了如何确定真正开始。
我已经使用的资源如下:
- The Google Places(tm) documentation
- An Android(tm) development blog hosted by Brain Buikema
- 关于异步任务的Android(tm)开发人员文档
- 类似情况下个人的各种其他stackoverflow帖子
我只是希望得到一些指导,这样我的情况下的任何人都可以找到这篇文章,然后转发给一些非常有见地的资源。
此外,我觉得使用谷歌搜索查找资源效率有点低,是否还有程序员经常使用的其他数据库我不知道?任何推荐的文献?
TL; DR ...
- 我正在寻找使用Places API的一些权威指南,在Android(tm)平台上使用JSON对象和网络。
- 我希望被重定向到其他人过去发现的一些有用的资源。
- 我在下面包含了我的Main.java文件,只是为了提供上下文 - 我不是在寻找答案:)
实现Places API功能的Main.java类的代码:
Button food = (Button) findViewById(R.id.button14);
food.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
type = "restaurant";
//Constructs the urlString
if(useCurr)
urlString = stringConstructor(myKey, lat, lon, radius, sensor, type);
else
{
//Here, you must update the lat and lon values according to the location input by the user
urlString = stringConstructor(myKey, lat, lon, radius, sensor, type);
}
//DO HTTPS REQUEST HERE
urlString = "https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=AIzaSyAp24M3GU9V3kWrrezye8CyUrhtpToUhrs";
Results res = new Results();
JSONArray json = res.doInBackground(urlString);
System.out.println(json);
}
});
处理异步任务的Result类的代码:
private class Results extends AsyncTask<String, Integer, JSONArray>
{
protected JSONArray doInBackground(String...params)
{
JSONArray output = null;
try
{
try
{
url = new URL(params[0]);
}
catch(MalformedURLException e)
{
System.out.println("URL formed incorrectly! (" + e + ")");
}
output = (JSONArray) url.getContent();
}
catch(Exception e)
{
System.out.println("Exception: " + e);
}
return output;
}
}
每当我点击模拟器中的“食物”按钮(如上所述)时,目前都会收到android.os.NetworkOnMainThreatException。
非常欢迎任何建议,我正试图在Android平台上建立一个非常坚实的基础。
答案 0 :(得分:1)
您没有以正确的方式使用AsyncTask
。 android doc清楚地说不要手动调用AsyncTask
方法。你通过创建doInBackground
对象来调用AsyncTask
这样改变你的代码:
btnclicl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Results dTask = new Results();
dTask.execute(urlString);
}
});
class Results extends AsyncTask<Integer, Integer, String>{
@Override
protected void onPostExecute(JSONObject json) {
Log.v("json", json);
super.onPostExecute(json);
}
@Override
protected JSONObject doInBackground(String... params) {
JSONObject strtemp=null;
HttpClient httpclient = new DefaultHttpClient();
// Prepare a request object
HttpGet httpget = new HttpGet(urlString);
// Execute the request
HttpResponse response;
JSONObject json = new JSONObject();
try {
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
// A Simple JSON Response Read
InputStream instream = entity.getContent();
String result= convertStreamToString(instream);
json=new JSONObject(result);
instream.close();
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
}