Home > other >  How to access json array in url that needs bearer token and display in android studio?
How to access json array in url that needs bearer token and display in android studio?

Time:09-21

Hello stackoverflow community!!

How do I access a JSON array in this URL "https://api.json-generator.com/templates/z0aMAeTBHKq3/data"

token is "2oof0bzpgllll2a8k2fmmh6aaykeu8yptztdzke7"

but when I display the data in an Activity, it just displays blank and exits the app. But When I change the URL without an auth/bearer token I can see the displayed data in the URL.

So my question: is how do I put the token in header so that I can have access and see the data displayed in the mobile phone?

I know it is simple but i am having a hard time.

This is my MainActivity.java

public class MainActivity extends AppCompatActivity {

private RecyclerView recyclerView;
private RequestQueue requestQueue;
private List<Movie> movieList;

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

    recyclerView = findViewById(R.id.recyclerview);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    requestQueue = VolleySingleton.getmInstance(this).getRequestQueue();

    movieList = new ArrayList<>();
    fetchMovies();

}


private void fetchMovies() {
    //Url with auth
    String url = "https://api.json-generator.com/templates/z0aMAeTBHKq3/data";

    //URL without auth
    //String url = "https://jsonplaceholder.typicode.com/posts";

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {

            for (int i = 0 ; i < response.length() ; i   ){
                try {
                    JSONObject jsonObject = response.getJSONObject(i);
                    String userId = jsonObject.getString("userId");
                    String id = jsonObject.getString("id");
                    String title = jsonObject.getString("title");
                    String body = jsonObject.getString("body");

                    Movie movie = new Movie(title , userId , id , body);
                    movieList.add(movie);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                MovieAdapter adapter = new MovieAdapter(MainActivity.this , movieList);

                recyclerView.setAdapter(adapter);
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void one rrorResponse(VolleyError error) {
            Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
    HashMap headers = new HashMap();
    String authValue = "Bearer "   
    "2oof0bzpgllll2a8k2fmmh6aaykeu8yptztdzke7";
    headers.put("Authorization", authValue);
    headers.put("Accept", "application/json; charset=UTF-8");
    headers.put("Content-Type", "application/json; charset=UTF-8");

    requestQueue.add(jsonArrayRequest);
}
}

this is my Movie.java

public class Movie {

private String userId , id , title, body;


public Movie(String userId , String id , String title , String body){
    this.title = title;
    this.userId = userId;
    this.id = id;
    this.body = body;
}

public String getTitle() {
    return title;
}

public String getUserId() {
    return userId;
}

public String getId() {
    return id;
}

public String getBody() {
    return body;
}
}

this is my MovieAdapter.java

public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.MovieHolder> {

private Context context;
private List<Movie> movieList;

public MovieAdapter(Context context , List<Movie> movies){
    this.context = context;
    movieList = movies;
}
@NonNull
@Override
public MovieHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.item , parent , false);
    return new MovieHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MovieHolder holder, int position) {

    Movie movie = movieList.get(position);
    holder.userId.setText(movie.getUserId().toString());
    holder.id.setText(movie.getId());
    holder.title.setText(movie.getTitle());
    holder.body.setText(movie.getBody());


    holder.constraintLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context , DetailActivity.class);

            Bundle bundle = new Bundle();
            bundle.putString("userId" , movie.getUserId());
            bundle.putString("id" , movie.getId());
            bundle.putString("title" , movie.getTitle());
            bundle.putString("body" , movie.getBody());

            intent.putExtras(bundle);

            context.startActivity(intent);
        }
    });

}

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

public class MovieHolder extends RecyclerView.ViewHolder{


    TextView title , userId , id, body;
    ConstraintLayout constraintLayout;

    public MovieHolder(@NonNull View itemView) {
        super(itemView);

        userId = itemView.findViewById(R.id.userid_tv);
        title = itemView.findViewById(R.id.title_tv);
        id = itemView.findViewById(R.id.id_tv);
        body = itemView.findViewById(R.id.id_tv);
        constraintLayout = itemView.findViewById(R.id.main_layout);
    }
}
}

This is my VolleySingleton.java

public class VolleySingleton {

private RequestQueue requestQueue;
private static VolleySingleton mInstance;

private VolleySingleton(Context context){
    requestQueue = Volley.newRequestQueue(context.getApplicationContext());
}

public static synchronized VolleySingleton getmInstance(Context context){

    if (mInstance == null){
        mInstance = new VolleySingleton(context);
    }
    return mInstance;
}

public RequestQueue getRequestQueue(){return requestQueue;}
}

CodePudding user response:

Try This

Change

private void fetchMovies() {
    //Url with auth
    String url = "https://api.json-generator.com/templates/z0aMAeTBHKq3/data";

    //URL without auth
    //String url = "https://jsonplaceholder.typicode.com/posts";

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {

            for (int i = 0 ; i < response.length() ; i   ){
                try {
                    JSONObject jsonObject = response.getJSONObject(i);
                    String userId = jsonObject.getString("userId");
                    String id = jsonObject.getString("id");
                    String title = jsonObject.getString("title");
                    String body = jsonObject.getString("body");

                    Movie movie = new Movie(title , userId , id , body);
                    movieList.add(movie);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                MovieAdapter adapter = new MovieAdapter(MainActivity.this , movieList);

                recyclerView.setAdapter(adapter);
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void one rrorResponse(VolleyError error) {
            Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
    HashMap headers = new HashMap();
    String authValue = "Bearer "   
    "2oof0bzpgllll2a8k2fmmh6aaykeu8yptztdzke7";
    headers.put("Authorization", authValue);
    headers.put("Accept", "application/json; charset=UTF-8");
    headers.put("Content-Type", "application/json; charset=UTF-8");

    requestQueue.add(jsonArrayRequest);
}

To

private void fetchMovies() {
//        Url with auth
        String url = "https://api.json-generator.com/templates/z0aMAeTBHKq3/data";

//        URL without auth
//        String url = "https://jsonplaceholder.typicode.com/posts";

          JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                        for (int i = 0 ; i < response.length() ; i   ){
                            try {
                                JSONObject jsonObject = response.getJSONObject(i);
                                String userId = jsonObject.getString("userId");
                                String id = jsonObject.getString("id");
                                String title = jsonObject.getString("title");
                                String body = jsonObject.getString("body");

                                Movie movie = new Movie(title , userId , id , body);
                                movieList.add(movie);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                            MovieAdapter adapter = new MovieAdapter(MainActivity.this , movieList);

                            recyclerView.setAdapter(adapter);
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void one rrorResponse(VolleyError error) {
                Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }){
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headers = new HashMap<String, String>();
                String authValue = "Bearer "   "2oof0bzpgllll2a8k2fmmh6aaykeu8yptztdzke7";
                headers.put("Authorization", authValue);
                headers.put("Accept", "application/json; charset=UTF-8");
                headers.put("Content-Type", "application/json; charset=UTF-8");
                return headers;
            }

        };
        requestQueue.add(jsonArrayRequest);
    }

put your headers code inside getHeaders() @Overtide method

  • Related