0

我正在制作一个应用程序,我想在其中使用 PHPMYADMIN 的服务器在 ListView 中向用户显示所有以前的订单详细信息。

问题:在Activity中没有得到ListView,得到的是空白Activity而不是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) 
                 {       

                }
            }); 
    }
}

活动订单.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>
4

5 回答 5

1

如果你json在里面解析Activity而不是BaseAdapter, 会被getView()多次调用所以json也会被解析多次

在里面Activity写json获取代码里面AsyncTask存储数据ArrayList,如果你有一个ArrayList而不是像follow一样使用,你需要将多个传递ArrayListBaseAdapter constructor

onPostExecute use setAdapter();

这里, mArrayList是一个ArrayList<String>

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

里面 BaseAdapter

ArrayList<String> mMyList;

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

getCount 方法

public int getCount() {
   return mMyList.size();
}
于 2013-05-22T05:42:36.973 回答
0

您的适配器说它没有项目,因为 getCount() 返回 0

于 2013-05-22T05:25:53.350 回答
0

您的 OrdersAdapter.java 类中的问题,您必须以正确的方式覆盖适配器 getCount() 方法,例如

 public int getCount() {
        return SIZE_OF_ARRAYLIST;

    }

如果你写 return 0 那么列表将不会显示。所以你需要返回arrayList的大小

于 2013-05-22T05:32:09.897 回答
0

传递一个集合,让我们在构造函数中说字符串

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

接着

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

}

并避免在 getView() 中做这么多事情。Kamal karte ho Pande ji..

于 2013-05-22T05:36:58.973 回答
0

不要尝试在 getView() 方法中加载数据,因为它被系统多次调用。您可以检查这两个链接以更好地了解 另一个 getView 被多次调用 ,第二个链接 自定义 listview 适配器 getView 方法被多次调用,并且没有连贯的顺序 所以现在你必须做些什么来克服这个问题。您从 Web 加载数据,因此您可以使用将用于加载数据并将其传递到类中的 asynctask。检查这个以了解异步任务http://developer.android.com/reference/android/os/AsyncTask.html 从 asynctask 类中,您可以在类中传递这些数据。此类保存数据,然后您可以在主要活动中使用这些数据。最好在 asynctask 类中解析 json 数据。实际上,您没有在适配器类中传递任何数据。这就是为什么您的列表视图没有显示任何数据的原因。希望这会奏效。

于 2013-05-22T05:43:35.610 回答