2011-09-13 11 views
5

Jestem nowym programistą w Androidzie. Pracuję z obiektem soap w mojej aplikacji do komunikacji z usługami .net db. Otrzymuję odpowiedź jako ciągi z serwera DB. Ale moim zamiarem jest, gdy dostaję ciąg z serwera bazy danych jako odpowiedź, a następnie imediatly view jako widok tekstowy podobnie otrzymuję obrazy zakodowane string.how, aby uzyskać odpowiedź imedialty jako widok. Napisałem kod w następujący sposób:Jak wyświetlić odpowiedź łańcuchową z db jako jeden po drugim w systemie Android?

String xml="<spGetUserMessages><SearchLocation></SearchLocation><LoginUserID>"+Userid+"</LoginUserID></spGetUserMessages>"; 

przesyłam wniosek w formacie XML do serwera db

Odpowiedź z serwera db jest na liście:

List<MessageClass> response=new ParseXml().getUserMessages(new Generic().getMessages(xml)); 

    String messages=new String[response.size()]; 

    for(int i=0;i<response.size();i++) 
     { 

      //the response values are saved in messages array 
      messages[i]=response.get(i).getmessage(); 

       } 

Pisałem adaptera bazowej klasy w tej klasie mamy metodę, jak GetView mam zaimplementowane w następujący sposób:

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 


    if(convertView==null) 
     vi = inflater.inflate(R.layout.item, null); 



    TextView text=(TextView)vi.findViewById(R.id.text);; 
    ImageView image=(ImageView)vi.findViewById(R.id.image); 

    Log.v("rrrrrrrrrr", "rrrrrrrr"+messages[position]); 

    text.setText(messages[position]); 
    } 

Z powyższego kodu wyświetlam wszystkie wiadomości naraz. Ale w tej sytuacji odpowiedź wymaga czasu, a ja dostaję pusty ekran. Tutaj moim zamiarem jest, gdy dostaję odpowiedź łańcuchową, wtedy zobaczę ten ciąg jako widok tekstowy następnym razem następnym podobnie, aż do ukończenia rozmiaru reposnse.

Odpowiedz

1

Co można zrobić, to wyświetlić ListView nie czekając na odpowiedź i od wątku tła dodawać odpowiedzi do messages i nazywają

mAdapter.notifyDatasetChanged(); 

To pojęcie LazyLoading i mam nadzieję, że to powinno działać

Aktualizacja

runOnUiThread(new Runnable() { 
public void run() { 
    adapter.notifyDataSetChanged(); 
} 
}); 
+0

hej ingsaurabh, i utworzonej LazyLoading mAdater obiektu ant zwany jako mAdapter.notifyDatasetChanged(); ale to nie dotyczy widoku imedialty, kiedy dostaję jedną wiadomość jako string.plzzz mógłbym podać dobre rozwiązanie na nim –

+0

Zaktualizowano odpowiedź sprawdź, czy – ingsaurabh

+0

hej bez różnicy samo bez efektu –

1

użyj klasy AsyncTask do pracy w tle Proces ten sposób jak

private String messages[]; 
class BackgroundTask extends AsyncTask<Void, Void, Void>{ 

    public void doInBackground(Void... arg){ 

     List<MessageClass> response=new ParseXml().getUserMessages(new Generic().getMessages(xml)); 

     messages=new String[response.size()]; 

     for(int i=0;i<response.size();i++){ 
     //the response values are saved in messages array 
     messages[i]=response.get(i).getmessage(); 

     } 
    } 

    public void postExecute(Void result){ 
      // here you initialize the listview so the getview() method will call after fetching the response and store into the array. 
    } 
} 
+0

hej Pratik otrzymuję wiadomości z tyłu ale nie stosuje się do view.if otrzymuje odpowiedź jako "hai", a następnie chciałbym zobaczyć, że hai.plzzz daje dobre rozwiązanie –

Powiązane problemy