我是android的新开发者。我在我的应用程序中使用soap对象与.net数据库服务进行通信。我从数据库服务器获取响应作为字符串。但我的意图是当我从数据库服务器获取一个字符串作为响应然后imediatly视图作为文本视图同样我得到图像编码string.how以获得响应imedialty作为视图。我编写的代码如下:
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]);
}
从上面的代码我一次显示所有消息。但在这种情况下,响应是花费时间,然后我得到空白屏幕。在这里,我的目的是当我得到一个字符串响应然后我将在下次下一次类似的直到reposnse大小完成时将该字符串视为文本视图。
答案 0 :(得分:1)
您可以做的是在不等待回复的情况下显示Listview,并从后台线程添加对messages
的回复并致电
mAdapter.notifyDatasetChanged();
这是LazyLoading
的概念,我希望它能够运作
<强>更新强>
runOnUiThread(new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
}
});
答案 1 :(得分:1)
使用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.
}
}