从Url下载图像并在ListView android中显示时出现空白屏幕
我从URL获取JSON响应,并将其转换为字符串。我从响应中获取图像的URL。我想从URL下载该图像并将其显示在ListView中。但这需要很多时间,在下载所有图像之前会显示一个空白屏幕。屏幕显示时间约为40-50秒。而且ListView不是很平滑。如何防止空白屏幕出现? 这是我的密码:-从Url下载图像并在ListView android中显示时出现空白屏幕,android,json,image,android-alertdialog,progressdialog,Android,Json,Image,Android Alertdialog,Progressdialog,我从URL获取JSON响应,并将其转换为字符串。我从响应中获取图像的URL。我想从URL下载该图像并将其显示在ListView中。但这需要很多时间,在下载所有图像之前会显示一个空白屏幕。屏幕显示时间约为40-50秒。而且ListView不是很平滑。如何防止空白屏幕出现? 这是我的密码:- String registerContet = "myUrl"; String items; try { items = new FetchItems().execu
String registerContet = "myUrl";
String items;
try
{
items = new FetchItems().execute(registerContet).get();
pDialog = new ProgressDialog(this).show(Home.this, "Fetching news items", "Please wait..");
JSONArray jObject = new JSONArray(items);
for (int i = 0; i < jObject.length(); i++)
{
JSONObject menuObject = jObject.getJSONObject(i);
String title= menuObject.getString("Title");
String description= menuObject.getString("BodyText");
String thumbnail= menuObject.getString("ThumbnailPath");
String newsUrl = menuObject.getString("Url");
String body = menuObject.getString("Body");
String newsBigImage = menuObject.getString("ImageBlobUrls");
map = new HashMap<String,String>();
map.put(SOURCETITLE, title);
map.put(TITLE, description);
map.put(THUMBNAILPATH, thumbnail);
map.put(BODY, body);
map.put(URL, newsUrl);
map.put(IMAGEBLOBURLS,newsBImage);
myNList.add(map);
}
itemsAdapter = new LazyAdapter(Home.this, myNList);
if(pDialog!=null && pDialog.isShowing())
{
pDialog.dismiss();
}
nList.setAdapter(itemsAdapter);
nList.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0,
View arg1, int position, long arg3)
{
// TODO Auto-generated method stub
myDialog = new ProgressDialog(Home.this).show(Home.this, "Fetching news..", "Just a moment");
HashMap<String, String> myMap = myNList.get(position);
Intent nIntent = new Intent(Home.this,NDetails.class);
newsIntent.putExtra("NItems", myMap);
startActivity(nIntent);
}
});
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private class FetchItems extends AsyncTask<String, String, String>
{
// TODO Auto-generated method stub
ProgressDialog myDialog;
@Override
protected String doInBackground(String... params)
{
// TODO Auto-generated method stub
HttpResponse response =null;
String resultString = "";
String myResponseBody = "" ;
// Creating HTTP client
HttpClient httpClient = new DefaultHttpClient();
// Creating HTTP Post
HttpGet request = new HttpGet(params[0]);
try
{
response = httpClient.execute(request);
if(response.getStatusLine().getStatusCode()== 200)
{
HttpEntity entity = response.getEntity();
if (entity != null)
{
InputStream inputStream = entity.getContent();
myResponseBody = convertToString(inputStream);
}
}
}
catch(Exception e)
{
}
return myResponseBody;
}
@Override
protected void onPostExecute(String result)
{
// TODO Auto-generated method stub
super.onPostExecute(result);
/*if(myDialog.isShowing())
{
myDialog.dismiss();
}*/
}
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
super.onPreExecute();
/*myDialog = new ProgressDialog(Home.this);
myDialog.setMessage("Loading");
myDialog.show();*/
}
String registerContet=“myUrl”;
字符串项;
尝试
{
items=new FetchItems().execute(registerContet.get();
pDialog=newprogressdialog(this).show(Home.this,“获取新闻项目”,“请稍候”);
JSONArray作业对象=新JSONArray(项目);
对于(int i=0;i
谁能告诉我如何解决这个问题。
谢谢使用
通用图像加载器
,它可以缓存您的图像,并在许多方面为您提供帮助
以下是特点:
- 多线程图像加载
- 广泛调整ImageLoader的可能性 配置(线程执行器、下载器、解码器、内存和光盘 缓存、显示图像选项等)
- 形象的可能性 缓存在内存和/或设备的文件系统(或SD卡)中
- 可“监听”加载过程可定制 每个显示图像调用都有单独的选项
下面是。您可以进一步阅读,它很容易实现。您应该使用单独的子线程从服务器加载图像。 使用通用图像加载器加载图像并保存图像缓存的最佳高效方法
load.displayImage(mimagebURL(), holder.image,option);
使用此库,您不需要在线程上创建加载图像
希望这将帮助你你可以使用通用图像加载器类来实现这一点,也可以使用惰性加载。你能告诉我在哪里以及如何在我的代码中使用它吗