2017-01-03 2 views
0

BEANTWORTETEN VON MIR ParsenWie kundenspezifische Adapter nach Daten vom Server

Ich bin verwirrt, wo zu setzen und wie verwenden, um meine benutzerdefinierten Adapter zu verwenden. Meine Parser.class hat einen eigenen Adapter und meine MainActivity übergibt 3 Parameter an die Parser.class (context, url, listview).

(mein Problem einfach zu machen)

Nach einem benutzerdefinierten Layout, kundenspezifische Adapter zu schaffen und meine benutzerdefinierten Adapter instanziiert wird, weiß ich nicht, was zu tun ist.

Ich habe versucht, meinen benutzerdefinierten Adapter in meinem MainActivity instanziieren dann MainActivity m = new MainActivity(); in meinem Parser.class erstellen und verwenden nur die Textviews meiner benutzerdefinierten Listenansicht wie m.name_tv.setText(name); und m.price_tv.setText(price) dann R.layout.list_layout die android.R.layout.simple_list_item_1 zu meinen benutzerdefinierten Listenansicht Layout zu ändern.

Ich habe gerade experimentiert, weil ich Probleme habe zu verstehen. Bitte helfen.

Das ist mein Parser.class

public class Parser extends AsyncTask<Void,Integer,Integer> { 



Context c; 
ListView lv; 

String data; 


ArrayList<String> categories = new ArrayList<>(); 
ProgressDialog pd; 

public Parser(Context c, String data, ListView lv) { 
    this.c = c; 
    this.data = data; 
    this.lv = lv; 

} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    pd = new ProgressDialog(c); 
    pd.setTitle("Parsing Data"); 
    pd.setMessage("Please Wait..."); 
    pd.show(); 
} 

@Override 
protected Integer doInBackground(Void... params) { 


    return this.parse(); 
} 

@Override 
protected void onPostExecute(Integer integer) { 
    super.onPostExecute(integer); 


    if(integer == 1) 
    { 
     //ADAPTER 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(c, android.R.layout.simple_list_item_1, categories); 
     lv.setAdapter(adapter); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       if(position == 0){ 



       } 


      } 
     }); 

    }else 
    { 
     Toast.makeText(c,"Unable to Parse",Toast.LENGTH_SHORT).show(); 
    } 
    pd.dismiss(); 
} 

//PARSE RECEIVED DATA 
private int parse(){ 


    try 
    { 

     //ADD THAT DATA TO JSON ARRAY FIRST 
     JSONArray ja = new JSONArray(data); 


     //CREATE JO OBJECT TO HOLD A SINGLE ITEM 
     JSONObject jo = null; 

     categories.clear(); 

     //LOOP THROUGH ARRAY 
     for(int i =0 ; i<ja.length();i++) 
     { 
      jo = ja.getJSONObject(i); 
      //RETRIEVE NAME 
      name=jo.getString("item_name"); 
      price=jo.getString("item_price"); 

      //ADD TO ARRAY LIST 
      categories.add(name + " " + price); 





     } 
     return 1; 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 


    return 0; 
} 

}

Sollte es besser sein, nicht die Klassen zu trennen, oder es wird die gleiche Arbeit?

Antwort

0

sollten Sie Antwort von Web-Service erhalten und es (JSON-Objekt oder JSON-Array) analysieren in einem Schritt

Sie diese in einem guten Weg erreichen kann,

Erste erstellen Klasse mit json Attribute

nennen

in Ihrem Fall

Class JsonItem { 
string item_name; 
string item_price; 

// create getter and setter 

} 

Zweite Verwendung Gson Ihre respons zu analysieren e

Gson gson = new Gson(); 

// 1. JSON to Java object, read it from a file. 
JsonItem staff = gson.fromJson(YOUR_JSON_Here, JsonItem.class); 

, das alles, was ich Ihnen meine Frage sir gelesen haben glaube nicht, dass

+0

ist. Ich kann meine Daten von meinem Server analysieren. Ich möchte nur einen Button zu meiner Listview hinzufügen. –

+0

yea, weil du falsche Richtung nimmst, sollte Parse-Klasse Verweis auf Listview tragen, und warum du nicht den Knopf in deine Mainactivity steckst –

+0

Ich löste mein eigenes Problem. Wie kann ich meine Frage beantworten? –

Verwandte Themen