我正在创建一个应用程序,我希望使用PHPMYADMIN中的服务器在ListView中向用户显示所有以前的订单详细信息。
问题:未在活动中获取ListView,获取空白活动而不是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>
答案 0 :(得分:1)
如果您在json
内解析Activity
而不是BaseAdapter
,则会很好,getView()
将被多次调用,因此 json 将被解析多次次
在Activity
内部AsyncTask
内部ArrayList
内部ArrayList
存储数据中的json抓取代码,如果你有单个ArrayList而不是使用follow else,则需要将多个BaseAdapter constructor
传递给onPostExecute use setAdapter();
{1}}
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();
}
方法
{{1}}
答案 1 :(得分:0)
你的适配器说没有项目,因为getCount()返回0
答案 2 :(得分:0)
OrdersAdapter.java类中的问题 你必须以适当的方式覆盖适配器getCount()方法,如
public int getCount() {
return SIZE_OF_ARRAYLIST;
}
如果你写回0,那么列表就不会显示。所以你需要返回arrayList的大小
答案 3 :(得分:0)
传递一个Collection,让我们在构造函数中说出字符串
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 ..
答案 4 :(得分:0)
不要尝试在getView()方法中加载数据,因为系统多次调用它。您可以查看这两个链接以了解更好 Yet another getView called multiple times 和第二个链接 custom listview adapter getView method being called multiple times, and in no coherent order 那么现在你需要做些什么来克服这个问题。您从Web加载数据,因此您可以使用asynctask来加载数据并将其传递到类中。检查一下,了解asynctask http://developer.android.com/reference/android/os/AsyncTask.html 从asynctask类中,您可以在类中传递此数据。此类保存数据,然后您可以在主活动中使用此数据。最好在asynctask类中解析json数据。 实际上你没有在你的适配器类中传递任何数据。这就是你的listview没有显示任何数据的原因。希望这会奏效。