ListView Empty When Poputaing - android

I am trying to add items from database onto a listView, when I use System.out.println I see values but upon trying to populate them onto a custom listview returns no data in the listview.
When launching the app, I get a single row of listview item but of course it's empty.
public class MainActivity extends Activity implements AdapterView.OnItemClickListener {
String jsonResult;
String url = "http://www.mywebsite/query.php";
ListView list;
List<String> arrName;
List<String> arrNumber;
List<String> arrUsername;
List<String> arrStatus;
String name;
String number;
String username;
String status;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
arrName = Arrays.asList(name);
arrNumber = Arrays.asList(number);
arrUsername = Arrays.asList(username);
arrStatus = Arrays.asList(status);
list = (ListView) findViewById(R.id.listContacts);
ConatctsAdapter adapter = new ConatctsAdapter(this, arrName, arrNumber, arrUsername, arrStatus);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
accessWebService();
}
#Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { //SINGLE CLICK
// TODO Auto-generated method stub
}
// Async Task to access the web
private class JsonReadTask extends AsyncTask<String, Void, String> {
#Override
protected String doInBackground(String... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(params[0]);
try {
HttpResponse response = httpclient.execute(httppost);
jsonResult = inputStreamToString(
response.getEntity().getContent()).toString();
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private StringBuilder inputStreamToString(InputStream is) {
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((rLine = rd.readLine()) != null) {
answer.append(rLine);
}
}
catch (IOException e) {
// e.printStackTrace();
Toast.makeText(getApplicationContext(),
"Error..." + e.toString(), Toast.LENGTH_LONG).show();
}
return answer;
}
#Override
protected void onPostExecute(String result) {
ListDrwaer();
}
}// end async task
public void accessWebService() {
JsonReadTask task = new JsonReadTask();
// passes values for the urls string array
task.execute(new String[] { url });
}
// build hash set for list view
public void ListDrwaer() {
try {
JSONObject jsonResponse = new JSONObject(jsonResult);
JSONArray jsonMainNode = jsonResponse.optJSONArray("main");
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
name = jsonChildNode.getString("Name");
number = jsonChildNode.getString("Number");
username = jsonChildNode.getString("Username");
status = jsonChildNode.getString("Status");
System.out.println("Name: "+name);
System.out.println("Number: "+number);
System.out.println("Username: "+username);
System.out.println("Status: "+status);
}
} catch (JSONException e) {
Log.i("Error Log: ", e.toString());
System.out.println("Error: "+e.toString());
Toast.makeText(getApplicationContext(), "Error" + e.toString(),
Toast.LENGTH_SHORT).show();
}
ContactsAdapter adapter = new ContactsAdapter(this, arrName, arrNumber, arrUsername, arrStatus);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
}
class ContactsAdapter extends ArrayAdapter<String>
{
Context context;
List<String> Name;
List<String> Number;
List<String> Username;
List<String> Status;
ContactsAdapter(Context c, List<String> Name, List<String> Number, List<String> Username, List<String> Status)
{
super(c, R.layout.activity_contacts_single, R.id.textName, Name);
this.context=c;
this.Name=Name;
this.Number=Number;
this.Username=Username;
this.Status=Status;
}
#Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row=convertView;
if(row==null)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.activity_contacts_single, parent, false);
}
TextView txtName = (TextView) row.findViewById(R.id.textName);
TextView txtNumber = (TextView) row.findViewById(R.id.textNumber);
TextView txtUsername = (TextView) row.findViewById(R.id.textUsername);
TextView txtStatus = (TextView) row.findViewById(R.id.textStatus);
txtName.setText(Name.get(position));
txtNumber.setText(Number.get(position));
txtUsername.setText(Username.get(position));
txtStatus.setText(Status.get(position));
return row;
}
}
}

It's because you haven't add those items into your lists, Change this part of your code:
try {
JSONObject jsonResponse = new JSONObject(jsonResult);
JSONArray jsonMainNode = jsonResponse.optJSONArray("main");
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
name = jsonChildNode.getString("Name");
number = jsonChildNode.getString("Number");
username = jsonChildNode.getString("Username");
status = jsonChildNode.getString("Status");
//add this part to your code
arrName.add(name);
arrNumber.add(number);
arrUsername.add(username);
arrStatus.add(status);
System.out.println("Name: "+name);
System.out.println("Number: "+number);
System.out.println("Username: "+username);
System.out.println("Status: "+status);
}
} catch (JSONException e) {
Log.i("Error Log: ", e.toString());
System.out.println("Error: "+e.toString());
Toast.makeText(getApplicationContext(), "Error" + e.toString(),
Toast.LENGTH_SHORT).show();
}
ContactsAdapter adapter = new ContactsAdapter(this, arrName, arrNumber, arrUsername, arrStatus);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
}
for your second problem I think you can change your code this way:
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
//arrName = Arrays.asList(name);
//arrNumber = Arrays.asList(number);
//arrUsername = Arrays.asList(username);
//arrStatus = Arrays.asList(status);
arrName = new ArrayList<String>();
arrNumber =new ArrayList<String>();
arrUsername =new ArrayList<String>();
arrStatus =new ArrayList<String>();
list = (ListView) findViewById(R.id.listContacts);
ConatctsAdapter adapter = new ConatctsAdapter(this, arrName, arrNumber, arrUsername, arrStatus);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
accessWebService();
}

Related

How to show data JSON in Listview Android based on the same key JSON [duplicate]

