2011-09-13 8 views
5

Soy un nuevo desarrollador en Android. Estoy trabajando con soap object en mi aplicación para comunicarme con los servicios de .net db. Recibo respuestas como cadenas desde el servidor de bases de datos. Pero mi intención es cuando obtengo una cadena del servidor de db como respuesta, entonces veo de manera similar como vista de texto. De manera similar, obtengo imágenes codificadas en cadena. Cómo obtener respuesta como lectura. He escrito código como sigue:¿Cómo mostrar la respuesta de cadena de db como una por una en Android?

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

estoy enviando la solicitud como XML al servidor db

La respuesta del servidor db está en la lista:

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(); 

       } 

me han escrito un adaptador de base clase en esa clase tenemos un método como getView he implementado de la siguiente manera:

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]); 
    } 

Desde el código anterior, estoy mostrando todos los mensajes a la vez. Pero en esta situación, la respuesta está tomando tiempo, entonces recibo una pantalla en blanco. Aquí mi intención es cuando recibo una respuesta de cadena, luego veré esa cadena como vista de texto la próxima vez, de manera similar, hasta que el tamaño de reposnición haya finalizado.

Respuesta

1

Lo que puede hacer es mostrar la vista de lista sin esperar la respuesta y del subproceso de fondo añadir las respuestas a messages y llame

mAdapter.notifyDatasetChanged(); 

Este es el concepto de LazyLoading y espero que debería funcionar

Actualizar

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

Hey ingsaurabh, he creado lazy loading mAdater hormiga objeto llamado como mAdapter.notifyDatasetChanged(); pero no es aplicable para ver imedialty, cuando recibo un mensaje como string.plzzz ¿podría darle una buena solución? –

+0

Actualizado la respuesta compruebe que – ingsaurabh

+0

oye no hay diferencia lo mismo que ningún efecto –

1

utilizar la clase AsyncTask para trabajar en segundo plano proceso como éste forma

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

hey Pratik recibo mensajes de la tierra de atrás, pero no aplicar para ver. si recibo una respuesta como "hai" entonces me gustaría ver que hai.plzzz da una buena solución –

Cuestiones relacionadas