Как отобразить строковый ответ из БД по одному в Android? - PullRequest
5 голосов
/ 13 сентября 2011

Я новый разработчик в Android. Я работаю с объектом мыла в моем приложении для связи со службами .net db. Я получаю ответ в виде строк с сервера БД. Но я намереваюсь получить строку с сервера базы данных в качестве ответа, а затем сразу же просмотреть как текстовое представление, аналогично получая изображения, закодированные как string.how, чтобы получить немедленный ответ в виде представления. Я написал код следующим образом:

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

Я отправляю запрос в виде XML на сервер базы данных

Ответ от сервера базы данных находится в списке:

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

               } 

В этом классе я написал базовый адаптер , у нас есть метод getView, который я реализовал следующим образом:

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

Из приведенного выше кода я отображаю все сообщения одновременно. Но в этой ситуации ответ занимает много времени, тогда я получаю пустой экран. Здесь я собираюсь получить ответ на строку, и в следующий раз я буду просматривать эту строку как текстовое представление, пока не завершится аналогичный размер.

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

используйте класс AsyncTask для работы в фоновом режиме следующим образом

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.
     }
}
1 голос
/ 13 сентября 2011

Что вы можете сделать, это отобразить Listview, не ожидая ответа, и из фонового потока добавить ответы к messages и позвонить

mAdapter.notifyDatasetChanged();

Это понятие LazyLoading, и я надеюсь, что оно должно работать

Обновление

runOnUiThread(new Runnable() {
public void run() {
    adapter.notifyDataSetChanged();
}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...