2017-12-12 12 views
-1

私は現在、google APIのバーのリストを表示していますが、 "名前"やその他の詳細がonclickで解析されるようにしようとしています。現在は新しいアクティビティが開かれていますが、putExtraで送信したJSONの解析結果を取得できません。 ヘルプは感謝しています。アクティビティからJSONオブジェクトをパースする

Bars.java

public class Bars extends AppCompatActivity { 

    private String TAG = Bars.class.getSimpleName(); 

    private ProgressDialog pDialog; 
    ListView lv; 

    // URL to get Results JSON 
    private static String url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=40.785091,-73.968285&radius=1000&type=restaurant,bar,food,point_of_interest&keyword=bar&opennow=true&key=MYAPICODE"; 

    ArrayList<HashMap<String, String>> resultsList; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_bars); 

     resultsList = new ArrayList<>(); 
     lv = (ListView) findViewById(R.id.list); 
     new Getresults().execute(); 
    } 

    //Async task class to get json by making HTTP call 

    private class Getresults extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Showing progress dialog 
      pDialog = new ProgressDialog(Bars.this); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(false); 
      pDialog.show(); 

     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      HttpConnect sh = new HttpConnect(); 

      // Making a request to url and getting response 
      String jsonStr = sh.makeServiceCall(url); 

      Log.e(TAG, "Response from url: " + jsonStr); 

      if (jsonStr != null) { 
       try { 
        JSONObject jsonObj = new JSONObject(jsonStr); 

        // Getting JSON Array node 
        JSONArray results = jsonObj.getJSONArray("results"); 

        // looping through All results 
        for (int i = 0; i < results.length(); i++) { 
         JSONObject c = results.getJSONObject(i); 

         String name = c.getString("name"); 
         String vicinity = c.getString("vicinity"); 
         String rating = c.getString("rating"); 




         // tmp hash map for single resu 
         HashMap<String, String> result = new HashMap<>(); 

         // adding each child node to HashMap key => value 
         result.put("name", name); 
         result.put("vicinity", vicinity); 
         result.put("rating", rating) ; 

         // adding result to result list 
         resultsList.add(result); 
        } 
       } catch (final JSONException e) { 
        Log.e(TAG, "Json parsing error: " + e.getMessage()); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getApplicationContext(), 
            "Json parsing error: " + e.getMessage(), 
            Toast.LENGTH_LONG) 
            .show(); 
         } 
        }); 

       } 
      } else { 
       Log.e(TAG, "Couldn't get json from server."); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getApplicationContext(), 
           "Couldn't get json from server. Check LogCat for possible errors!", 
           Toast.LENGTH_LONG) 
           .show(); 
        } 
       }); 

      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      // Dismiss the progress dialog 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 
      /** 
      * Updating parsed JSON data into ListView 
      * */ 
      ListAdapter adapter = new SimpleAdapter(
        Bars.this, resultsList, 
        R.layout.list_item, new String[]{"name", "vicinity", 
        "rating" }, new int[]{name, 
        R.id.vicinity, R.id.rating}); 

      lv.setAdapter(adapter); 

      // on lick listener to send name position 
      lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 

        Intent newActivity = new Intent(Bars.this, 
        SecondActivity.class); 
        newActivity.putExtra("position", position); 
        newActivity.putExtra("name", name); 

        startActivity(newActivity); 


       } 
      }); 
     } 

    } 

} 

あなたは最後の部分は、私が見ることができない

public class SecondActivity extends AppCompatActivity { 

    String name; 
    Intent getName; 
    Bundle extras; 

    TextView name1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 

     String name = getIntent().getStringExtra("name"); 

     getName = this.getIntent(); 
     extras = getName.getExtras(); 


     // Intent intent = getIntent(); 
     // String name = intent.getStringExtra(name: "name"); 






    } 
    public void name(View view){ 
     name1 = (TextView)findViewById(R.id.name); 

     getIntent().getStringExtra("name"); 


    } 


} 

答えて

0

を次のようにあるsecondActivityクラスに「名前」と「位置」を送信見ることができるようにあなたは名前を初期化しています。しかし、私はあなたがこのコードを使用すると、intとしてname言及している上記のコードで

ListAdapter adapter = new SimpleAdapter(
       Bars.this, resultsList, 
       R.layout.list_item, new String[]{"name", "vicinity", 
       "rating" }, new int[]{name, 
       R.id.vicinity, R.id.rating}); 

を書かれているあなたのonPostexecuteブロックで見ることができます。この行を参照してください。

int[]{name,R.id.vicinity, R.id.rating}); 

したがって、2回目のアクティビティでintent.getStringExtra('name')を呼び出して名前の値を取得することはできません。

+0

わかりましたので、私は私の第二の活動でそれを得るだろうか知っていますよ?またはそれがintではないことを言及する方法がある場合 –

+0

resultList.get(selectedPosition)によってハッシュマップを取得します。その後、第二の活動にそれを送ってください –

+0

あなたはそれを試していただきありがとうございます –

0

あなたは位置によってあなたのHashMapを取得し、その後、adapterViewからアダプターへのアクセスを必要としてアイテムを引っ張る

@Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
    ListAdapter adapter = (ListAdapter) adapterView.getAdapter() 
    HashMap<String, String> map = (HashMap) adapter.getItem(position) 
    String name = map.get("name") // may be a null 

    Intent newActivity = new Intent(Bars.this, SecondActivity.class); 
    newActivity.putExtra("position", position); 
    newActivity.putExtra("name", name); 
    startActivity(newActivity); 
} 
関連する問題