Chulbul Pandey
Chulbul Pandey

Reputation: 506

ListView is not appearing in Activity

I am making an app in which i want to show all previous Order Details to user in a ListView using Server from PHPMYADMIN.

Problem: Not getting ListView in Activity, getting blank activity instead of ListView

OrdersAdapter.java:

public class OrdersAdapter extends BaseAdapter {

    TextView tName,tId,tOid ;
    String MemberID,resultServer,strMemberID,strName,strOrderID;

    Activity activity;
    LayoutInflater inflater;
    ListView listView;


    public OrdersAdapter(Activity a) {
        // TODO Auto-generated constructor stub
        activity = a;
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    public int getCount() {
        return 0;
        // TODO Auto-generated method stub

    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

        public View getView(final int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View vi = convertView;
            if (convertView == null)
                vi = inflater.inflate(R.layout.listrow_orders, null);  // listrow_cart

            // Permission StrictMode
            if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);


            tId = (TextView)activity.findViewById(R.id.txtTotalAmount);
            tName = (TextView)activity.findViewById(R.id.txtItemDetails);

            String url = "http://172.16.0.4/res/order_fetch.php";
            Intent intent= activity.getIntent();
            MemberID = intent.getStringExtra("MemberID");
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("sMemberID", MemberID));
            resultServer  = getHttpPost(url,params);

            strMemberID = "";
            strName = "";


            JSONObject c;
            try {
                c = new JSONObject(resultServer);
                strMemberID = c.getString("TotalAmount");               
                strName = c.getString("ItemDetails");

                if(!strMemberID.equals(""))
                    {                   
                        tName.setText(strName);
                        tId.setText(strMemberID);               
                    }
                    else
                    {               
                        tName.setText("-");
                        tId.setText("-");
                    }
                    } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    }       

                }
            return vi;
        }       

                String getHttpPost(String url,List<NameValuePair> params) {
                StringBuilder str = new StringBuilder();
                HttpClient client = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);

                try {
                    httpPost.setEntity(new UrlEncodedFormEntity(params));
                    HttpResponse response = client.execute(httpPost);
                    StatusLine statusLine = response.getStatusLine();
                    int statusCode = statusLine.getStatusCode();
                    if (statusCode == 200) { // Status OK
                        HttpEntity entity = response.getEntity();
                        InputStream content = entity.getContent();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                        String line;
                        while ((line = reader.readLine()) != null) {
                            str.append(line);
                        }
                    } else {
                        Log.e("Log", "Failed to download result..");
                    }
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return str.toString();  
        }

}

OrdersActivity.java:

    public class OrdersActivity extends Activity 
{               
    ListView mLstView1;
    OrdersAdapter mViewOrdersAdpt;

    @SuppressLint("NewApi")
    @Override

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_orders);   

         mLstView1 = (ListView) findViewById(R.id.listView1);

            mViewOrdersAdpt = new OrdersAdapter(OrdersActivity.this);
            mLstView1.setAdapter(mViewOrdersAdpt);

            mLstView1.setOnItemClickListener(new OnItemClickListener() {

                 public void onItemClick(AdapterView<?> parent, View v,
                         final int position, long id) 
                 {       

                }
            }); 
    }
}

activity_orders.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff" >

    <include
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        layout="@layout/header_orders" />

<ListView 
    android:layout_width="match_parent" 
    android:id="@+id/listView1" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/header" 
    android:cacheColorHint="#00000000" 
    android:divider="#b5b5b5" 
    android:dividerHeight="1dp" 
    android:layout_alignParentBottom="true" />

</RelativeLayout>

listrow_orders.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="5dp"
    android:background="@drawable/btn_background"
    android:orientation="horizontal"
    android:padding="5dip" >

<TextView
    android:id="@+id/txtTotalAmount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:textColor="#a60704"
    android:text="TextView" />

<TextView
    android:id="@+id/txtItemDetails"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView3"
    android:layout_below="@+id/textView3"
    android:textColor="#a60704"
    android:text="Item Details Here" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/txtTotalAmount"
    android:layout_below="@+id/txtTotalAmount"
    android:layout_marginTop="17dp"
    android:text="Ordered Items:"
    android:textColor="#a60704"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="Total Amount"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="#a60704" />

</RelativeLayout>

Upvotes: 0

Views: 105

Answers (5)

Ronak Mehta
Ronak Mehta

Reputation: 5979

It is good if you parse json inside Activity instead of BaseAdapter , getView() will be called multiple times so json will be parsed multiple times too

Inside Activity write json fetching code inside AsyncTask store data in ArrayList , if you have single ArrayList than use like follow else you need to pass multiple ArrayList to BaseAdapter constructor

onPostExecute use setAdapter();

Here, mArrayList is a ArrayList<String>

 OrdersAdapter ordersAdapter = new OrdersAdapter(MyAct.this,mArrayList);

Inside BaseAdapter

ArrayList<String> mMyList;

public OrdersAdapter(Activity a, ArrayList<String> mList) 
 {
   activity = a;
   mMyList = mList;
   inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 }

getCount method

public int getCount() {
   return mMyList.size();
}

Upvotes: 1

androidcodehunter
androidcodehunter

Reputation: 21937

Don't try to load data in getView() method because it is called by systems many times. You can check this two link to know better Yet another getView called multiple times and the second link custom listview adapter getView method being called multiple times, and in no coherent order So now what you have to do to overcome this problem. You load data from web so you can use asynctask that will be used to load the data and pass it in a class. Check this to know about asynctask http://developer.android.com/reference/android/os/AsyncTask.html From asynctask class you can pass this data in a class. This class holds the data and then you can use this data in main activity. It is best to parse json data in asynctask class. Actually you did not pass any data in your adapter class. That's why your listview did not show any data. Hope this will work.

Upvotes: 0

mn0102
mn0102

Reputation: 849

Pass a Collection, lets say strings in constructor

public OrdersAdapter(Activity a, List stringsToShow) {
    // TODO Auto-generated constructor stub
    activity = a;
    inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   this.stringsToShow = stringsToShow;
}

and then

public int getCount() {
    return stringsToShow.size();

}

And avoid doing so many things in getView().. Kamal karte ho Pande ji..

Upvotes: 0

Vivek Kumar Srivastava
Vivek Kumar Srivastava

Reputation: 2158

Problem in your OrdersAdapter.java class you must need to override adapter getCount() method in proper way like

 public int getCount() {
        return SIZE_OF_ARRAYLIST;

    }

if you write return 0 then list will not display. So you need to return size of arrayList

Upvotes: 0

pskink
pskink

Reputation: 24720

your adapter says it has no items as getCount() returns 0

Upvotes: 0

Related Questions