Q:

Google Places API not showing in RecyclerView

I made a simple project that aims to obtain data of nearby restaurants, and to populate a RecyclerView with it. However, when I ran the app with my code, nothing showed up. The logcat does not show any errors, and the app doesn't crash. Shown below is the code and the logcat. I would greatly appreciate your help. Thank you very much. (By the way, I omitted the api key from the sample code for this question.)
MainActivity.java
package com.example.matts.placessample;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

    public static ArrayList<HashMap<String, String>> placeList = new ArrayList<>();
    public static HashMap<String, String> place = new HashMap<>();

    private PlacesAdapter mAdapter;
    private RecyclerView mRecyclerView;
    private LinearLayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView = findViewById(R.id.recyclerView);

        mRecyclerView.setHasFixedSize(true);

        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        mAdapter = new PlacesAdapter(this, placeList);
        mRecyclerView.setAdapter(mAdapter);

        new GetPlaces().execute();
    }

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

        @Override
        protected void onPreExecute () {
            super.onPreExecute();
        }

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

            String url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=14.5649806,120.9934743&radius=500&type=restaurant&key=INSERT_API_KEY";
            String jsonString = sh.makeServiceCall(url);
            String TAG = "Hello";

            if (jsonString != null) {
                try {
                    JSONObject jsonObject = new JSONObject(jsonString);
                    JSONArray places = jsonObject.getJSONArray("results");

                    for (int i = 0; i < places.length(); i++) {
                        JSONObject p = places.getJSONObject(i);

                        String name = p.getString("name");
                        String vicinity = p.getString("vicinity");

                        place.put("name", name);
                        place.put("vicinity", vicinity);

                        placeList.add(place);
                    }

                } 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);
        }
    }
}

Adapter.java
package com.example.matts.placessample;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;

import static com.example.matts.placessample.MainActivity.place;
import static com.example.matts.placessample.MainActivity.placeList;

class PlacesAdapter extends RecyclerView.Adapter<PlacesAdapter.PlaceViewHolder>{

    private static ArrayList<HashMap<String, String>> mPlaceList;
    private Context mContext;
    private LayoutInflater inflater;

    PlacesAdapter(Context context, ArrayList<HashMap<String, String>> list) {
        mContext = context;
        inflater= LayoutInflater.from(context);
        mPlaceList = list;
    }

    static class PlaceViewHolder extends RecyclerView.ViewHolder {
        private TextView name;
        private TextView vicinity;

        PlaceViewHolder(View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.name);
            vicinity = itemView.findViewById(R.id.vicinity);
        }
    }

    @Override
    public PlaceViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemsView = LayoutInflater
                .from(parent.getContext())
                .inflate(R.layout.list_item, parent, false);

        return new PlaceViewHolder(itemsView);
    }

    @Override
    public void onBindViewHolder(PlaceViewHolder holder, int position) {
        holder.name.setText(place.get("name"));
        holder.vicinity.setText(place.get("vicinity"));
    }

    @Override
    public int getItemCount() {
        return placeList.size();
    }
}

Logcat
10-14 15:04:55.276 21207-21207/? I/art: Late-enabling -Xcheck:jni
10-14 15:04:55.292 21207-21214/? E/art: Failed sending reply to debugger: Broken pipe
10-14 15:04:55.292 21207-21214/? I/art: Debugger is no longer active
10-14 15:04:55.292 21207-21214/? I/art: Starting a blocking GC Instrumentation
10-14 15:04:55.438 21207-21207/? W/System: ClassLoader referenced unknown path: /data/app/com.example.matts.placessample-2/lib/arm64
10-14 15:04:55.449 21207-21207/? I/InstantRun: starting instant run server: is main process
10-14 15:04:55.452 21207-21207/? V/Monotype: SetAppTypeFace- try to flip, app = com.example.matts.placessample
10-14 15:04:55.454 21207-21207/? V/Monotype:     Typeface getFontPathFlipFont - systemFont = default#default
10-14 15:04:55.518 21207-21207/? W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
10-14 15:04:55.526 21207-21207/? V/Monotype: SetAppTypeFace- try to flip, app = com.example.matts.placessample
10-14 15:04:55.527 21207-21207/? V/Monotype:     Typeface getFontPathFlipFont - systemFont = default#default
10-14 15:04:55.555 21207-21207/? V/BoostFramework: mAcquireFunc method = public int com.qualcomm.qti.Performance.perfLockAcquire(int,int[])
10-14 15:04:55.555 21207-21207/? V/BoostFramework: mReleaseFunc method = public int com.qualcomm.qti.Performance.perfLockRelease()
10-14 15:04:55.555 21207-21207/? V/BoostFramework: mAcquireTouchFunc method = public int com.qualcomm.qti.Performance.perfLockAcquireTouch(android.view.MotionEvent,android.util.DisplayMetrics,int,int[])
10-14 15:04:55.555 21207-21207/? V/BoostFramework: mIOPStart method = public int com.qualcomm.qti.Performance.perfIOPrefetchStart(int,java.lang.String)
10-14 15:04:55.555 21207-21207/? V/BoostFramework: mIOPStop method = public int com.qualcomm.qti.Performance.perfIOPrefetchStop()
10-14 15:04:55.557 21207-21207/? V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@f9a388e
10-14 15:04:55.557 21207-21207/? V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@db988af
10-14 15:04:55.657 21207-21207/? V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@2bdea7
10-14 15:04:55.657 21207-21207/? V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@caedf54
10-14 15:04:55.684 21207-21223/? D/NetworkSecurityConfig: No Network Security Config specified, using platform default
10-14 15:04:55.749 21207-21225/? I/Adreno: QUALCOMM build                   : dfab96b, I762e720a6a
                                           Build Date                       : 01/31/17
                                           OpenGL ES Shader Compiler Version: XE031.09.00.04
                                           Local Branch                     : 
                                           Remote Branch                    : 
                                           Remote Branch                    : 
                                           Reconstruct Branch               : 
10-14 15:04:55.754 21207-21225/? I/OpenGLRenderer: Initialized EGL, version 1.4
10-14 15:04:55.754 21207-21225/? D/OpenGLRenderer: Swap behavior 1
10-14 15:04:55.786 21207-21207/? W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
10-14 15:04:56.865 21207-21207/com.example.matts.placessample V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@1b40a67

A:

Your adapter need to be notified after get new data. 
Simplest way to do it is extract mAdapter to field and in onPostExecute call mAdapter.notifyDataSetChange()
Of course it will work only when you get proper answer from API.

