import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Path.FillType;
import android.graphics.drawable.Icon;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.support.v4.util.LruCache;
import android.widget.ImageView;
import android.widget.ListView;
@SuppressLint("NewApi")
public class ImageLoader {
private ImageView mImageview;
private ListView mListView;
private Set<NewsAdapter> mTask;
private LruCache<String, Bitmap> mCache;
public ImageLoader( ){
mTask = new HashSet<NewsAdapter>();
int maxMemory = (int) Runtime.getRuntime().maxMemory();
int cacheSize = maxMemory / 4 ;
mCache = new LruCache<String, Bitmap>(cacheSize){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();
}
};
}
public void loadImages(int start,int end){
for(int i = start ; i<end;i++ ){
String url = NewsAdapter.urls[i];
}
}
public void addBitemapToCache(String url,Bitmap bitmap)
{
if(getbitemapFromCache(url)==null){
mCache.put(url, bitmap);
}
}
public Bitmap getbitemapFromCache(String url){
return mCache.get(url);
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
mImageview.setImageBitmap((Bitmap) msg.obj);
};
};
public void showImagebyThread(ImageView ivIcon, final String url) {
mImageview = ivIcon;
new Thread() {
@Override
public void run() {
super.run();
Bitmap bitmap = getBitempFromURL(url);
Message message = Message.obtain();
message.obj = bitmap;
handler.sendMessage(message);
}
}.start();
}
public Bitmap getBitempFromURL(String urlString) {
Bitmap bitmap;
InputStream is = null;
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
is = new BufferedInputStream(connection.getInputStream());
bitmap = BitmapFactory.decodeStream(is);
connection.disconnect();
return bitmap;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
public void showImageByasyncTask(ImageView imageview, String url) {
Bitmap bitmap = getbitemapFromCache(url);
if(bitmap==null){
new newsAsynctask(imageview,url).execute(url);
}else{
imageview.setImageBitmap(bitmap);
}
}
private class newsAsynctask extends AsyncTask<String, Void, Bitmap> {
private ImageView mimageview;
private String mUrl;
public newsAsynctask(ImageView img , String url) {
mimageview = img;
mUrl=url;
}
@Override
protected Bitmap doInBackground(String... arg0) {
String url = arg0[0];
Bitmap bitmap = getBitempFromURL(url);
if(bitmap!=null){
addBitemapToCache(url, bitmap);
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (mimageview.getTag().equals(mUrl)) {
mimageview.setImageBitmap(result);
}
}
private Bitmap getBitmapfromurl(String string) {
return null;
}
}
}
package com.example.newimooc;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView mListview;
private static String URL="http://www.imooc.com/api/teacher?type=4&num=30";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListview = (ListView) findViewById(R.id.lv_main);
NewsAsyncTask task = new NewsAsyncTask();
task.execute(URL);
}
class NewsAsyncTask extends AsyncTask<String, Void, List<NewsBean>>{
@Override
protected List<NewsBean> doInBackground(String... params) {
return getJsonData(params[0]);
}
@Override
protected void onPostExecute(List<NewsBean> result) {
super.onPostExecute(result);
NewsAdapter adapter = new NewsAdapter(MainActivity.this, result);
mListview.setAdapter(adapter);
}
}
private List<NewsBean> getJsonData(String URL) {
List<NewsBean> newsbeanList = new ArrayList<NewsBean>();
try {
String jsonString = readStream(new URL(URL).openStream());
JSONObject jsonobject;
NewsBean newsbean;
jsonobject = new JSONObject(jsonString);
JSONArray jsonarray = jsonobject.getJSONArray("data");
for (int i = 0; i < jsonarray.length(); i++) {
jsonobject = jsonarray.getJSONObject(i);
newsbean = new NewsBean();
newsbean.newsiconrul = jsonobject.getString("picSmall");
newsbean.newstitle = jsonobject.getString("name");
newsbean.newscontent = jsonobject.getString("description");
newsbeanList.add(newsbean);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return newsbeanList;
}
private String readStream(InputStream is){
InputStreamReader isr ;
String result = "";
try {
String line = "";
isr = new InputStreamReader(is,"utf-8");
BufferedReader br = new BufferedReader(isr);
while((line = br.readLine())!=null)
{
result +=line;
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
package com.example.newimooc;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.AbsListView;
public class NewsAdapter extends BaseAdapter implements OnScrollListener{
private List<NewsBean> mList;
private LayoutInflater mInflater;
private ImageLoader imageLoader;
private int mstart,mend;
public static String[] urls;
public NewsAdapter(Context context,List<NewsBean> data){
mList = data;
mInflater = LayoutInflater.from(context);
imageLoader = new ImageLoader();
urls = new String[data.size()];
for(int i = 0 ;i<data.size();i++){
urls[i]=data.get(i).newsiconrul;
}
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int arg0) {
return mList.get(arg0);
}
@Override
public long getItemId(int method) {
return method;
}
@Override
public View getView(int postion, View convertivew, ViewGroup parent) {
ViewHolder viewholder= null;
if (convertivew==null) {
viewholder = new ViewHolder();
convertivew = mInflater.inflate(R.layout.item_layout, null);
viewholder.ivIcon= (ImageView) convertivew.findViewById(R.id.iv_icon);
String url = mList.get(postion).newsiconrul;
viewholder.ivIcon.setTag(url);
imageLoader.showImageByasyncTask(viewholder.ivIcon, mList.get(postion).newsiconrul);
viewholder.tvtitle = (TextView) convertivew.findViewById(R.id.tv_title);
viewholder.tvcontent = (TextView) convertivew.findViewById(R.id.tv_content);
convertivew.setTag(viewholder);
}else{
viewholder = (ViewHolder) convertivew.getTag();
}
imageLoader.showImageByasyncTask(viewholder.ivIcon,mList.get(postion).newsiconrul);
viewholder.tvtitle.setText(mList.get(postion).newstitle);
viewholder.tvcontent.setText(mList.get(postion).newscontent);
return convertivew;
}
class ViewHolder{
public TextView tvtitle,tvcontent;
public ImageView ivIcon;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int arg3) {
mstart = firstVisibleItem;
mend = firstVisibleItem+visibleItemCount;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState == SCROLL_STATE_IDLE)
{
}else{
}
}
}
package com.example.newimooc;
public class NewsBean {
public String newsiconrul;
public String newstitle;
public String newscontent;
}