Hier ist ein paar Dinge im Gange, ich werde versuchen, darauf einzugehen, was ich kann.
Dieser Protokolleintrag ist verdächtig:
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
Auch aus diesem Protokoll:
03-22 22:54:08.000: E/ERROR(7654): Error converting result java.lang.NullPointerException: lock == null
Sie können sehen, dass Sie von dieser PHP-Seite keine gültige Antwort erhalten.
Dieser Codeblock löst eine Ausnahme aus:
//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());
Ich habe gerade die URL in einem Browser ausprobiert, und es hat funktioniert, da der Browser die URL automatisch richtig codiert, etwa so:
http://necrecords.16mb.com/getproducts.php?password=A%20AA%20E%20EEE
Ich denke, dass Sie nur die URL richtig codieren müssen, da die Zeichenfolge Leerzeichen enthält.
String query = URLEncoder.encode(mname, "utf-8");
httppost= new HttpPost("http://necrecords.16mb.com/getsongslist.php?password="+query);
response=httpclient.execute(httppost);
Was das Problem betrifft, dass Ihre Liste verdoppelt wird, können Sie die Liste einfach jedes Mal löschen, wenn die AsyncTask ausgeführt wird:
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){
Noch etwas zu erwähnen, Sie werden wahrscheinlich für jede Aktivität einen separaten Adapter erstellen wollen. So wie es jetzt ist, verwenden Sie denselben Adapter für beide Aktivitäten.
Im getView()
Ihres Adapters , verweisen Sie auf R.id.pro_name
und R.id.pro_uprice
, aber Sie verwenden diesen Adapter in Ihren beiden Aktivitäten. Enthalten Ihre beiden Aktivitäten diese Elemente in ihrer Layout-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;
}