Има няколко неща, които се случват тук, ще се опитам да реша каквото мога.
Този запис в дневника е подозрителен:
03-22 22:30:42.860: E/ERROR(6055): Illegal character in query at index 53: http://necrecords.16mb.com/getproducts.php?password=A AA E EEE
Също така от този регистър:
03-22 22:54:08.000: E/ERROR(7654): Error converting result java.lang.NullPointerException: lock == null
Можете да видите, че не получавате валиден отговор от тази PHP страница.
Този кодов блок хвърля изключение:
//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result=sb.toString();
}catch(Exception e){
Log.e("ERROR", "Error converting result "+e.toString());
Току-що опитах URL адреса в браузър и се получи, тъй като браузърът автоматично кодира URL адреса правилно, както следва:
http://necrecords.16mb.com/getproducts.php?password=A%20AA%20E%20EEE
Мисля, че просто трябва правилно да кодирате URL адреса, тъй като низът съдържа интервали.
String query = URLEncoder.encode(mname, "utf-8");
httppost= new HttpPost("http://necrecords.16mb.com/getsongslist.php?password="+query);
response=httpclient.execute(httppost);
Що се отнася до проблема с удвояването на вашия списък, можете просто да изчистите списъка всеки път, когато AsyncTask се изпълнява:
protected Void doInBackground(Void...params){
InputStream is=null;
String result="";
try{
records.clear(); //clear the list before re-populating
httpclient=new DefaultHttpClient();
httppost= new HttpPost("http://necrecords.16mb.com/getproducts.php");
response=httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Още нещо, което трябва да споменем, вероятно ще искате да създадете отделен адаптер за всяка Acitvity. Както е сега, вие използвате един и същ адаптер и за двете дейности.
В getView()
на вашия адаптер , препращате към R.id.pro_name
и R.id.pro_uprice
, но използвате този адаптер и в двете си дейности. И двете ви дейности съдържат ли тези елементи в оформлението си xml?
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(groupid, parent, false);
String[] row_items=records.get(position).split("__");
TextView textName= (TextView) itemView.findViewById(R.id.pro_name);
textName.setText(row_items[0]);
TextView textPrice= (TextView) itemView.findViewById(R.id.pro_uprice);
textPrice.setText(row_items[1]+"$");
return itemView;
}