Listview从Json文件异步加载图片,参考网上的例子改良加了点击可跳转网页功能。但是发现,Listview读Json,有时显的很慢,等几秒都没载进数据。还黑屏网上看到可用AsyncTask加载可加快。请问怎加AsyncTask在我的Listveiw上让加载Json加入载入中效果,请问怎加快载入优化?代码打包下载:http://www.apkbus.com/android-95420-1-1.html[AsyncListImage.java package cn.wangmeng.test; import java.util.ArrayList;
 import java.util.List;
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.AdapterView.OnItemClickListener;
 public class AsyncListImage extends Activity  {
   static final String KEY_TITLE = "text";
 static final String KEY_ARTIST = "webInfo"; private ListView list;
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
      // 创建一个线程来处理下载文件操作
        final ImageLoadingDialog dialog = new ImageLoadingDialog(this);
   dialog.setCanceledOnTouchOutside(false);
   dialog.show();
   // 两秒后关闭后dialog
   new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
     dialog.dismiss();
    }
   }, 1000 * 5);   new Thread(new Runnable() {
    @Override
    public void run() {
     // TODO Auto-generated method stub
     Message msg = new Message();
     msg.what = 0;
     
     //获取歌曲列表
    msg.obj = getListView();
     handler.sendMessage(msg);
    }
   }).start();
 }
 private Handler handler = new Handler(){
   public void handleMessage(Message msg) {
    switch(msg.what){
    case 0 :
         list=(ListView)findViewById(R.id.list2);
         List<ImageAndText> dataArray=new ArrayList<ImageAndText>();
         try {
          dataArray = JsonService.getJson();
   } catch (Exception e) {
    System.out.println("新闻载入失败");
    e.printStackTrace();
   }
         
      
         //ImageAndTextListAdapter adapter=new ImageAndTextListAdapter(this, dataArray, list);
        ImageAndTextListAdapter adapter = new ImageAndTextListAdapter(AsyncListImage.this,dataArray, list,new String[] {KEY_TITLE, KEY_ARTIST}, new int[] {R.id.text,R.id.text2});
        list.setAdapter(adapter);
        list.setOnItemClickListener(new ListViewItemOnClickListener());
     break;
    }
   }
 };
       
     class ListViewItemOnClickListener implements OnItemClickListener {
       @Override
    
 public void onItemClick(AdapterView<?> parent, View view, int position,
 long id) {
 //String name = list.get(position).getLat()+","+list.get(position).getLon(); //String text = ((TextView) view.findViewById(R.id.text)).getText().toString();
 String webInfo = ((TextView) view.findViewById(R.id.text2)).getText().toString();
 //String imageUrl = ((TextView) view.findViewById(R.id.image)).getText().toString();
 //String imageUrl = ((ImageView) view.findViewById(R.id.image)).getContext().toString();
     Intent intent = new Intent(getApplicationContext(), myBrowserActivity.class);
     //intent.putExtra(KEY_TITLE, text);
      
      //Intent intent=new Intent();
      //intent.setAction("mybrowser");
      //intent.putExtra("myurl", "webInfo2");
    intent.putExtra(KEY_ARTIST,webInfo );
     startActivity(intent); } }
 private ListView getListView() {
   // TODO Auto-generated method stub
   return null;
 }      } JsonService.java
 package cn.wangmeng.test;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 import org.json.JSONArray;
 import org.json.JSONObject;
 public class JsonService
 {
 public static List<ImageAndText> getJson() throws Exception
 {
   //向服务器端拿取数据  //URL url=new URL("http://www.gdsjx.com/photo/logo.txt");
   HttpURLConnection conn=(HttpURLConnection)url.openConnection();
   //conn.setConnectTimeout(5*1000);
   conn.setRequestMethod("GET");
   
   InputStream inStream=conn.getInputStream();
   byte[] data = new byte[4096];
   ByteArrayOutputStream outStream = new ByteArrayOutputStream();
   int count = -1;
   while((count = inStream.read(data,0,4096)) != -1) {
    outStream.write(data,0,count);
   }
   String StringData=new String(outStream.toByteArray());
   System.out.println("StringData");
   //http://code.google.com/p/googlegetOutputStream().write(StringData.toString().getBytes("UTF-8"));
   //setContentType("text/json; charset=UTF-8");  //JSON的类型为text/json
   //一,JSON解析,前提是:服务器端发送JSON数据格式的东西,就用JSON来解析
  List<ImageAndText> listbean=JsonService.getImageAndTexts(StringData);
   return listbean;
   //二,采用XML来解析得到服务器端的数据,就像解析平常解析XML数据一样,前提是服务器端发送XML数据
}private static void setContentType(String string) {
   // TODO Auto-generated method stub
   
 }
 private static ByteArrayOutputStream getOutputStream() {
   // TODO Auto-generated method stub
   return null;
 }
 public static List<ImageAndText> getImageAndTexts(String jsondata) throws Exception //JSON解析方式
{
   //JSON数据格式 [{"id":"1","name":"admin","longtime":"40"},{"id":"1","name":"admin","longtime":"40"}]
   List<ImageAndText> listBean=new ArrayList<ImageAndText>();
   //先把jsondata这个字符串转换成一个数组
  JSONArray jsonarray=new JSONArray(jsondata);
   for(int i=0;i<jsonarray.length();i++)
   {
    //再把数组的第i项转换成一个json对象。
   JSONObject jsonobj=jsonarray.optJSONObject(i);
    //重json对象里面取值
   String url=jsonobj.getString("url"); 
    String webInfo=jsonobj.getString("webInfo"); 
    //String webName=new String(buffer,"gbk");
    //String webName=jsonobj.getString("webName"); 
    String webName=jsonobj.optString("webName","gbk"); 
    //把取到的值添加对bean中,并且把bean对象给保存起来
   ImageAndText testbean=new ImageAndText(url,webName,webInfo);
    listBean.add(testbean);
    //给test重新赋值一下
   testbean=null;
   }
   return listBean;
   
 }
 }
listview  json

解决方案 »

  1.   

    没人会?有没json读图片分页代码分享一下?
      

  2.   

    json怎么读取图片 都是通过图片的url获取图片的吧 还是json获取图片连接?
      

  3.   

    是的,读URL链接,然后显示图片分页,上边那段就可以显示图片,不过加载有点慢,可能没做分页原因。
      

  4.   

    没看完你的代码,不过有几点建议不管JSON 怎么转成图片,这些工作肯定是线程操作,
    另外即使线程操作,如果来一条数据你就handle一次UI刷新,那界面肯定还是会很卡,所以你要考虑批量处理,或者像有些同学说的分页处理,或者当只去请求你当前显示的那些列表项
      

  5.   

    数据操作开个单独的线程处理,解析出json文本数据时刷新list,获得到图片的时候刷新list,这样就不会黑屏了