I am new to android and java.Recently I am having problem with displaying fetched json data into listview using baseadapter.
At first I have used this code
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new TheTask().execute();
}
class TheTask extends AsyncTask<Void,Void,String>
{
#Override
protected String doInBackground(Void... params) {
String str = null;
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
String response = result.toString();
try {
ArrayList<String> stringArray = new ArrayList<String>();
JSONArray new_array = new JSONArray(response);
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
stringArray.add(jsonObject.getString("title").toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<String> (MainActivity.this,R.layout.test_tuh,stringArray);
ListView list= (ListView) findViewById(R.id.listView1);
list.setAdapter(adapter);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//tv.setText("error2");
}
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
This code displays fetched json data sucessfully. But it only displays only one row. I need more than one (two) rows in listview. So I have tried this code
and it does not work, it shows a blank screen .
My code is below,
class TheTask extends AsyncTask<Void,Void,String>
{
#Override
protected String doInBackground(Void... params) {
String str = null;
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
String response = result.toString();
try {
arrayList=new ArrayList<get_set>();
ArrayList<String> stringArray = new ArrayList<String>();
JSONArray new_array = new JSONArray(response);
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
stringArray.add(jsonObject.getString("title").toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}
ListView listView;
adap= new BaseAdapter() {
LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
#Override
public View getView(int position, View view, ViewGroup viewgroup) {
if (view==null) {
view=inflater.inflate(R.layout.bsdi, null);
}
TextView title_tuh=(TextView) view.findViewById(R.id.title1);
TextView notice_tuh=(TextView) view.findViewById(R.id.notice1);
title_tuh.setText(arrayList.get(position).getTitle());
notice_tuh=.setText(arrayList.get(position).getNotice());
return view;
}
#Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
#Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arrayList.get(position);
}
#Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList.size();
}
};
listView=(ListView) findViewById(R.id.listView1);
listView.setAdapter(adap);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//tv.setText("error2");
}
}
As far I am realizing that , the problem is here
ArrayList<String> stringArray = new ArrayList<String>();
JSONArray new_array = new JSONArray(response);
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
stringArray.add(jsonObject.getString("title").toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}
As far I am guesing that extracted json data is storing in stringArray but its not used later. If I try to use it like this , then I get error
title_tuh.setText(stringArray .get(position).getTitle());
notice_tuh=.setText(stringArray .get(position).getNotice());
If I try to not to use
ArrayList stringArray = new ArrayList();
and use
arrayList=new ArrayList(); instead , like this then I also get error.
arrayList=new ArrayList<get_set>();
JSONArray new_array = new JSONArray(response);
//JSONArray jsonArray = new JSONArray();
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
arrayList.add(jsonObject.getString("title").toString());
// String in = mInflater.inflate(R.layout.custom_row_view, null);
}
catch (JSONException e) {
e.printStackTrace();
}
}
I can not finding out how to solve this problem.I have seen many online tutorials but those was not helpful for me. Please help me.
First u need t create row_listitem.xml file like:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:background="#drawable/list_selector"
android:orientation="vertical"
android:padding="5dp" >
<ImageView
android:id="#+id/iv_icon_social"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerVertical="true"
android:background="#drawable/image_border"
android:src="#drawable/sms_t"
android:visibility="gone" />
<LinearLayout
android:id="#+id/thumbnail"
android:layout_width="fill_parent"
android:layout_height="85dp"
android:layout_marginRight="50dp"
android:layout_marginTop="0dp"
android:layout_toRightOf="#+id/iv_icon_social"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="5dip"
android:visibility="visible" >
<TextView
android:id="#+id/txt_ttlsm_row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="Sample text"
android:textSize="18dp"
android:textStyle="bold" />
<TextView
android:id="#+id/txt_ttlcontact_row2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="0dp"
android:layout_marginTop="3dp"
android:paddingLeft="10dp"
android:maxEms="20"
android:maxLines="2"
android:singleLine="false"
android:ellipsize="end"
android:text="Sample text2"
android:textColor="#808080"
android:textSize="15dp"
android:textStyle="normal"
android:visibility="visible" />
</LinearLayout>
</RelativeLayout>
Now, u need to create Custom BaseAdapter like:
public class BaseAdapter2 extends BaseAdapter {
private Activity activity;
// private ArrayList<HashMap<String, String>> data;
private static ArrayList title,notice;
private static LayoutInflater inflater = null;
public BaseAdapter2(Activity a, ArrayList b, ArrayList bod) {
activity = a;
this.title = b;
this.notice=bod;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return title.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.row_listitem, null);
TextView title2 = (TextView) vi.findViewById(R.id.txt_ttlsm_row); // title
String song = title.get(position).toString();
title2.setText(song);
TextView title22 = (TextView) vi.findViewById(R.id.txt_ttlcontact_row2); // notice
String song2 = notice.get(position).toString();
title22.setText(song2);
return vi;
}
}
Now, u can set up your main activity like:
public class MainActivity extends Activity {
ArrayList<String> title_array = new ArrayList<String>();
ArrayList<String> notice_array = new ArrayList<String>();
ListView list;
BaseAdapter2 adapter;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.listView1);
new TheTask().execute();
}
class TheTask extends AsyncTask<Void, Void, String> {
#Override
protected String doInBackground(Void... params) {
String str = null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
String response = result.toString();
try {
JSONArray new_array = new JSONArray(response);
for (int i = 0, count = new_array.length(); i < count; i++) {
try {
JSONObject jsonObject = new_array.getJSONObject(i);
title_array.add(jsonObject.getString("title").toString());
notice_array.add(jsonObject.getString("notice").toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
adapter = new BaseAdapter2(MainActivity.this, title_array, notice_array);
list.setAdapter(adapter);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// tv.setText("error2");
}
}
}
}
#Allen Chun , actually its not in my mind currently that what I have changed in my code to run my code perfectly. But I am sharing all my codes which are working perfectly.
Its my layout code,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="#+id/fsr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Notice Board"
android:textSize="20px" />
<TextView
android:id="#+id/err_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:gravity="center" />
<ListView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="#+id/list_notice2"
android:layout_gravity="center" />
</LinearLayout>
This is my custom listview layout codes,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="#+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:paddingTop="10dp"
android:layout_gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium" />
/>
<TextView
android:id="#+id/notice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small Text"
android:paddingTop="5dp"
android:layout_gravity="center"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
its my activity named "NoticeBoard" .
public class NoticeBoard extends Activity {
ArrayList<String> title_array = new ArrayList<String>();
ArrayList<String> notice_array = new ArrayList<String>();
ListView list;
base_adapter3 adapter;
TextView f,msg;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_notice);
list = (ListView) findViewById(R.id.list_notice2);
msg=(TextView) findViewById(R.id.err_msg);
new test_ays().execute();
}
class test_ays extends AsyncTask<Void, Void, String> {
#Override
protected String doInBackground(Void... params) {
String str = null ;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result!=null) // add this
{
String response = result.toString();
try {
JSONArray new_array = new JSONArray(response);
for (int i = 0, count = new_array.length(); i < count; i++) {
try {
JSONObject jsonObject = new_array.getJSONObject(i);
title_array.add(jsonObject.getString("title").toString());
notice_array.add(jsonObject.getString("notice").toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
adapter = new base_adapter3(NoticeBoard.this, title_array, notice_array);
list.setAdapter(adapter);
// f=(TextView) findViewById(R.id.textTuh);
// f.setText(title_array);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// tv.setText("error2");
}
}
else{
msg.setText("You need a working data connection...");
}
}
}
}
And its my custom baseadapter codes,
public class base_adapter2 extends BaseAdapter {
private Activity activity;
//private ArrayList<HashMap<String, String>> data;
private static ArrayList title,notice;
private static LayoutInflater inflater = null;
public base_adapter2(Activity a, ArrayList b) {
activity = a;
this.title = b;
// this.notice=bod;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return title.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.bsdi_adapter, null);
TextView title2 = (TextView) vi.findViewById(R.id.txt1); // title
String song = title.get(position).toString();
title2.setText(song);
return vi;
}
}
In this example, I am connecting to Twitters public timeline JSON url.
package net.inchoo.demo.andy1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class HomeActivity extends ListActivity {
/** Called when the activity is first created. */
#SuppressWarnings({ "rawtypes", "unchecked" })
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, this.fetchTwitterPublicTimeline()));
}
public ArrayList<String> fetchTwitterPublicTimeline()
{
ArrayList<String> listItems = new ArrayList<String>();
try {
URL twitter = new URL(
"http://twitter.com/statuses/public_timeline.json");
URLConnection tc = twitter.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
tc.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
JSONArray ja = new JSONArray(line);
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = (JSONObject) ja.get(i);
listItems.add(jo.getString("text"));
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return listItems;
}
}
Please direct your attention on the listItems.add(jo.getString(“text”)); line. This is the part that I am grabbing a “text” attribute/property of single JSON object. To get a more “visual” picture of all available attributes/properties you might want to take a look at the XML version of twitters public timeline. This way you will get nice colored XML in your browser, where you can see all available attributes.
Link: http://inchoo.net/dev-talk/android-development/simple-android-json-parsing-example-with-output-into-listactivity/
Json parser:
public class jparser {
static InputStream istream = null;
static JSONObject jObj = null;
//static JSONArray jarray=null;
static String json = "";
//static JSONArray jarray = null;
// constructor
public jparser() {
}
public JSONObject getJFromUrl(String url) {
// Making HTTP request
//try {
// defaultHttpClient
StringBuilder builder = new StringBuilder();
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
/*HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
istream = httpEntity.getContent();*/
try{
HttpResponse response = httpClient.execute(httpPost);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 400)
{
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null)
{
builder.append(line);
}
}
else
{
Log.e("==>", "Failed to download file");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(istream, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
istream.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
// Parse String to JSON object
/*try {
jarray = new JSONArray( builder.toString());
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON Object
return jarray;
}*/
}
}
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
#SuppressLint("NewApi")
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
// check for request method
if(method == "POST"){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
<h1>Model</h1>
public class WorkModel {
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImagename() {
return imagename;
}
public void setImagename(String imagename) {
this.imagename = imagename;
}
String id,name,imagename;
public WorkModel(String s1,String s2,String s3)
{
this.id=s1;
name=s2;
imagename=s3;
}
}
<h1>listview fill</h1>
public class Work_in_process extends Fragment {
//////////////jsonparser implement
JSONParser jsonparser=new JSONParser();
JSONArray json_users=null;
JSONObject json;
/////////
ListView lst;
ArrayList<WorkModel> data=new ArrayList<WorkModel>();
WorkAdapter adapter;
Context con;
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_work_in_process, container, false);
con=this.getActivity();
lst=(ListView)rootView.findViewById(R.id.work_listview);
new work_process().execute();
// Inflate the layout for this fragment
return rootView;
}
class work_process extends AsyncTask<String,String,String>
{
public Dialog pDialog;
#Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(con);
pDialog.setMessage("Loading... Please wait...");
pDialog.setIndeterminate(true);
pDialog.setCancelable(true);
pDialog.show();
}
#Override
protected String doInBackground(String... args) {
data.clear();
List<NameValuePair> params = new ArrayList<NameValuePair>();
json = jsonparser.makeHttpRequest("your url","POST", params);
try {
int success = json.getInt("status");
if (success == 0)
{
return "kbc";
}
else
{
json_users = json.getJSONArray("result");
// looping through All Products
for (int i = 0; i < json_users.length(); i++) {
JSONObject c = json_users.getJSONObject(i);
String t1 = c.getString("id");
String t2 = c.getString("work_title");
String t3 = c.getString("image_path");
WorkModel da=new WorkModel(t1,t2,t3);
data.add(da);
}
return "abc";
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
#Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
pDialog.dismiss();
if(s.equals("abc"))
{
adapter = new WorkAdapter(con, data);
lst.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
else
{
}
}
}
}
<h1>Adapter fill listview</h1>
public class WorkAdapter extends BaseAdapter {
private LayoutInflater inflater1=null;
private static String string=null;
ArrayList<WorkModel> data=null;
Context activity;
DisplayImageOptions options;
protected ImageLoader imageLoader = ImageLoader.getInstance();
public WorkAdapter(Context act,ArrayList<WorkModel> da)
{
activity=act;
data=da;
}
#Override
public int getCount() {
return data.size();
}
#Override
public Object getItem(int position) {
return position;
}
#Override
public long getItemId(int position) {
return position;
}
#Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
{
inflater1=(LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi=inflater1.inflate(R.layout.list_work,null);
}
TextView name;
ImageView img;
name=(TextView)vi.findViewById(R.id.list_work_name);
img= (ImageView)vi.findViewById(R.id.list_work_img);
WorkModel da=new WorkModel(string,string,string);
da=data.get(position);
final String p1,p2,p3;
p1=da.getId();
p2=da.getName();
p3=da.getImagename();
name.setText(p2);
imageLoader.init(ImageLoaderConfiguration.createDefault(activity));
final String imgpath=""+p3;
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.wp_loading)
.showImageForEmptyUri(R.drawable.wp_loading)
.showImageOnFail(R.drawable.wp_loading)
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
imageLoader.displayImage(imgpath, img,options);
img.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
DisplayImageOptions options;
final ImageLoader imageLoader = ImageLoader.getInstance();
final Dialog emailDialog =new Dialog(activity, android.R.style.Theme_DeviceDefault);
emailDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
emailDialog.setCancelable(true);
emailDialog.setContentView(R.layout.zoom_imge);
ImageView image = (ImageView) emailDialog.findViewById(R.id.zoom_image_img);
emailDialog.show();
final String imgpath=""+p3;
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.wp_loading)
.showImageForEmptyUri(R.drawable.wp_loading)
.showImageOnFail(R.drawable.wp_loading)
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
imageLoader.displayImage(imgpath, image, options);
}
});
return vi;
}
}
Get schedule
public class GetSchedule extends Activity {
// JSON Node Names
private static final String TAG_SNO = "sno";
private static final String TAG_STNCODE = "stnCode";
private static final String TAG_STATION = "station";
// private static final String TAG_ROUTENO= "routeNo";
private static final String TAG_ARRIVALTIME = "arrivalTime";
private static final String TAG_DEPTIME = "depTime";
private JSONArray station = null;
private ListView list;
//private static String url = "http://railpnrapi.com/api/route/train/";
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_get_schedule);
try {
ArrayList<HashMap<String, String>> stnNamelist = new ArrayList<HashMap<String, String>>();
// Getting JSON Array
// JSONObject job = new JSONObject();
//JSONArray jArray = ModuleClass.trainScheduleJSONObject.getJSONArray("stnName");
JSONObject json_data = null;
station= ModuleClass.trainScheduleJSONObject.getJSONArray(TAG_STATION);
for (int i = 0; i < station.length(); i++) {
json_data = station.getJSONObject(i);
// JSONObject c = stnName.getJSONObject(0);
// Storing  JSON item in a Variable
String sno = json_data.getString(TAG_SNO);
String stnCode = json_data.getString(TAG_STNCODE);
// String distance= c.getString(TAG_DISTANCE);
// String routeNo = c.getString(TAG_ROUTENO);
String arrivalTime = json_data.getString(TAG_ARRIVALTIME);
String depTime = json_data.getString(TAG_DEPTIME);
// String haltTime = c.getString(TAG_HALTTIME);
// String tday= c.getString(TAG_TDAY);
// String remark = c.getString(TAG_REMARK);
// Adding value HashMap key => value
stnNamelist = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_SNO, sno);
map.put(TAG_STNCODE, stnCode);
map.put(TAG_DEPTIME, depTime);
map.put(TAG_ARRIVALTIME, arrivalTime);
// map.put(TAG_DEPTIME,depTime );
stnNamelist.add(map);
list = (ListView) findViewById(R.id.listView1);
final SimpleAdapter sd;
sd = new SimpleAdapter(this, stnNamelist, R.layout.activity_get_schedule,
new String[] { TAG_SNO, TAG_STNCODE, TAG_ARRIVALTIME, TAG_DEPTIME },
new int[] { R.id.textView1, R.id.textView2, R.id.textView3, R.id.textView4});
list.setAdapter(sd);
/*
* list.setOnItemClickListener(new
* AdapterView.OnItemClickListener() {
*
* #Override public void onItemClick(AdapterView<?> parent, View
* view, int position, long id) { Toast.makeText(
* MainActivity.this, "You Clicked at " +
* stnNamelist.get(+position).get( "name"), Toast.LENGTH_SHORT)
* .show(); } });
*/
}
// Set JSON Data in TextView
// uid.setText(id);
// name1.setText(name);
// email1.setText(email);
} catch (JSONException e) {
e.printStackTrace();
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.get_schedule, menu);
return true;
}
}
ListView from JSON data fetched using Retrofit2 service
JSON response
{
"results": [
{
"phone": "+9178XXXX66",
"name": "Olivia"
},
{
"phone": "+9178XXXX66",
"name": "Isla"
},
{
"phone": "+9178XXXX66",
"name": "Emily"
},
{
"phone": "+9178XXXX66",
"name": "Amelia"
},
{
"phone": "+9178XXXX66",
"name": "Sophia"
}],
"statusCode": "1",
"count": "2"
}
In MainActivity.java we will pass JSON data as ArrayList(dummyData)
customListAdapter = new CustomListAdapter(getApplicationContext(), dummyData);
listView = (ListView) findViewById(R.id.listShowJSONData);
listView.setAdapter(customListAdapter);
In custom BaseAdapter our
...
...
#Override
public MyModel getItem(int i) {
return this.users.get(i);
}
#Override
public long getItemId(int i) {
return i;
}
#Override
public View getView(final int i, View view, ViewGroup viewGroup) {
if(view==null)
{
view= LayoutInflater.from(c).inflate(R.layout.json_data_list,viewGroup,false);
}
TextView mUserDetails = (TextView) view.findViewById(R.id.userDetails);
TextView mUserStatus = (TextView) view.findViewById(R.id.userStatus);
Object getrow = this.users.get(i);
LinkedTreeMap<Object,Object> rowmap = (LinkedTreeMap) getrow;
String name = rowmap.get("name").toString();
String phone = rowmap.get("phone").toString();
mUserDetails.setText(name);
mUserStatus.setText(phone);
return view;
}
...
...
Here MyModel will be used as custom mapping model of response we will get from service
See link for complete code explanation

