-1

こんばんは、

私は、Google Places(tm) API を使用してローカルの関心のある場所 (レストランやホテルなど) を特定する単純な Android(tm) アプリケーションを実装しようとしていますが、実際に取得する方法を決定するのに非常に苦労しています。始めました。

私がすでに採用しているリソースは次のとおりです。

- Google Places(tm) のドキュメント

- Brain Buikema が主催する Android(tm) 開発ブログ

-非同期タスクに関する Android(tm) 開発者向けドキュメント

- 同様の状況にある個人からのその他のさまざまなスタック オーバーフローの投稿

私のような状況にある人がこの投稿を簡単に見つけて、非常に洞察に満ちたリソースに転送されるように、何らかのガイダンスを望んでいました.

さらに、Google 検索を使用してリソースを見つけるのはやや非効率的だと思います。プログラマーが頻繁に利用していて、私が気付いていない他のデータベースはありますか? おすすめの文献は?

TL;DR...

- Places API の使用、JSON オブジェクトの操作、および Android(tm) プラットフォームでのネットワーキングに関する決定的なガイドを探しています。

-他の人が過去に見つけた有用な情報源にリダイレクトされることを望んでいました.

-コンテキストを提供するために、以下に 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;
    }
}    

現在、エミュレーターで [Food] ボタン (上記) をクリックするたびに android.os.NetworkOnMainThreatException を受け取ります。

どんなアドバイスでも大歓迎です。私は Android プラットフォーム上で本当に強固な基盤を構築しようとしています。

4

1 に答える 1

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;
        }  
}  
于 2012-04-25T02:41:20.850 に答える