Reputation: 1
I want to fetch Images using Volley JSON in PagerAdapter for slider , but problem is that data fetched using JSON is reached till constructor but not reatched to InstantiateItem method.
This is my xml File.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="@dimen/_200sdp"
android:id="@+id/view_pager">
</androidx.viewpager.widget.ViewPager>
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/_50sdp"
android:text="@string/app_name"
android:textSize="@dimen/_30sdp"
android:textColor="@color/colorPrimaryDark"
android:id="@+id/txt"/>
</LinearLayout>
MainActivity.java
package com.example.sliderwithvolleyjson;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
String slider_url="Here is my API";
ArrayList<String> image=new ArrayList<>();
RequestQueue queue;
Slider_Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
queue= Volley.newRequestQueue(getApplicationContext());
viewPager=findViewById(R.id.view_pager);
getImageByJson();
viewPager.setAdapter(adapter);
}
public void getImageByJson(){
JsonObjectRequest request=new JsonObjectRequest(Request.Method.GET, slider_url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray array=response.getJSONArray("slider");
for (int i=0;i<array.length();i++){
JSONArray jsonData=array.getJSONArray(i);
image.add(jsonData.getString(1));
}
String[] imageUrls=new String[image.size()];
imageUrls=image.toArray(imageUrls);
for (String s : imageUrls){
Log.d("String",s);
}
adapter=new Slider_Adapter(getApplicationContext(),imageUrls);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),String.valueOf(e),Toast.LENGTH_LONG).show();
Log.d("ath",String.valueOf(e));
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(),String.valueOf(error),Toast.LENGTH_LONG).show();
Log.d("Error",String.valueOf(error));
}
});
queue.add(request);
}
}
I fetch images from my server using API in mainactivity class. I use Volley JSON to do it. Then i passed this images to PagerAdapter class using viewpager.
PagerAdapter Class
package com.example.sliderwithvolleyjson;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.squareup.picasso.Picasso;
public class Slider_Adapter extends PagerAdapter {
LayoutInflater inflater;
private Context context;
private String[] imageurls;
public Slider_Adapter(Context context, String[] imageurls) {
this.context = context;
this.imageurls = imageurls;
Toast.makeText(context, String.valueOf(imageurls[1]), Toast.LENGTH_SHORT).show();
}
@Override
public int getCount() {
return imageurls.length;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view==object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view=inflater.inflate(R.layout.activity_main,container);
ImageView imageView=new ImageView(container);
TextView textView=view.findViewById(R.id.txt);
textView.setText(String.valueOf(imageurls.length));
Picasso.with(context).load(imageurls[position]).fit().into(imageView);
ViewPager pager=(ViewPager)container;
pager.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View)object);
}
}
That Images is arrived till constructor (I tried it using toast message) but We can't find that images/data in InstantiateItem method and other functions.
Thanks in Advance.
Upvotes: 0
Views: 79
Reputation: 48
for (String s : imageUrls){
Log.d("String",s);
}
adapter=new Slider_Adapter(getApplicationContext(),imageUrls);
After this line of codes in your onResponse
method, add this code.
viewPager.setAdapter(adapter);
And remove it from onCreate because it is not necessary.
Upvotes: 0
Reputation: 1017
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
String slider_url="Here is my API";
ArrayList<String> image=new ArrayList<>();
RequestQueue queue;
Slider_Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
queue= Volley.newRequestQueue(getApplicationContext());
viewPager=findViewById(R.id.view_pager);
getImageByJson();
}
public void getImageByJson(){
JsonObjectRequest request=new JsonObjectRequest(Request.Method.GET, slider_url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray array=response.getJSONArray("slider");
for (int i=0;i<array.length();i++){
JSONArray jsonData=array.getJSONArray(i);
image.add(jsonData.getString(1));
}
String[] imageUrls=new String[image.size()];
imageUrls=image.toArray(imageUrls);
for (String s : imageUrls){
Log.d("String",s);
}
adapter=new Slider_Adapter(getApplicationContext(),imageUrls);
viewPager.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),String.valueOf(e),Toast.LENGTH_LONG).show();
Log.d("ath",String.valueOf(e));
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(),String.valueOf(error),Toast.LENGTH_LONG).show();
Log.d("Error",String.valueOf(error));
}
});
queue.add(request);
}
}
Upvotes: 0