Unable to parse JSON data into Listview

im trying to parse data from SQL Database into Listview.
My PHP script is working because if i run it in the browser i get the content.
If im trying to get the data from my SQL Databse into the listview my app shows nothing.
Here is my MainActivity:
public class Locations extends AppCompatActivity implements AdapterView.OnItemClickListener {
ArrayList<productforloc> arrayList;
ListView lv;
private String TAG = Locations.class.getSimpleName();
private TextView addressField; //Add a new TextView to your activity_main to display the address
private LocationManager locationManager;
private String provider;
int i = 1;
private ProgressDialog pDialog;
String name;
// URL to get contacts JSON
private static String url = "Mylink";
ArrayList<HashMap<String, String>> contactList;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
Intent i = getIntent();
String cityname = i.getExtras().getString("cityname");
TextView city = (TextView) findViewById(R.id.ort);
city.setText(cityname);
pDialog = new ProgressDialog(Locations.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(true);
pDialog.show();
arrayList = new ArrayList<>();
lv = (ListView) findViewById(R.id.lv);
lv.setOnItemClickListener((AdapterView.OnItemClickListener) this);
runOnUiThread(new Runnable() {
#Override
public void run() {
new ReadJSON().execute(url);
}
});
final ImageButton filteropen = (ImageButton) findViewById(R.id.aufklaupen);
filteropen.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
RelativeLayout filter = (RelativeLayout) findViewById(R.id.filterloc);
filter.setVisibility(View.VISIBLE);
ImageButton filterclose = (ImageButton) findViewById(R.id.zuklappen);
filterclose.setVisibility(View.VISIBLE);
filteropen.setVisibility(View.INVISIBLE);
}
});
final ImageButton filterclose = (ImageButton) findViewById(R.id.zuklappen);
filterclose.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
RelativeLayout filter = (RelativeLayout) findViewById(R.id.filterloc);
filter.setVisibility(View.INVISIBLE);
ImageButton filteropen = (ImageButton) findViewById(R.id.aufklaupen);
filteropen.setVisibility(View.VISIBLE);
filterclose.setVisibility(View.INVISIBLE);
}
});
}
class ReadJSON extends AsyncTask<String,Integer,String> {
#Override
protected String doInBackground(String... params) {
return readURL(params[0]);
}
#Override
protected void onPostExecute(String content) {
try{
JSONObject jo = new JSONObject(content);
JSONArray ja = jo.getJSONArray("contacts");
for(int i=0;i<ja.length();i++){
JSONObject po = ja.getJSONObject(i);
arrayList.add(new productforloc(
po.getString("imageurl"),
po.getString("name"),
po.getString("street"),
po.getString("postalcode"),
po.getString("musicstyle"),
po.getString("musicsecond"),
po.getString("entry"),
po.getString("opening"),
po.getString("agegroup"),
po.getString("urlbtn"),
po.getString("Fsk"),
po.getString("city"),
po.getString("bg")
));
}
} catch (JSONException e) {
e.printStackTrace();
}
final CustomListAdapterforloc adapter = new CustomListAdapterforloc(getApplicationContext(),R.layout.model,arrayList);
lv.setAdapter(adapter);
if(pDialog.isShowing()){
pDialog.dismiss();
}
}
}
private String readURL(String url){
StringBuilder content = new StringBuilder();
try{
URL uri = new URL(url);
URLConnection urlConnection = uri.openConnection();
BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String line;
while((line = bufferedReader.readLine()) !=null){
content.append(line+"\n");
}
bufferedReader.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return content.toString();
}
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
productforloc pForloc = arrayList.get(position);
Intent intent = new Intent();
intent.setClass(this,DetailActivity.class);
intent.putExtra("name",pForloc.getName());
intent.putExtra("imageurl",pForloc.getImage());
intent.putExtra("street",pForloc.getStreet());
intent.putExtra("postalcode",pForloc.getPostalcode());
intent.putExtra("entry",pForloc.getEntry());
intent.putExtra("agegroup",pForloc.getAgegroup());
intent.putExtra("opening",pForloc.getOpening());
intent.putExtra("urlbtn",pForloc.getUrlbtn());
intent.putExtra("Fsk",pForloc.getFsk());
intent.putExtra("city",pForloc.getCity());
intent.putExtra("musicstyle",pForloc.getMusicstyle());
intent.putExtra("musicsecond",pForloc.getMusicsecond());
intent.putExtra("bg",pForloc.getBg());
startActivity(intent);
}
/**
* Async task class to get json by making HTTP call
}
*/
}
and here is my Customlistadapter Activity:
public class CustomListAdapterforloc extends ArrayAdapter<productforloc>{
ArrayList<productforloc> products;
Context context;
int resource;
public CustomListAdapterforloc(Context context, int resource, List<productforloc> products) {
super(context, resource, products);
this.products = (ArrayList<productforloc>) products;
this.context = context;
this.resource = resource;
}
#NonNull
#Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView== null){
LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.model,null,true);
}
productforloc product = getItem(position);
ImageView imageView = (ImageView) convertView.findViewById(R.id.imagelist);
Picasso.with(context).load(product.getImage()).into(imageView);
TextView txtName= (TextView) convertView.findViewById(R.id.namelist);
txtName.setText(product.getName());
return convertView;
}
}
i solved it using this code in my MAinActivity:
public class Locations extends AppCompatActivity {
private String TAG = Locations.class.getSimpleName();
private ProgressDialog pDialog;
private ListView lv;
// URL to get contacts JSON
private static String url = "http://partypeople.bplaced.net/loli.php";
ArrayList<HashMap<String, String>> contactList;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactList = new ArrayList<>();
lv = (ListView) findViewById(R.id.lv);
new GetContacts().execute();
}
/**
* Async task class to get json by making HTTP call
*/
private class GetContacts extends AsyncTask<Void, Void, Void> {
#Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(Locations.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
#Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONArray contacts = new JSONArray(jsonStr);
// Getting JSON Array node
// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("id");
String name = c.getString("name");
String email = c.getString("email");
String address = c.getString("address");
String gender = c.getString("gender");
// tmp hash map for single contact
HashMap<String, String> contact = new HashMap<>();
// adding each child node to HashMap key => value
contact.put("id", id);
contact.put("name", name);
contact.put("email", email);
// adding contact to contact list
contactList.add(contact);
}
} 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();
/**3
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
Locations.this, contactList,
R.layout.model, new String[]{"name", "email",
"mobile"}, new int[]{R.id.namelist,
});
lv.setAdapter(adapter);
}
}
and used in my CustomlistadapterActivity:
public class HttpHandler {
private static final String TAG = HttpHandler.class.getSimpleName();
public HttpHandler() {
}
public String makeServiceCall(String reqUrl) {
String response = null;
try {
URL url = new URL(reqUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
// read the response
InputStream in = new BufferedInputStream(conn.getInputStream());
response = convertStreamToString(in);
} catch (MalformedURLException e) {
Log.e(TAG, "MalformedURLException: " + e.getMessage());
} catch (ProtocolException e) {
Log.e(TAG, "ProtocolException: " + e.getMessage());
} catch (IOException e) {
Log.e(TAG, "IOException: " + e.getMessage());
} catch (Exception e) {
Log.e(TAG, "Exception: " + e.getMessage());
}
return response;
}
private String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line).append('\n');
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
Thanks for your input
Override getCount method into adapter class.

onResume Does Not Update ListView With New Data

I am trying to update a ListView on previous fragment after back button press. The onResume is called (verified with Toast) and the webservice runs (listView is displayed after it is cleared). The problem is that the ListView is still showing old values and not new value after accessWebService_getUsername is called. I verify the values from MySQL and even though the DB is updated, the ListView only returns old values.
#Override
public void onResume() {
Toast.makeText(getActivity(), "onResume", Toast.LENGTH_SHORT).show();
super.onResume();
adapter.clear();
getIMEI();
accessWebService_getUsername();
adapter.notifyDataSetChanged();
}
Update:
//ListView
ListView lv =(ListView)view.findViewById(R.id.listView);
adapter = new ContactsAdapter(getActivity(), arrRequest_Contact, arrRequest_NameSurname, arrRequest_MessageCount, arrRequest_Time, arrRequest_Image);
lv.setAdapter(adapter);
// Json
private class JsonGetUsername extends AsyncTask<String, Void, String> {
//Pending 01
private ProgressDialog dialog = new ProgressDialog(getActivity());
#Override
protected void onPreExecute() {
this.dialog.setMessage("Loading Contacts, Please Wait");
this.dialog.show();
}
#Override
protected String doInBackground(String... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(params[0]);
try {
HttpResponse response = httpclient.execute(httppost);
jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private StringBuilder inputStreamToString(InputStream is) {
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((rLine = rd.readLine()) != null) {
answer.append(rLine);
}
}
catch (IOException e) {
// e.printStackTrace();
Toast.makeText(getActivity(),"Error..." + e.toString(), Toast.LENGTH_LONG).show();
}
return answer;
}
#Override
protected void onPostExecute(String result) {
//Pending 02
if (dialog.isShowing()) {
dialog.dismiss();
}
adapter.notifyDataSetChanged();
try{
ListDrawer_getUsername(); //has ConnectionException (when it cannot reach server)
}catch (Exception e){
Toast.makeText(getActivity(), "Please check your connection..", Toast.LENGTH_LONG).show();
}
}
}// end async task
public void accessWebService_getUsername() {
JsonGetUsername task = new JsonGetUsername();
// passes values for the urls string array
task.execute(new String[] { "http://mywebsite/php/get_username.php?pIMEI="+IMEI});
}
// build hash set for list view
public void ListDrawer_getUsername() {
try {
JSONObject jsonResponse = new JSONObject(jsonResult);
JSONArray jsonMainNode = jsonResponse.optJSONArray("username_info");
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
request_username = jsonChildNode.optString("Username");
}
accessWebService_getContacts();
} catch (JSONException e) {
System.out.println("Json Error Rooms" +e.toString());
//Toast.makeText(getApplicationContext(), "No Rooms To Load", Toast.LENGTH_SHORT).show();
}
}
UPDATE 2:
//ContactsAdpater
class ContactsAdapter extends ArrayAdapter<String>
{
Context context;
List<String> Request_Contact;
List<String> Request_NameSurname;
List<String> Request_MessageCount;
List<String> Request_Time;
List<String> Request_Image;
ContactsAdapter(Context c, List<String> Request_Contact, List<String> Request_NameSurname, List<String> Request_MessageCount, List<String> Request_Time, List<String> Request_Image)
{
super(c, R.layout.activity_contacts_single, R.id.textContact, Request_Contact);
this.context=c;
this.Request_Contact=Request_Contact;
this.Request_NameSurname=Request_NameSurname;
this.Request_MessageCount=Request_MessageCount;
this.Request_Time=Request_Time;
this.Request_Image=Request_Image;
}
#Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row=convertView;
if(row==null)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.activity_contacts_single, parent, false);
}
TextView txtContact = (TextView) row.findViewById(R.id.textContact);
TextView txtNameSurname = (TextView) row.findViewById(R.id.textNameSurname);
TextView txtMessageCount = (TextView) row.findViewById(R.id.textMessageCount);
TextView txtTime = (TextView) row.findViewById(R.id.textTime);
ImageView imageView = (ImageView) row.findViewById(R.id.imageView);
txtContact.setText(Request_Contact.get(position));
txtNameSurname.setText(Request_NameSurname.get(position));
txtMessageCount.setText(Request_MessageCount.get(position));
txtTime.setText(Request_Time.get(position));
Picasso.with(context).load(arrRequest_Image.get(position)).transform(new CircleTransform()).placeholder(R.drawable.ic_launcher).into(imageView);
return row;
}
}
You'll need to override the clear method in your ContactsAdapter to actually clear the lists you are storing your data in.
It looks like you'll need to clear all your lists, so if you add this to ContactsAdapter, your code should work as expected:
#Override
public void clear() {
super.clear();
Request_Contact.clear();
Request_NameSurname.clear();
Request_MessageCount.clear();
Request_Time.clear();
Request_Image.clear();
}

How can i parse JSON from URL on Android and display it in listview [duplicate]

I am new to android and java.Recently I am having problem with displaying fetched json data into listview using baseadapter.
At first I have used this code
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new TheTask().execute();
}
class TheTask extends AsyncTask<Void,Void,String>
{
#Override
protected String doInBackground(Void... params) {
String str = null;
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
String response = result.toString();
try {
ArrayList<String> stringArray = new ArrayList<String>();
JSONArray new_array = new JSONArray(response);
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
stringArray.add(jsonObject.getString("title").toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<String> (MainActivity.this,R.layout.test_tuh,stringArray);
ListView list= (ListView) findViewById(R.id.listView1);
list.setAdapter(adapter);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//tv.setText("error2");
}
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
This code displays fetched json data sucessfully. But it only displays only one row. I need more than one (two) rows in listview. So I have tried this code
and it does not work, it shows a blank screen .
My code is below,
class TheTask extends AsyncTask<Void,Void,String>
{
#Override
protected String doInBackground(Void... params) {
String str = null;
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
String response = result.toString();
try {
arrayList=new ArrayList<get_set>();
ArrayList<String> stringArray = new ArrayList<String>();
JSONArray new_array = new JSONArray(response);
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
stringArray.add(jsonObject.getString("title").toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}
ListView listView;
adap= new BaseAdapter() {
LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
#Override
public View getView(int position, View view, ViewGroup viewgroup) {
if (view==null) {
view=inflater.inflate(R.layout.bsdi, null);
}
TextView title_tuh=(TextView) view.findViewById(R.id.title1);
TextView notice_tuh=(TextView) view.findViewById(R.id.notice1);
title_tuh.setText(arrayList.get(position).getTitle());
notice_tuh=.setText(arrayList.get(position).getNotice());
return view;
}
#Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
#Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arrayList.get(position);
}
#Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList.size();
}
};
listView=(ListView) findViewById(R.id.listView1);
listView.setAdapter(adap);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//tv.setText("error2");
}
}
As far I am realizing that , the problem is here
ArrayList<String> stringArray = new ArrayList<String>();
JSONArray new_array = new JSONArray(response);
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
stringArray.add(jsonObject.getString("title").toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}
As far I am guesing that extracted json data is storing in stringArray but its not used later. If I try to use it like this , then I get error
title_tuh.setText(stringArray .get(position).getTitle());
notice_tuh=.setText(stringArray .get(position).getNotice());
If I try to not to use
ArrayList stringArray = new ArrayList();
and use
arrayList=new ArrayList(); instead , like this then I also get error.
arrayList=new ArrayList<get_set>();
JSONArray new_array = new JSONArray(response);
//JSONArray jsonArray = new JSONArray();
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
arrayList.add(jsonObject.getString("title").toString());
// String in = mInflater.inflate(R.layout.custom_row_view, null);
}
catch (JSONException e) {
e.printStackTrace();
}
}
I can not finding out how to solve this problem.I have seen many online tutorials but those was not helpful for me. Please help me.
First u need t create row_listitem.xml file like:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:background="#drawable/list_selector"
android:orientation="vertical"
android:padding="5dp" >
<ImageView
android:id="#+id/iv_icon_social"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerVertical="true"
android:background="#drawable/image_border"
android:src="#drawable/sms_t"
android:visibility="gone" />
<LinearLayout
android:id="#+id/thumbnail"
android:layout_width="fill_parent"
android:layout_height="85dp"
android:layout_marginRight="50dp"
android:layout_marginTop="0dp"
android:layout_toRightOf="#+id/iv_icon_social"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="5dip"
android:visibility="visible" >
<TextView
android:id="#+id/txt_ttlsm_row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="Sample text"
android:textSize="18dp"
android:textStyle="bold" />
<TextView
android:id="#+id/txt_ttlcontact_row2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="0dp"
android:layout_marginTop="3dp"
android:paddingLeft="10dp"
android:maxEms="20"
android:maxLines="2"
android:singleLine="false"
android:ellipsize="end"
android:text="Sample text2"
android:textColor="#808080"
android:textSize="15dp"
android:textStyle="normal"
android:visibility="visible" />
</LinearLayout>
</RelativeLayout>
Now, u need to create Custom BaseAdapter like:
public class BaseAdapter2 extends BaseAdapter {
private Activity activity;
// private ArrayList<HashMap<String, String>> data;
private static ArrayList title,notice;
private static LayoutInflater inflater = null;
public BaseAdapter2(Activity a, ArrayList b, ArrayList bod) {
activity = a;
this.title = b;
this.notice=bod;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return title.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.row_listitem, null);
TextView title2 = (TextView) vi.findViewById(R.id.txt_ttlsm_row); // title
String song = title.get(position).toString();
title2.setText(song);
TextView title22 = (TextView) vi.findViewById(R.id.txt_ttlcontact_row2); // notice
String song2 = notice.get(position).toString();
title22.setText(song2);
return vi;
}
}
Now, u can set up your main activity like:
public class MainActivity extends Activity {
ArrayList<String> title_array = new ArrayList<String>();
ArrayList<String> notice_array = new ArrayList<String>();
ListView list;
BaseAdapter2 adapter;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.listView1);
new TheTask().execute();
}
class TheTask extends AsyncTask<Void, Void, String> {
#Override
protected String doInBackground(Void... params) {
String str = null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
String response = result.toString();
try {
JSONArray new_array = new JSONArray(response);
for (int i = 0, count = new_array.length(); i < count; i++) {
try {
JSONObject jsonObject = new_array.getJSONObject(i);
title_array.add(jsonObject.getString("title").toString());
notice_array.add(jsonObject.getString("notice").toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
adapter = new BaseAdapter2(MainActivity.this, title_array, notice_array);
list.setAdapter(adapter);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// tv.setText("error2");
}
}
}
}
#Allen Chun , actually its not in my mind currently that what I have changed in my code to run my code perfectly. But I am sharing all my codes which are working perfectly.
Its my layout code,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="#+id/fsr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Notice Board"
android:textSize="20px" />
<TextView
android:id="#+id/err_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:gravity="center" />
<ListView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="#+id/list_notice2"
android:layout_gravity="center" />
</LinearLayout>
This is my custom listview layout codes,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="#+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:paddingTop="10dp"
android:layout_gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium" />
/>
<TextView
android:id="#+id/notice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small Text"
android:paddingTop="5dp"
android:layout_gravity="center"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
its my activity named "NoticeBoard" .
public class NoticeBoard extends Activity {
ArrayList<String> title_array = new ArrayList<String>();
ArrayList<String> notice_array = new ArrayList<String>();
ListView list;
base_adapter3 adapter;
TextView f,msg;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_notice);
list = (ListView) findViewById(R.id.list_notice2);
msg=(TextView) findViewById(R.id.err_msg);
new test_ays().execute();
}
class test_ays extends AsyncTask<Void, Void, String> {
#Override
protected String doInBackground(Void... params) {
String str = null ;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result!=null) // add this
{
String response = result.toString();
try {
JSONArray new_array = new JSONArray(response);
for (int i = 0, count = new_array.length(); i < count; i++) {
try {
JSONObject jsonObject = new_array.getJSONObject(i);
title_array.add(jsonObject.getString("title").toString());
notice_array.add(jsonObject.getString("notice").toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
adapter = new base_adapter3(NoticeBoard.this, title_array, notice_array);
list.setAdapter(adapter);
// f=(TextView) findViewById(R.id.textTuh);
// f.setText(title_array);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// tv.setText("error2");
}
}
else{
msg.setText("You need a working data connection...");
}
}
}
}
And its my custom baseadapter codes,
public class base_adapter2 extends BaseAdapter {
private Activity activity;
//private ArrayList<HashMap<String, String>> data;
private static ArrayList title,notice;
private static LayoutInflater inflater = null;
public base_adapter2(Activity a, ArrayList b) {
activity = a;
this.title = b;
// this.notice=bod;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return title.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.bsdi_adapter, null);
TextView title2 = (TextView) vi.findViewById(R.id.txt1); // title
String song = title.get(position).toString();
title2.setText(song);
return vi;
}
}
In this example, I am connecting to Twitters public timeline JSON url.
package net.inchoo.demo.andy1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class HomeActivity extends ListActivity {
/** Called when the activity is first created. */
#SuppressWarnings({ "rawtypes", "unchecked" })
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, this.fetchTwitterPublicTimeline()));
}
public ArrayList<String> fetchTwitterPublicTimeline()
{
ArrayList<String> listItems = new ArrayList<String>();
try {
URL twitter = new URL(
"http://twitter.com/statuses/public_timeline.json");
URLConnection tc = twitter.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
tc.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
JSONArray ja = new JSONArray(line);
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = (JSONObject) ja.get(i);
listItems.add(jo.getString("text"));
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return listItems;
}
}
Please direct your attention on the listItems.add(jo.getString(“text”)); line. This is the part that I am grabbing a “text” attribute/property of single JSON object. To get a more “visual” picture of all available attributes/properties you might want to take a look at the XML version of twitters public timeline. This way you will get nice colored XML in your browser, where you can see all available attributes.
Link: http://inchoo.net/dev-talk/android-development/simple-android-json-parsing-example-with-output-into-listactivity/
Json parser:
public class jparser {
static InputStream istream = null;
static JSONObject jObj = null;
//static JSONArray jarray=null;
static String json = "";
//static JSONArray jarray = null;
// constructor
public jparser() {
}
public JSONObject getJFromUrl(String url) {
// Making HTTP request
//try {
// defaultHttpClient
StringBuilder builder = new StringBuilder();
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
/*HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
istream = httpEntity.getContent();*/
try{
HttpResponse response = httpClient.execute(httpPost);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 400)
{
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null)
{
builder.append(line);
}
}
else
{
Log.e("==>", "Failed to download file");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(istream, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
istream.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
// Parse String to JSON object
/*try {
jarray = new JSONArray( builder.toString());
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON Object
return jarray;
}*/
}
}
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
#SuppressLint("NewApi")
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
// check for request method
if(method == "POST"){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
<h1>Model</h1>
public class WorkModel {
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImagename() {
return imagename;
}
public void setImagename(String imagename) {
this.imagename = imagename;
}
String id,name,imagename;
public WorkModel(String s1,String s2,String s3)
{
this.id=s1;
name=s2;
imagename=s3;
}
}
<h1>listview fill</h1>
public class Work_in_process extends Fragment {
//////////////jsonparser implement
JSONParser jsonparser=new JSONParser();
JSONArray json_users=null;
JSONObject json;
/////////
ListView lst;
ArrayList<WorkModel> data=new ArrayList<WorkModel>();
WorkAdapter adapter;
Context con;
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_work_in_process, container, false);
con=this.getActivity();
lst=(ListView)rootView.findViewById(R.id.work_listview);
new work_process().execute();
// Inflate the layout for this fragment
return rootView;
}
class work_process extends AsyncTask<String,String,String>
{
public Dialog pDialog;
#Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(con);
pDialog.setMessage("Loading... Please wait...");
pDialog.setIndeterminate(true);
pDialog.setCancelable(true);
pDialog.show();
}
#Override
protected String doInBackground(String... args) {
data.clear();
List<NameValuePair> params = new ArrayList<NameValuePair>();
json = jsonparser.makeHttpRequest("your url","POST", params);
try {
int success = json.getInt("status");
if (success == 0)
{
return "kbc";
}
else
{
json_users = json.getJSONArray("result");
// looping through All Products
for (int i = 0; i < json_users.length(); i++) {
JSONObject c = json_users.getJSONObject(i);
String t1 = c.getString("id");
String t2 = c.getString("work_title");
String t3 = c.getString("image_path");
WorkModel da=new WorkModel(t1,t2,t3);
data.add(da);
}
return "abc";
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
#Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
pDialog.dismiss();
if(s.equals("abc"))
{
adapter = new WorkAdapter(con, data);
lst.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
else
{
}
}
}
}
<h1>Adapter fill listview</h1>
public class WorkAdapter extends BaseAdapter {
private LayoutInflater inflater1=null;
private static String string=null;
ArrayList<WorkModel> data=null;
Context activity;
DisplayImageOptions options;
protected ImageLoader imageLoader = ImageLoader.getInstance();
public WorkAdapter(Context act,ArrayList<WorkModel> da)
{
activity=act;
data=da;
}
#Override
public int getCount() {
return data.size();
}
#Override
public Object getItem(int position) {
return position;
}
#Override
public long getItemId(int position) {
return position;
}
#Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
{
inflater1=(LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi=inflater1.inflate(R.layout.list_work,null);
}
TextView name;
ImageView img;
name=(TextView)vi.findViewById(R.id.list_work_name);
img= (ImageView)vi.findViewById(R.id.list_work_img);
WorkModel da=new WorkModel(string,string,string);
da=data.get(position);
final String p1,p2,p3;
p1=da.getId();
p2=da.getName();
p3=da.getImagename();
name.setText(p2);
imageLoader.init(ImageLoaderConfiguration.createDefault(activity));
final String imgpath=""+p3;
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.wp_loading)
.showImageForEmptyUri(R.drawable.wp_loading)
.showImageOnFail(R.drawable.wp_loading)
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
imageLoader.displayImage(imgpath, img,options);
img.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
DisplayImageOptions options;
final ImageLoader imageLoader = ImageLoader.getInstance();
final Dialog emailDialog =new Dialog(activity, android.R.style.Theme_DeviceDefault);
emailDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
emailDialog.setCancelable(true);
emailDialog.setContentView(R.layout.zoom_imge);
ImageView image = (ImageView) emailDialog.findViewById(R.id.zoom_image_img);
emailDialog.show();
final String imgpath=""+p3;
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.wp_loading)
.showImageForEmptyUri(R.drawable.wp_loading)
.showImageOnFail(R.drawable.wp_loading)
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
imageLoader.displayImage(imgpath, image, options);
}
});
return vi;
}
}
Get schedule
public class GetSchedule extends Activity {
// JSON Node Names
private static final String TAG_SNO = "sno";
private static final String TAG_STNCODE = "stnCode";
private static final String TAG_STATION = "station";
// private static final String TAG_ROUTENO= "routeNo";
private static final String TAG_ARRIVALTIME = "arrivalTime";
private static final String TAG_DEPTIME = "depTime";
private JSONArray station = null;
private ListView list;
//private static String url = "http://railpnrapi.com/api/route/train/";
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_get_schedule);
try {
ArrayList<HashMap<String, String>> stnNamelist = new ArrayList<HashMap<String, String>>();
// Getting JSON Array
// JSONObject job = new JSONObject();
//JSONArray jArray = ModuleClass.trainScheduleJSONObject.getJSONArray("stnName");
JSONObject json_data = null;
station= ModuleClass.trainScheduleJSONObject.getJSONArray(TAG_STATION);
for (int i = 0; i < station.length(); i++) {
json_data = station.getJSONObject(i);
// JSONObject c = stnName.getJSONObject(0);
// Storing  JSON item in a Variable
String sno = json_data.getString(TAG_SNO);
String stnCode = json_data.getString(TAG_STNCODE);
// String distance= c.getString(TAG_DISTANCE);
// String routeNo = c.getString(TAG_ROUTENO);
String arrivalTime = json_data.getString(TAG_ARRIVALTIME);
String depTime = json_data.getString(TAG_DEPTIME);
// String haltTime = c.getString(TAG_HALTTIME);
// String tday= c.getString(TAG_TDAY);
// String remark = c.getString(TAG_REMARK);
// Adding value HashMap key => value
stnNamelist = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_SNO, sno);
map.put(TAG_STNCODE, stnCode);
map.put(TAG_DEPTIME, depTime);
map.put(TAG_ARRIVALTIME, arrivalTime);
// map.put(TAG_DEPTIME,depTime );
stnNamelist.add(map);
list = (ListView) findViewById(R.id.listView1);
final SimpleAdapter sd;
sd = new SimpleAdapter(this, stnNamelist, R.layout.activity_get_schedule,
new String[] { TAG_SNO, TAG_STNCODE, TAG_ARRIVALTIME, TAG_DEPTIME },
new int[] { R.id.textView1, R.id.textView2, R.id.textView3, R.id.textView4});
list.setAdapter(sd);
/*
* list.setOnItemClickListener(new
* AdapterView.OnItemClickListener() {
*
* #Override public void onItemClick(AdapterView<?> parent, View
* view, int position, long id) { Toast.makeText(
* MainActivity.this, "You Clicked at " +
* stnNamelist.get(+position).get( "name"), Toast.LENGTH_SHORT)
* .show(); } });
*/
}
// Set JSON Data in TextView
// uid.setText(id);
// name1.setText(name);
// email1.setText(email);
} catch (JSONException e) {
e.printStackTrace();
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.get_schedule, menu);
return true;
}
}
ListView from JSON data fetched using Retrofit2 service
JSON response
{
"results": [
{
"phone": "+9178XXXX66",
"name": "Olivia"
},
{
"phone": "+9178XXXX66",
"name": "Isla"
},
{
"phone": "+9178XXXX66",
"name": "Emily"
},
{
"phone": "+9178XXXX66",
"name": "Amelia"
},
{
"phone": "+9178XXXX66",
"name": "Sophia"
}],
"statusCode": "1",
"count": "2"
}
In MainActivity.java we will pass JSON data as ArrayList(dummyData)
customListAdapter = new CustomListAdapter(getApplicationContext(), dummyData);
listView = (ListView) findViewById(R.id.listShowJSONData);
listView.setAdapter(customListAdapter);
In custom BaseAdapter our
...
...
#Override
public MyModel getItem(int i) {
return this.users.get(i);
}
#Override
public long getItemId(int i) {
return i;
}
#Override
public View getView(final int i, View view, ViewGroup viewGroup) {
if(view==null)
{
view= LayoutInflater.from(c).inflate(R.layout.json_data_list,viewGroup,false);
}
TextView mUserDetails = (TextView) view.findViewById(R.id.userDetails);
TextView mUserStatus = (TextView) view.findViewById(R.id.userStatus);
Object getrow = this.users.get(i);
LinkedTreeMap<Object,Object> rowmap = (LinkedTreeMap) getrow;
String name = rowmap.get("name").toString();
String phone = rowmap.get("phone").toString();
mUserDetails.setText(name);
mUserStatus.setText(phone);
return view;
}
...
...
Here MyModel will be used as custom mapping model of response we will get from service
See link for complete code explanation

