JSON Array With Volley Showing Only One data - android-volley
I am trying to display array data using JSON Volley in PostsBasedOnCategory.java. Array data that I want to display are, Title post, and excerpt based on specific category from https://www.kisahmuslim.com/wp-json/wp/v2/categories. But unfortunately, it only showing one result.
Below you can check my code
DaftarCategories.java
public class CallingPage extends AsyncTask<String, String, String> {
HttpURLConnection conn;
java.net.URL url = null;
private int page = 1;
#Override
protected void onPreExecute() {
super.onPreExecute();
//this method will be running on UI thread
showNoFav(false);
pb.setVisibility(View.VISIBLE);
}
#Override
protected String doInBackground(String... params) {
try {
url = new URL("https://www.kisahmuslim.com/wp-json/wp/v2/categories");
}
catch(MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return e.toString();
}
try {
// Setup HttpURLConnection class to send and receive data from php and mysql
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(READ_TIMEOUT);
conn.setConnectTimeout(CONNECTION_TIMEOUT);
conn.setRequestMethod("GET");
// setDoOutput to true as we recieve data from json file
conn.setDoOutput(true);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return e1.toString();
}
try {
int response_code = conn.getResponseCode();
// Check if successful connection made
if (response_code == HttpURLConnection.HTTP_OK) {
// Read data sent from server
InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
// Pass data to onPostExecute method
return (result.toString());
} else {
return("koneksi gagal");
}
} catch (IOException e) {
e.printStackTrace();
return e.toString();
} finally {
conn.disconnect();
}
}
protected void onPostExecute(String result)
{
JsonArrayRequest stringRequest = new JsonArrayRequest(Request.Method.GET, SumberPosts.HOST_URL+"wp/v2/categories/", null, new Response.Listener<JSONArray>()
{
#Override
public void onResponse(JSONArray response) {
// display response
Log.d(TAG, response.toString() + "Size: "+response.length());
// agar setiap kali direfresh data tidak redundant
typeForPosts.clear();
for(int i=0; i<response.length(); i++) { //ambil semua objek yang ada
final CategoriesModel post = new CategoriesModel();
try {
Log.d(TAG, "Object at " + i + response.get(i));
JSONObject obj = response.getJSONObject(i);
post.setId(obj.getInt("id"));
post.setPostURL(obj.getString("link"));
//Get category name
post.setCategory(obj.getString("name"));
//////////////////////////////////////////////////////////////////////////////////////
// getting article konten
JSONObject postCategoryParent = obj.getJSONObject("_links");
JSONArray postCategoryObj = postCategoryParent.getJSONArray("wp:post_type");
JSONObject postCategoryIndex = postCategoryObj.getJSONObject(0); //ambil satu objek saja
String postCategoryUrl = postCategoryIndex.getString("href"); //satu objek yang dimaksud adalah href
if(postCategoryUrl != null) {
Log.d(TAG, postCategoryIndex.getString("href"));
JsonArrayRequest getKonten = new JsonArrayRequest(Request.Method.GET, postCategoryUrl, null, new Response.Listener<JSONArray>()
{
#Override
public void onResponse(JSONArray respon) {
Log.d(TAG, respon.toString() + "Size: "+respon.length());
for(int d=0; d<respon.length(); d++) {
try {
//Log.d(TAG, "Object at " + i + respon.get());
JSONObject objek = respon.getJSONObject(d); //ambil semua artikel yang tersedia di postCategoryUrl
post.setId(objek.getInt("id"));
post.setCreatedAt(objek.getString("date"));
post.setPostURL(objek.getString("link"));
//Get category title
JSONObject titleObj = objek.getJSONObject("title");
post.setJudul(titleObj.getString("rendered"));
//Get excerpt
JSONObject exerptObj = objek.getJSONObject("excerpt");
post.setExcerpt(exerptObj.getString("rendered"));
// Get content
JSONObject contentObj = objek.getJSONObject("content");
post.setContent(contentObj.getString("rendered"));
}
catch (JSONException e) {
e.printStackTrace();
}
}// for category
} //onResponse2
}, new Response.ErrorListener() { //getKonten
#Override
public void onErrorResponse(VolleyError error) {
pb.setVisibility(View.GONE);
Log.d(TAG, error.toString());
}
});
queue.add(getKonten);
} //if postCategoryUrl
//////////////////////////////////////////////////////////////////////////////////////
typeForPosts.add(post);
} //try 1
catch (JSONException e) {
e.printStackTrace();
}
} //for 1
pb.setVisibility(View.GONE);
recycleViewWordPress.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
} //onResponse1
}, new Response.ErrorListener() { //stringRequest
#Override
public void onErrorResponse(VolleyError error) {
showNoFav(true);
pb.setVisibility(View.GONE);
Log.e(TAG, "Error: " + error.getMessage());
Toast.makeText(getContext(), "Tidak bisa menampilkan data. Periksa kembali sambungan internet Anda", Toast.LENGTH_LONG).show();
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
} //onPostExecute
} //CallingPage
#Override
public void onPostingSelected(int pos) {
CategoriesModel click = typeForPosts.get(pos);
excerpt = click.getExcerpt();
//gambar = click.getPostImg();
judul = click.getJudul();
//url = click.getPostURL();
content = click.getContent();
Bundle bundle = new Bundle();
bundle.putString("judul", judul);
//bundle.putString("gambar", gambar);
//bundle.putString("url", url);
bundle.putString("content", content);
bundle.putString("excerpt", excerpt);
PostsBasedOnCategory bookFragment = new PostsBasedOnCategory();
bookFragment.setArguments(bundle);
AppCompatActivity activity = (AppCompatActivity) getContext();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.flContainerFragment, bookFragment).addToBackStack(null).commit();
}
PostsBasedOnCategory.java
#Nullable
#Override
public View onCreateView(LayoutInflater inflater, #Nullable ViewGroup container, #Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_wordpress, container,false);
ButterKnife.bind(this,view);
setHasOptionsMenu(true);
return view;
}
#Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
swipeRefreshLayout =(SwipeRefreshLayout) getActivity().findViewById(R.id.swipeRefreshLayout);
recycleViewWordPress =(RecyclerView) getActivity().findViewById(R.id.recycleViewWordPress);
pb = (ProgressBar) getActivity().findViewById(R.id.loadingPanel);
noFavtsTV = getActivity().findViewById(R.id.no_favt_text);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
#Override
public void onRefresh() {
swipeRefreshLayout.setRefreshing(false);
pb.setVisibility(View.VISIBLE);
recycleViewWordPress.setAdapter(mAdapter);
}
});
typeForPosts = new ArrayList<CategoriesModel>();
recycleViewWordPress.setHasFixedSize(true);
recycleViewWordPress.setLayoutManager(new LinearLayoutManager(getContext()));
recycleViewWordPress.setNestedScrollingEnabled(false);
mAdapter = new AdapterCategoryPosts(getContext(), typeForPosts, this);
recycleViewWordPress.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
loadData();
}
public void loadData() {
Bundle bundel = this.getArguments();
long id = bundel.getLong("id");
String kategori = bundel.getString("kategori");
String title = bundel.getString("judul");
String excerpt = bundel.getString("excerpt");
String pict = bundel.getString("gambar");
String url = bundel.getString("url");
String konten = bundel.getString("konten");
CategoriesModel list = new CategoriesModel();
list.setId(id);
list.setCategory(kategori);
list.setJudul(title);
list.setExcerpt(excerpt);
list.setPostImg(pict);
list.setPostURL(url);
list.setContent(konten);
typeForPosts.add(list);
}
Logcat
2019-09-07 12:01:27.941 11246-11246/com.kursusarabic.arabicforfun D/postFrag: [{"id":12,"count":53,"description":"","link":"https:\/\/kisahmuslim.com\/category\/kisah-nyata\/biografi-ulama","name":"Biografi Ulama","slug":"biografi-ulama","taxonomy":"category","parent":29,"meta":[],"_links":{"self":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/12"}],"collection":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories"}],"about":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/taxonomies\/category"}],"up":[{"embeddable":true,"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/29"}],"wp:post_type":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/posts?categories=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":26,"count":8,"description":"","link":"https:\/\/kisahmuslim.com\/category\/download","name":"Download","slug":"download","taxonomy":"category","parent":0,"meta":[],"_links":{"self":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/26"}],"collection":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories"}],"about":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/taxonomies\/category"}],"wp:post_type":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/posts?categories=26"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":1812,"count":9,"description":"","link":"https:\/\/kisahmuslim.com\/category\/info","name":"Info","slug":"info","taxonomy":"category","parent":0,"meta":[],"_links":{"self":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/1812"}],"collection":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories"}],"about":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/taxonomies\/category"}],"wp:post_type":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/posts?categories=1812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":17,"count":3,"description":"","link":"https:\/\/kisahmuslim.com\/category\/kisah-nyata\/kisah-birrul-walidain","name":"Kisah Birrul Walidain","slug":"kisah-birrul-walidain","taxonomy":"category","parent":29,"meta":[],"_links":{"self":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/17"}],"collection":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories"}],"about":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/taxonomies\/category"}],"up":[{"embeddable":true,"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/29"}],"wp:post_type":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/posts?categories=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":25,"count":31,"description":"","link":"https:\/\/kisahmuslim.com\/category\/kisah-nyata\/kisah-hidayah-islam","name":"Kisah Hidayah Islam","slug":"kisah-hidayah-islam","taxonomy":"category","parent":29,"meta":[],"_links":{"self":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/25"}],"collection":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories"}],"about":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/taxonomies\/category"}],"up":[{"embeddable":true,"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/29"}],"wp:post_type":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/posts?categories=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":16,"count":49,"description":"","link":"https:\/\/kisahmuslim.com\/category\/kisah-nyata\/kisah-kaum-durhaka","name":"Kisah Kaum Durhaka","slug":"kisah-kaum-durhaka","taxonomy":"category","parent":29,"meta":[],"_links":{"self":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/16"}],"collection":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories"}],"about":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/taxonomies\/category"}],"up":[{"embeddable":true,"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/29"}],"wp:post_type":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/posts?categories=1
2019-09-07 12:01:27.942 11246-11246/com.kursusarabic.arabicforfun D/postFrag: Object at 0{"id":12,"count":53,"description":"","link":"https:\/\/kisahmuslim.com\/category\/kisah-nyata\/biografi-ulama","name":"Biografi Ulama","slug":"biografi-ulama","taxonomy":"category","parent":29,"meta":[],"_links":{"self":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/12"}],"collection":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories"}],"about":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/taxonomies\/category"}],"up":[{"embeddable":true,"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/categories\/29"}],"wp:post_type":[{"href":"https:\/\/kisahmuslim.com\/wp-json\/wp\/v2\/posts?categories=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}
2019-09-07 12:01:27.942 11246-11246/com.kursusarabic.arabicforfun D/postFrag: https://kisahmuslim.com/wp-json/wp/v2/posts?categories=12
You cannot call network requests in loop, Use async processing or
Retrofit & RxJava multiple requests complete
and after updating typeForPosts, there is no need to setAdapter on recyclerview just call adapter.notifyDataSetChanged()
Related
How to change targetSdkVersion
I am having an issue with target targetSdkVersion.I want to move from 27 to 29 but when change to sdk 29 the app runs but does not display videos.But it displays the videos when it is sdk 27 or less. Please can someone help me fix this. /** * A simple {#link Fragment} subclass. */ public class ChannelFragment extends Fragment { private static String GOOGLE_YOUTUBE_API_KEY = "AIzaSyBJQYpQRTzM5wuuhMUxmP7rvP3lbMGtUZ8";//here you should use your api key for testing purpose you can use this api also private static String CHANNEL_ID = "UCB_ZwuWCAuB7y0B93qvnkWw"; //here you should use your channel id for testing purpose you can use this api also private static String CHANNLE_GET_URL = "https://www.googleapis.com/youtube/v3/search?part=snippet&order=date&channelId=" + CHANNEL_ID + "&maxResults=50&key=" + GOOGLE_YOUTUBE_API_KEY + ""; private RecyclerView mList_videos = null; private VideoPostAdapter adapter = null; private ArrayList<YoutubeDataModel> mListData = new ArrayList<>(); public ChannelFragment() { // Required empty public constructor } #Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_channel, container, false); mList_videos = (RecyclerView) view.findViewById(R.id.mList_videos); initList(mListData); new RequestYoutubeAPI().execute(); return view; } private void initList(ArrayList<YoutubeDataModel> mListData) { mList_videos.setLayoutManager(new LinearLayoutManager(getActivity())); adapter = new VideoPostAdapter(getActivity(), mListData, new OnItemClickListener() { #Override public void onItemClick(YoutubeDataModel item) { YoutubeDataModel youtubeDataModel = item; Intent intent = new Intent(getActivity(), DetailsActivity.class); intent.putExtra(YoutubeDataModel.class.toString(), youtubeDataModel); startActivity(intent); } }); mList_videos.setAdapter(adapter); } //create an asynctask to get all the data from youtube private class RequestYoutubeAPI extends AsyncTask<Void, String, String> { #Override protected void onPreExecute() { super.onPreExecute(); } #Override protected String doInBackground(Void... params) { DefaultHttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(CHANNLE_GET_URL); Log.e("URL", CHANNLE_GET_URL); try { HttpResponse response = httpClient.execute(httpGet); HttpEntity httpEntity = response.getEntity(); String json = EntityUtils.toString(httpEntity); return json; } catch (IOException e) { e.printStackTrace(); } return null; } #Override protected void onPostExecute(String response) { super.onPostExecute(response); if (response != null) { try { JSONObject jsonObject = new JSONObject(response); Log.e("response", jsonObject.toString()); mListData = parseVideoListFromResponse(jsonObject); initList(mListData); } catch (JSONException e) { e.printStackTrace(); } } } } public ArrayList<YoutubeDataModel> parseVideoListFromResponse(JSONObject jsonObject) { ArrayList<YoutubeDataModel> mList = new ArrayList<>(); if (jsonObject.has("items")) { try { JSONArray jsonArray = jsonObject.getJSONArray("items"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject json = jsonArray.getJSONObject(i); if (json.has("id")) { JSONObject jsonID = json.getJSONObject("id"); String video_id = ""; if (jsonID.has("videoId")) { video_id = jsonID.getString("videoId"); } if (jsonID.has("kind")) { if (jsonID.getString("kind").equals("youtube#video")) { YoutubeDataModel youtubeObject = new YoutubeDataModel(); JSONObject jsonSnippet = json.getJSONObject("snippet"); String title = jsonSnippet.getString("title"); String description = jsonSnippet.getString("description"); String publishedAt = jsonSnippet.getString("publishedAt"); String thumbnail = jsonSnippet.getJSONObject("thumbnails").getJSONObject("high").getString("url"); youtubeObject.setTitle(title); youtubeObject.setDescription(description); youtubeObject.setPublishedAt(publishedAt); youtubeObject.setThumbnail(thumbnail); youtubeObject.setVideo_id(video_id); mList.add(youtubeObject); } } } } } catch (JSONException e) { e.printStackTrace(); } } return mList; } }
Parse JSON array data in android using Volley
JSON data format: I am trying to fetch this array json data but not getting it. [{"Items":"Chicken Burger","Price":"250","Quantity":"2"}, {"Items":"Hamburger","Price":"230","Quantity":"3"}] MyCartActivity class: I tried using Volley and I am now getting that JSONArray cannot be converted to JSONObject error. Can you mention where to change so that I can get my data? final JsonObjectRequest request = new JsonObjectRequest (Request.Method.POST, fetchurl, null, new Response.Listener<JSONObject>() { #Override public void onResponse(JSONObject response) { try { JSONArray jsonArray = response.getJSONArray(""); for (int i=0; i < jsonArray.length(); i++){ JSONObject object = jsonArray.getJSONObject(i); String Price = object.getString("Price"); String Name = object.getString("Items"); String Quantity = object.getString("Quantity"); adapter = new CartAdapter(MyCartActivity.this, list); list.add(new CartPojo(Price, Name, Quantity)); adapter.notifyDataSetChanged(); progressbar.setVisibility(View.GONE); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { #Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }); requestQueue.add(request); } Adapter class: public CartAdapter(Activity activity, List datalist) { this.activity = activity; this.datalist = datalist; } #Override public int getCount() { return datalist.size(); } #Override public Object getItem(int position) { return datalist.get(position); } #Override public long getItemId(int position) { return position; } #Override public View getView(int position, View convertView, ViewGroup parent) { if (inflater == null) inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (convertView == null) convertView = inflater.inflate(R.layout.cart_item_layout, null); TextView ItemName = convertView.findViewById(R.id.item_name); TextView Price = convertView.findViewById(R.id.item_price); TextView Quantity = convertView.findViewById(R.id.items_quantity); CartPojo pojo = datalist.get(position); ItemName.setText(String.valueOf(pojo.getName())); Price.setText(String.valueOf(pojo.getPrice())); Quantity.setText(String.valueOf(pojo.getQuantity())); return convertView; } Please provide me some solutions....
The response can't be parsed into JSONObject, because its not that, but a JSONArray. You can send a simple StringRequest and then parse the response string into an JSONArray using JSONArray(response) constructor. StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { #Override public void onResponse(String response) { JSONArray arr = new JSONArray(response); } }, new Response.ErrorListener() { #Override public void onErrorResponse(VolleyError error) { } }); Or use the JsonArrayRequest. Here's an example.
android volley JsonArrayRequest return nothing
in the below code my arrayList will be empty after JsonArrayRequest block. I set break point at this line: "int size = arrayList.size();" every thing is OK until "while" loop finishes. after that allayList is empty. JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, json_url,(String) null, new Response.Listener<JSONArray>() { #Override public void onResponse(JSONArray response) { int count=0; int responseLength = response.length(); responseLength--; while (count<responseLength) { try { JSONObject jsonObject = response.getJSONObject(count); Contact contact = new Contact(jsonObject.getString("title"), jsonObject.getString("email"), jsonObject.getString("description"), jsonObject.getString("date"), jsonObject.getBoolean("status")); arrayList.add(contact); int size = arrayList.size(); count++; } catch (JSONException e) { e.printStackTrace(); } } int size = arrayList.size(); } }, new Response.ErrorListener() { #Override public void onErrorResponse(VolleyError error) { Toast.makeText(context,"Error....",Toast.LENGTH_SHORT).show(); error.printStackTrace(); } } ); int size = arrayList.size(); VolleySingleton.getmInstance(context).addToRequestQueue(jsonArrayRequest); return arrayList;
I will show what i did using CallBack interface: in onCreate() method: recyclerView = (RecyclerView) findViewById(R.id.recyclerview); recyclerView.setHasFixedSize(true); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(linearLayoutManager); BackgroundTask backgroundTask = new BackgroundTask(this); backgroundTask.getContacts(new BackgroundTask.arrayListCallBack() { #Override public void onSuccess(ArrayList<Contact> contacts) { RecyclerView.Adapter adapter = new RecyclerAdapter(MainActivity.this, contacts); recyclerView.setAdapter(adapter); } #Override public void onFail(String error) { Toast.makeText(MainActivity.this, error, Toast.LENGTH_LONG).show(); } }); and in the BackgroundTask class: JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST, server_url, new Response.Listener<JSONArray>() { #Override public void onResponse(JSONArray response) { int count = 0; while (count < response.length()) { try { JSONObject jsonObject = response.getJSONObject(count); Contact contact = new Contact(jsonObject.getString("name"), jsonObject.getString("section")); contacts.add(contact); Log.d("process request", "....."+jsonObject.getString("name")); count++; } catch (JSONException e) { e.printStackTrace(); Toast.makeText(context, e.getMessage()+"\nError in Response", Toast.LENGTH_LONG).show(); } callBack.onSuccess(contacts); } } }, new Response.ErrorListener() { #Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); Toast.makeText(context, error.getMessage()+"\nError in Connection", Toast.LENGTH_LONG).show(); callBack.onFail("There's error ..."); } }); MySingleton.getInstance(context).addToRequestQueue(jsonArrayRequest); } public interface arrayListCallBack { void onSuccess(ArrayList<Contact> contacts); void onFail(String error); }
Using one progressDialog in two or more android stringRequest Volley
In my code I have to stringRequest Volley that works just fine, but now I want to use a progressDialog. I have create 1 method to put the progressDialog like this private void showProgress(String message) { progressDialog = new ProgressDialog(this); progressDialog.setTitle("Loading Data " + message); progressDialog.setMessage("Please wait..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setCancelable(false); progressDialog.show(); } and I have these 2 stringRequest like this: private void fetchDataPoMurni(final String tipe, final String user_id, final String last_date) { showProgress("Murni"); String tag_string_req = "Request Po Dapat"; StringRequest stringRequest = new StringRequest( Request.Method.POST, AppConfig.URL_FETCH_REPORT_PO, new Response.Listener<String>() { #Override public void onResponse(String response) { try { JSONObject jsonObject = new JSONObject(response); boolean error = jsonObject.getBoolean("error"); if(!error) { JSONArray resultPo = jsonObject.getJSONArray("result"); for(int i = 0; i < resultPo.length(); i++) { JSONObject result = (JSONObject) resultPo.get(i); String _cabang_id = result.getString("branch_id"); String _area_id = result.getString("areacode"); String _cabang = result.getString("branch_name"); Log.d("FETCHING DATA MURNI: ", _cabang_id + " " + _area_id + " " + _cabang); dataBaseHelper.insertDataPoMurni(new PoModel(_cabang_id.trim(), _area_id.trim(), _cabang.trim())); } } else { String errorMsg = jsonObject.getString("result"); showAlertDialog(errorMsg); } } catch (JSONException e) { showAlertDialog(e.getMessage()); } if (progressDialog != null) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } } } }, new Response.ErrorListener() { #Override public void onErrorResponse(VolleyError volleyError) { showAlertDialog(volleyError.getMessage()); if (progressDialog != null) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } } } }) { #Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("tipe", tipe); params.put("uid", user_id); params.put("last_date", last_date); return params; } }; AppController.getInstance().addToRequestQueue(stringRequest, tag_string_req); } and the other request: private void fetchDataPoDapat(final String tipe, final String user_id, final String last_date) { showProgress("Dapat"); String tag_string_req = "Request Po Dapat"; StringRequest stringRequest = new StringRequest( Request.Method.POST, AppConfig.URL_FETCH_REPORT_PO, new Response.Listener<String>() { #Override public void onResponse(String response) { try { JSONObject jsonObject = new JSONObject(response); boolean error = jsonObject.getBoolean("error"); if(!error) { JSONArray resultPo = jsonObject.getJSONArray("result"); for(int i = 0; i < resultPo.length(); i++) { JSONObject result = (JSONObject) resultPo.get(i); String _cabang_id = result.getString("branch_id"); String _area_id = result.getString("areacode"); String _cabang = result.getString("branch_name"); Log.d("FETCHING DATA DAPAT : ", _cabang_id + " " + _area_id + " " + _cabang); dataBaseHelper.insertDataPoDapat(new PoModel(_cabang_id.trim(), _area_id.trim(), _cabang.trim())); } } else { String errorMsg = jsonObject.getString("result"); showAlertDialog(errorMsg); } } catch (JSONException e) { showAlertDialog(e.getMessage()); } if (progressDialog != null) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } } } }, new Response.ErrorListener() { #Override public void onErrorResponse(VolleyError volleyError) { showAlertDialog(volleyError.getMessage()); if (progressDialog != null) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } } } }) { #Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("tipe", tipe); params.put("uid", user_id); params.put("last_date", last_date); return params; } }; AppController.getInstance().addToRequestQueue(stringRequest, tag_string_req); } I execute the 2 request through a method like this: private void exeRequest() { fetchDataPoMurni(valuea,value2,value3); fetchDataPoDapat(valueb,value2,value3); } the progressDialog is showing, and the message is changing, but the problem is when reach the second request the progressDialog doesn't want to dismiss. Whats wrong with my code above, and how to achieve what I want?
private void showProgress(String message) { progressDialog=null;// Initialize to null progressDialog = new ProgressDialog(this); progressDialog.setTitle("Loading Data " + message); progressDialog.setMessage("Please wait..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setCancelable(false); progressDialog.show(); } Try this .. Initialize all instances of the progressDialog to null as soon as you create a new progress dialog
java.lang.NullPointerException in textview inside asyncTask
If I use the following code, I will have no error, but there will be a freeze time. #Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); setContentView(R.layout.profilepic); initialize(); Bundle bundle = getIntent().getExtras(); email = bundle.getString("Email"); ArrayList<NameValuePair> postParameters; String response = null; postParameters = new ArrayList<NameValuePair>(); postParameters.add(new BasicNameValuePair("emaillog", email)); try { response = CustomHttpClient.executeHttpPost("http://whatstherex.info/checkU.php", postParameters); res = response.toString(); res = res.replaceAll("null", ""); username = res.toString(); tvProfilePic.setText("Hi " + username + ", you are encourage to add a profile picture."); }catch(Exception e){ res = e.toString(); tvProfilePic.setText(res); } } But if I use this code with asyncTask and progressDialog like this: #Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); setContentView(R.layout.profilepic); initialize(); getUsername(); } private AsyncTask<String, Void, String> task; public void getUsername(){ Bundle bundle = getIntent().getExtras(); email = bundle.getString("Email"); task = new AsyncTask<String, Void, String>() { ProgressDialog dialog; ArrayList<NameValuePair> postParameters; String response = null; #Override protected void onPreExecute() { // ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); postParameters.add(new BasicNameValuePair("emaillog", email)); dialog = new ProgressDialog(Profilepic.this, ProgressDialog.STYLE_SPINNER); dialog.setMessage("Loading Data..."); dialog.show(); } #Override protected String doInBackground(String... params) { // try { response = CustomHttpClient.executeHttpPost("http://whatstherex.info/checkU.php", postParameters); res = response.toString(); res = res.replaceAll("null", ""); username = res.toString(); return username; }catch(Exception e){ res = e.toString(); return res; } } #Override protected void onPostExecute(String result) { if(result.length()< 25){ username = result; tvProfilePic.setText("Hi " + result + ", you are encourage to add a profile picture."); dialog.dismiss(); }else{ tvProfilePic.setText(result); dialog.dismiss(); } } }; task.execute(); } I get java.lang.NullPointerException in the textview. What's the problem? Can anyone help me how to resolve this issue with NullPointerException appearing?
I see that you use tvProfilePic but I don't see where you define it. In case you are not defining it, it should be done in a similar way as tvProfilePic = findViewById(R.id.profile_pic) Are you doing this? Note that 'profile_pic' is the name in the layout XML document.
You are using tvProfilePic as a textview but i can't see where you defined it. if you are not defining it then define it using something like tvProfilePic = findViewById(R.id.profile_pic) You are getting nullpointerexception because your tvProfilePic is null