how to display fetched json data into listview using baseadapter

I am new to android and java.Recently I am having problem with displaying fetched json data into listview using baseadapter.
At first I have used this code
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new TheTask().execute();
}
class TheTask extends AsyncTask<Void,Void,String>
{
#Override
protected String doInBackground(Void... params) {
String str = null;
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
String response = result.toString();
try {
ArrayList<String> stringArray = new ArrayList<String>();
JSONArray new_array = new JSONArray(response);
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
stringArray.add(jsonObject.getString("title").toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<String> (MainActivity.this,R.layout.test_tuh,stringArray);
ListView list= (ListView) findViewById(R.id.listView1);
list.setAdapter(adapter);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//tv.setText("error2");
}
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
This code displays fetched json data sucessfully. But it only displays only one row. I need more than one (two) rows in listview. So I have tried this code
and it does not work, it shows a blank screen .
My code is below,
class TheTask extends AsyncTask<Void,Void,String>
{
#Override
protected String doInBackground(Void... params) {
String str = null;
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
String response = result.toString();
try {
arrayList=new ArrayList<get_set>();
ArrayList<String> stringArray = new ArrayList<String>();
JSONArray new_array = new JSONArray(response);
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
stringArray.add(jsonObject.getString("title").toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}
ListView listView;
adap= new BaseAdapter() {
LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
#Override
public View getView(int position, View view, ViewGroup viewgroup) {
if (view==null) {
view=inflater.inflate(R.layout.bsdi, null);
}
TextView title_tuh=(TextView) view.findViewById(R.id.title1);
TextView notice_tuh=(TextView) view.findViewById(R.id.notice1);
title_tuh.setText(arrayList.get(position).getTitle());
notice_tuh=.setText(arrayList.get(position).getNotice());
return view;
}
#Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
#Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arrayList.get(position);
}
#Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList.size();
}
};
listView=(ListView) findViewById(R.id.listView1);
listView.setAdapter(adap);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//tv.setText("error2");
}
}
As far I am realizing that , the problem is here
ArrayList<String> stringArray = new ArrayList<String>();
JSONArray new_array = new JSONArray(response);
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
stringArray.add(jsonObject.getString("title").toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}
As far I am guesing that extracted json data is storing in stringArray but its not used later. If I try to use it like this , then I get error
title_tuh.setText(stringArray .get(position).getTitle());
notice_tuh=.setText(stringArray .get(position).getNotice());
If I try to not to use
ArrayList stringArray = new ArrayList();
and use
arrayList=new ArrayList(); instead , like this then I also get error.
arrayList=new ArrayList<get_set>();
JSONArray new_array = new JSONArray(response);
//JSONArray jsonArray = new JSONArray();
for(int i = 0, count = new_array.length(); i< count; i++)
{
try {
JSONObject jsonObject = new_array.getJSONObject(i);
arrayList.add(jsonObject.getString("title").toString());
// String in = mInflater.inflate(R.layout.custom_row_view, null);
}
catch (JSONException e) {
e.printStackTrace();
}
}
I can not finding out how to solve this problem.I have seen many online tutorials but those was not helpful for me. Please help me.
First u need t create row_listitem.xml file like:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:background="#drawable/list_selector"
android:orientation="vertical"
android:padding="5dp" >
<ImageView
android:id="#+id/iv_icon_social"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerVertical="true"
android:background="#drawable/image_border"
android:src="#drawable/sms_t"
android:visibility="gone" />
<LinearLayout
android:id="#+id/thumbnail"
android:layout_width="fill_parent"
android:layout_height="85dp"
android:layout_marginRight="50dp"
android:layout_marginTop="0dp"
android:layout_toRightOf="#+id/iv_icon_social"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="5dip"
android:visibility="visible" >
<TextView
android:id="#+id/txt_ttlsm_row"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="Sample text"
android:textSize="18dp"
android:textStyle="bold" />
<TextView
android:id="#+id/txt_ttlcontact_row2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="0dp"
android:layout_marginTop="3dp"
android:paddingLeft="10dp"
android:maxEms="20"
android:maxLines="2"
android:singleLine="false"
android:ellipsize="end"
android:text="Sample text2"
android:textColor="#808080"
android:textSize="15dp"
android:textStyle="normal"
android:visibility="visible" />
</LinearLayout>
</RelativeLayout>
Now, u need to create Custom BaseAdapter like:
public class BaseAdapter2 extends BaseAdapter {
private Activity activity;
// private ArrayList<HashMap<String, String>> data;
private static ArrayList title,notice;
private static LayoutInflater inflater = null;
public BaseAdapter2(Activity a, ArrayList b, ArrayList bod) {
activity = a;
this.title = b;
this.notice=bod;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return title.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.row_listitem, null);
TextView title2 = (TextView) vi.findViewById(R.id.txt_ttlsm_row); // title
String song = title.get(position).toString();
title2.setText(song);
TextView title22 = (TextView) vi.findViewById(R.id.txt_ttlcontact_row2); // notice
String song2 = notice.get(position).toString();
title22.setText(song2);
return vi;
}
}
Now, u can set up your main activity like:
public class MainActivity extends Activity {
ArrayList<String> title_array = new ArrayList<String>();
ArrayList<String> notice_array = new ArrayList<String>();
ListView list;
BaseAdapter2 adapter;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.listView1);
new TheTask().execute();
}
class TheTask extends AsyncTask<Void, Void, String> {
#Override
protected String doInBackground(Void... params) {
String str = null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
String response = result.toString();
try {
JSONArray new_array = new JSONArray(response);
for (int i = 0, count = new_array.length(); i < count; i++) {
try {
JSONObject jsonObject = new_array.getJSONObject(i);
title_array.add(jsonObject.getString("title").toString());
notice_array.add(jsonObject.getString("notice").toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
adapter = new BaseAdapter2(MainActivity.this, title_array, notice_array);
list.setAdapter(adapter);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// tv.setText("error2");
}
}
}
}
#Allen Chun , actually its not in my mind currently that what I have changed in my code to run my code perfectly. But I am sharing all my codes which are working perfectly.
Its my layout code,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="#+id/fsr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Notice Board"
android:textSize="20px" />
<TextView
android:id="#+id/err_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:gravity="center" />
<ListView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="#+id/list_notice2"
android:layout_gravity="center" />
</LinearLayout>
This is my custom listview layout codes,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="#+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:paddingTop="10dp"
android:layout_gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium" />
/>
<TextView
android:id="#+id/notice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small Text"
android:paddingTop="5dp"
android:layout_gravity="center"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
its my activity named "NoticeBoard" .
public class NoticeBoard extends Activity {
ArrayList<String> title_array = new ArrayList<String>();
ArrayList<String> notice_array = new ArrayList<String>();
ListView list;
base_adapter3 adapter;
TextView f,msg;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_notice);
list = (ListView) findViewById(R.id.list_notice2);
msg=(TextView) findViewById(R.id.err_msg);
new test_ays().execute();
}
class test_ays extends AsyncTask<Void, Void, String> {
#Override
protected String doInBackground(Void... params) {
String str = null ;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php");
HttpResponse response = httpclient.execute(httppost);
str = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
#Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(result!=null) // add this
{
String response = result.toString();
try {
JSONArray new_array = new JSONArray(response);
for (int i = 0, count = new_array.length(); i < count; i++) {
try {
JSONObject jsonObject = new_array.getJSONObject(i);
title_array.add(jsonObject.getString("title").toString());
notice_array.add(jsonObject.getString("notice").toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
adapter = new base_adapter3(NoticeBoard.this, title_array, notice_array);
list.setAdapter(adapter);
// f=(TextView) findViewById(R.id.textTuh);
// f.setText(title_array);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// tv.setText("error2");
}
}
else{
msg.setText("You need a working data connection...");
}
}
}
}
And its my custom baseadapter codes,
public class base_adapter2 extends BaseAdapter {
private Activity activity;
//private ArrayList<HashMap<String, String>> data;
private static ArrayList title,notice;
private static LayoutInflater inflater = null;
public base_adapter2(Activity a, ArrayList b) {
activity = a;
this.title = b;
// this.notice=bod;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return title.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.bsdi_adapter, null);
TextView title2 = (TextView) vi.findViewById(R.id.txt1); // title
String song = title.get(position).toString();
title2.setText(song);
return vi;
}
}
In this example, I am connecting to Twitters public timeline JSON url.
package net.inchoo.demo.andy1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class HomeActivity extends ListActivity {
/** Called when the activity is first created. */
#SuppressWarnings({ "rawtypes", "unchecked" })
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, this.fetchTwitterPublicTimeline()));
}
public ArrayList<String> fetchTwitterPublicTimeline()
{
ArrayList<String> listItems = new ArrayList<String>();
try {
URL twitter = new URL(
"http://twitter.com/statuses/public_timeline.json");
URLConnection tc = twitter.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
tc.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
JSONArray ja = new JSONArray(line);
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = (JSONObject) ja.get(i);
listItems.add(jo.getString("text"));
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return listItems;
}
}
Please direct your attention on the listItems.add(jo.getString(“text”)); line. This is the part that I am grabbing a “text” attribute/property of single JSON object. To get a more “visual” picture of all available attributes/properties you might want to take a look at the XML version of twitters public timeline. This way you will get nice colored XML in your browser, where you can see all available attributes.
Link: http://inchoo.net/dev-talk/android-development/simple-android-json-parsing-example-with-output-into-listactivity/
Json parser:
public class jparser {
static InputStream istream = null;
static JSONObject jObj = null;
//static JSONArray jarray=null;
static String json = "";
//static JSONArray jarray = null;
// constructor
public jparser() {
}
public JSONObject getJFromUrl(String url) {
// Making HTTP request
//try {
// defaultHttpClient
StringBuilder builder = new StringBuilder();
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
/*HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
istream = httpEntity.getContent();*/
try{
HttpResponse response = httpClient.execute(httpPost);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 400)
{
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null)
{
builder.append(line);
}
}
else
{
Log.e("==>", "Failed to download file");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(istream, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
istream.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
// Parse String to JSON object
/*try {
jarray = new JSONArray( builder.toString());
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON Object
return jarray;
}*/
}
}
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
#SuppressLint("NewApi")
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
// check for request method
if(method == "POST"){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
<h1>Model</h1>
public class WorkModel {
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImagename() {
return imagename;
}
public void setImagename(String imagename) {
this.imagename = imagename;
}
String id,name,imagename;
public WorkModel(String s1,String s2,String s3)
{
this.id=s1;
name=s2;
imagename=s3;
}
}
<h1>listview fill</h1>
public class Work_in_process extends Fragment {
//////////////jsonparser implement
JSONParser jsonparser=new JSONParser();
JSONArray json_users=null;
JSONObject json;
/////////
ListView lst;
ArrayList<WorkModel> data=new ArrayList<WorkModel>();
WorkAdapter adapter;
Context con;
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_work_in_process, container, false);
con=this.getActivity();
lst=(ListView)rootView.findViewById(R.id.work_listview);
new work_process().execute();
// Inflate the layout for this fragment
return rootView;
}
class work_process extends AsyncTask<String,String,String>
{
public Dialog pDialog;
#Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(con);
pDialog.setMessage("Loading... Please wait...");
pDialog.setIndeterminate(true);
pDialog.setCancelable(true);
pDialog.show();
}
#Override
protected String doInBackground(String... args) {
data.clear();
List<NameValuePair> params = new ArrayList<NameValuePair>();
json = jsonparser.makeHttpRequest("your url","POST", params);
try {
int success = json.getInt("status");
if (success == 0)
{
return "kbc";
}
else
{
json_users = json.getJSONArray("result");
// looping through All Products
for (int i = 0; i < json_users.length(); i++) {
JSONObject c = json_users.getJSONObject(i);
String t1 = c.getString("id");
String t2 = c.getString("work_title");
String t3 = c.getString("image_path");
WorkModel da=new WorkModel(t1,t2,t3);
data.add(da);
}
return "abc";
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
#Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
pDialog.dismiss();
if(s.equals("abc"))
{
adapter = new WorkAdapter(con, data);
lst.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
else
{
}
}
}
}
<h1>Adapter fill listview</h1>
public class WorkAdapter extends BaseAdapter {
private LayoutInflater inflater1=null;
private static String string=null;
ArrayList<WorkModel> data=null;
Context activity;
DisplayImageOptions options;
protected ImageLoader imageLoader = ImageLoader.getInstance();
public WorkAdapter(Context act,ArrayList<WorkModel> da)
{
activity=act;
data=da;
}
#Override
public int getCount() {
return data.size();
}
#Override
public Object getItem(int position) {
return position;
}
#Override
public long getItemId(int position) {
return position;
}
#Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
{
inflater1=(LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi=inflater1.inflate(R.layout.list_work,null);
}
TextView name;
ImageView img;
name=(TextView)vi.findViewById(R.id.list_work_name);
img= (ImageView)vi.findViewById(R.id.list_work_img);
WorkModel da=new WorkModel(string,string,string);
da=data.get(position);
final String p1,p2,p3;
p1=da.getId();
p2=da.getName();
p3=da.getImagename();
name.setText(p2);
imageLoader.init(ImageLoaderConfiguration.createDefault(activity));
final String imgpath=""+p3;
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.wp_loading)
.showImageForEmptyUri(R.drawable.wp_loading)
.showImageOnFail(R.drawable.wp_loading)
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
imageLoader.displayImage(imgpath, img,options);
img.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
DisplayImageOptions options;
final ImageLoader imageLoader = ImageLoader.getInstance();
final Dialog emailDialog =new Dialog(activity, android.R.style.Theme_DeviceDefault);
emailDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
emailDialog.setCancelable(true);
emailDialog.setContentView(R.layout.zoom_imge);
ImageView image = (ImageView) emailDialog.findViewById(R.id.zoom_image_img);
emailDialog.show();
final String imgpath=""+p3;
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.wp_loading)
.showImageForEmptyUri(R.drawable.wp_loading)
.showImageOnFail(R.drawable.wp_loading)
.cacheInMemory(true)
.cacheOnDisk(true)
.build();
imageLoader.displayImage(imgpath, image, options);
}
});
return vi;
}
}
Get schedule
public class GetSchedule extends Activity {
// JSON Node Names
private static final String TAG_SNO = "sno";
private static final String TAG_STNCODE = "stnCode";
private static final String TAG_STATION = "station";
// private static final String TAG_ROUTENO= "routeNo";
private static final String TAG_ARRIVALTIME = "arrivalTime";
private static final String TAG_DEPTIME = "depTime";
private JSONArray station = null;
private ListView list;
//private static String url = "http://railpnrapi.com/api/route/train/";
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_get_schedule);
try {
ArrayList<HashMap<String, String>> stnNamelist = new ArrayList<HashMap<String, String>>();
// Getting JSON Array
// JSONObject job = new JSONObject();
//JSONArray jArray = ModuleClass.trainScheduleJSONObject.getJSONArray("stnName");
JSONObject json_data = null;
station= ModuleClass.trainScheduleJSONObject.getJSONArray(TAG_STATION);
for (int i = 0; i < station.length(); i++) {
json_data = station.getJSONObject(i);
// JSONObject c = stnName.getJSONObject(0);
// Storing  JSON item in a Variable
String sno = json_data.getString(TAG_SNO);
String stnCode = json_data.getString(TAG_STNCODE);
// String distance= c.getString(TAG_DISTANCE);
// String routeNo = c.getString(TAG_ROUTENO);
String arrivalTime = json_data.getString(TAG_ARRIVALTIME);
String depTime = json_data.getString(TAG_DEPTIME);
// String haltTime = c.getString(TAG_HALTTIME);
// String tday= c.getString(TAG_TDAY);
// String remark = c.getString(TAG_REMARK);
// Adding value HashMap key => value
stnNamelist = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_SNO, sno);
map.put(TAG_STNCODE, stnCode);
map.put(TAG_DEPTIME, depTime);
map.put(TAG_ARRIVALTIME, arrivalTime);
// map.put(TAG_DEPTIME,depTime );
stnNamelist.add(map);
list = (ListView) findViewById(R.id.listView1);
final SimpleAdapter sd;
sd = new SimpleAdapter(this, stnNamelist, R.layout.activity_get_schedule,
new String[] { TAG_SNO, TAG_STNCODE, TAG_ARRIVALTIME, TAG_DEPTIME },
new int[] { R.id.textView1, R.id.textView2, R.id.textView3, R.id.textView4});
list.setAdapter(sd);
/*
* list.setOnItemClickListener(new
* AdapterView.OnItemClickListener() {
*
* #Override public void onItemClick(AdapterView<?> parent, View
* view, int position, long id) { Toast.makeText(
* MainActivity.this, "You Clicked at " +
* stnNamelist.get(+position).get( "name"), Toast.LENGTH_SHORT)
* .show(); } });
*/
}
// Set JSON Data in TextView
// uid.setText(id);
// name1.setText(name);
// email1.setText(email);
} catch (JSONException e) {
e.printStackTrace();
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.get_schedule, menu);
return true;
}
}
ListView from JSON data fetched using Retrofit2 service
JSON response
{
"results": [
{
"phone": "+9178XXXX66",
"name": "Olivia"
},
{
"phone": "+9178XXXX66",
"name": "Isla"
},
{
"phone": "+9178XXXX66",
"name": "Emily"
},
{
"phone": "+9178XXXX66",
"name": "Amelia"
},
{
"phone": "+9178XXXX66",
"name": "Sophia"
}],
"statusCode": "1",
"count": "2"
}
In MainActivity.java we will pass JSON data as ArrayList(dummyData)
customListAdapter = new CustomListAdapter(getApplicationContext(), dummyData);
listView = (ListView) findViewById(R.id.listShowJSONData);
listView.setAdapter(customListAdapter);
In custom BaseAdapter our
...
...
#Override
public MyModel getItem(int i) {
return this.users.get(i);
}
#Override
public long getItemId(int i) {
return i;
}
#Override
public View getView(final int i, View view, ViewGroup viewGroup) {
if(view==null)
{
view= LayoutInflater.from(c).inflate(R.layout.json_data_list,viewGroup,false);
}
TextView mUserDetails = (TextView) view.findViewById(R.id.userDetails);
TextView mUserStatus = (TextView) view.findViewById(R.id.userStatus);
Object getrow = this.users.get(i);
LinkedTreeMap<Object,Object> rowmap = (LinkedTreeMap) getrow;
String name = rowmap.get("name").toString();
String phone = rowmap.get("phone").toString();
mUserDetails.setText(name);
mUserStatus.setText(phone);
return view;
}
...
...
Here MyModel will be used as custom mapping model of response we will get from service
See link for complete code explanation

Categories

Resources