Android 安卓内存泄漏导致内存不足错误。使用查看寻呼机。

Android 安卓内存泄漏导致内存不足错误。使用查看寻呼机。,android,android-fragments,memory-leaks,android-viewpager,out-of-memory,Android,Android Fragments,Memory Leaks,Android Viewpager,Out Of Memory,我从以下代码中得到内存泄漏。它是一个包含mainViewPager的活动。该viewPager返回4个不同的片段,每个片段都有自己的viewPager,其中包含从同一任务检索的图像。这是我的密码。当我运行它时,我可以在页面之间滚动一些延迟。但当我退出“返回”活动时,会出现内存不足错误。所以这一定是内存泄漏。我一直盯着我的代码看,我不知道为什么。请帮帮我。。。另外,我正在使用毕加索图书馆从服务器上获取图像 活动 package info.nightowl.nightowl; import inf

我从以下代码中得到内存泄漏。它是一个包含mainViewPager的活动。该viewPager返回4个不同的片段,每个片段都有自己的viewPager,其中包含从同一任务检索的图像。这是我的密码。当我运行它时,我可以在页面之间滚动一些延迟。但当我退出“返回”活动时,会出现内存不足错误。所以这一定是内存泄漏。我一直盯着我的代码看,我不知道为什么。请帮帮我。。。另外,我正在使用毕加索图书馆从服务器上获取图像

活动

package info.nightowl.nightowl;

import info.nightowl.nightowl.LocationsGridFragment.onLocationSelectedListener;

public class NightWatch extends FragmentActivity implements onLocationSelectedListener {

public static ArrayList<String> imageUrl = new ArrayList<String>();
public static ArrayList<String> dateList = new ArrayList<String>();
public static ArrayList<String> trendList = new ArrayList<String>();
public static ArrayList<String> nameList = new ArrayList<String>();
public static ArrayList<String> imageLocationsList = new ArrayList<String>();
public static ArrayList<String> imageClubsList = new ArrayList<String>();

public static ArrayList<String> locationsList = new ArrayList<String>();
public static ArrayList<String> clubsList = new ArrayList<String>();
public static ArrayList<String> locationImagesUrl = new ArrayList<String>();
public static ArrayList<String> addressList = new ArrayList<String>();

public static ArrayList<String> hotImageUrl = new ArrayList<String>();
public static ArrayList<String> hotDateList = new ArrayList<String>();
public static ArrayList<String> hotTrendList = new ArrayList<String>();
public static ArrayList<String> hotNameList = new ArrayList<String>();
public static ArrayList<String> hotImageLocationsList = new ArrayList<String>();
public static ArrayList<String> hotImageClubsList = new ArrayList<String>();

FetchClubs fetchClubs = null;

public int width, height;
public JSONArray list;
public final String IMAGE_URL = "http://www.night-owl.info/webservice/";
SharedPreferences prefs;
static FeedFragment feedFragment;
static LocationsFragment locationsFragment;
static HotFragment hotFragment;
static ClubsFragment clubsFragment;
CustomViewPager customPager;
CustomViewPageAdapter theAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_night_watch);

    //Method to set up the tabs
    getSizes();
    setupFragments();
    updateList();

    prefs = getSharedPreferences("prefs", 0);
}

//Called from the fragment which fetches image
public void loadBitmap(String image, ImageView imageView, boolean grid, TextView loadText) {

    int size;
    if (grid) size = (width-width/9)/3;
    else size = width - width/9;
    Log.d("Pager About to load", "Pager Loading bitmap picasso");

    getBitmap load = new getBitmap(image, imageView, size, loadText);
    load.execute(image);

}

public class getBitmap extends AsyncTask<String, Void, Bitmap> {
    String loadImageUrl;
    Bitmap bmp;
    int sizes;
    TextView loadingTextView;
    private final WeakReference<ImageView> imageViewReference;

    public getBitmap(String image, ImageView imageView, int size, TextView loadText){

        imageViewReference = new WeakReference<ImageView>(imageView);
        sizes = size;
        loadingTextView = loadText;
    }

    @Override
    protected void onPreExecute() {
        Log.d("async", "async starting");
        super.onPreExecute();
    }

    @Override
    protected Bitmap doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        try {
            bmp = Picasso.with(NightWatch.this).load(IMAGE_URL+arg0[0]).resize(sizes, 
sizes).get();

        } catch (IOException e) {
            Log.d("ioexc", "Pager IOEXCEPTION IDIOT!!!");
            e.printStackTrace();
        }
        return bmp;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        /*RoundedCornersDrawable drawable = new RoundedCornersDrawable(getResources(), bmp);
        loadImage.setImageDrawable(drawable);
        loadingTextView.setVisibility(View.GONE);
        loadImage.setVisibility(View.VISIBLE);*/

        if(imageViewReference != null && bitmap!= null) {
            final ImageView imageView = imageViewReference.get();
            if(imageView != null) {
                imageView.setImageBitmap(bitmap);
                loadingTextView.setVisibility(View.GONE);
                imageView.setVisibility(View.VISIBLE);
            }
        }

    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.feed, menu);
    return true;
}

//SET UP THE TWO TABS 'FEED' AND 'LOCATIONS'

//Update ArrayList of the image names
public void updateList() {
    imageUrl.clear();
    trendList.clear();
    dateList.clear();
    nameList.clear();
    imageLocationsList.clear();
    imageClubsList.clear();

    locationsList.clear();
    clubsList.clear();
    locationImagesUrl.clear();
    addressList.clear();

    hotImageUrl.clear();
    hotTrendList.clear();
    hotDateList.clear();
    hotNameList.clear();
    hotImageLocationsList.clear();
    hotImageClubsList.clear();

    new getImageUrl().execute();
    new getLocationsUrl().execute();
}

class getImageUrl extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... arg0) {

        JSONParser parser = new JSONParser();
        JSONObject json = parser.getJSONFromUrl(IMAGE_URL + "updateimages.php");

        try {

            list = json.getJSONArray("posts");

            for(int i = 0; i < list.length(); i++) {
                JSONObject c = list.getJSONObject(i);
                String imgSrc = c.getString("source");
                String trend = c.getString("trend");
                String date = c.getString("date");
                String name = c.getString("name");
                String location = c.getString("location");
                String club = c.getString("club");

                imageUrl.add(imgSrc);
                dateList.add(date);
                trendList.add(trend);
                nameList.add(name);
                imageLocationsList.add(location);
                imageClubsList.add(club);

                Log.d("async trend", trendList.get(0));
            }

            Log.d("Got list", imageUrl.get(0) + " " + trendList.get(0));

        } catch(JSONException je) {
            je.printStackTrace();   
        }

        try {

            list = json.getJSONArray("hot");

            for(int i = 0; i < list.length(); i++) {
                JSONObject c = list.getJSONObject(i);
                String imgSrc = c.getString("source");
                String trend = c.getString("trend");
                String date = c.getString("date");
                String name = c.getString("name");
                String location = c.getString("location");
                String club = c.getString("club");

                hotImageUrl.add(imgSrc);
                hotDateList.add(date);
                hotTrendList.add(trend);
                hotNameList.add(name);
                hotImageLocationsList.add(location);
                hotImageClubsList.add(club);
                Log.d("async trend", trendList.get(0));
            }

            Log.d("Got list","hot list" + hotImageUrl.get(0) + " " + hotTrendList.get(0));

        } catch(JSONException je) {
            je.printStackTrace();   
        }

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        hotFragment.updateAdapter();
        feedFragment.updateAdapter();

    }
}

public void scrollMainPager(int pos) {
    customPager.setCurrentItem(pos, true);
}

public void scrollPager(int pos) {
    feedFragment.scrollPager(pos);
}

public void setupFragments() {

    feedFragment = new FeedFragment();
    locationsFragment = new LocationsFragment();
    hotFragment = new HotFragment();
    clubsFragment = new ClubsFragment();

    customPager = (CustomViewPager) findViewById(R.id.customviewpager);
    customPager.setOffscreenPageLimit(3);
    theAdapter = new CustomViewPageAdapter(getSupportFragmentManager());
    customPager.setAdapter(theAdapter);
    customPager.setCurrentItem(1);
}


//GET SIZES OF SCREEN
public void getSizes(){
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    width = size.x;
    height = size.y;
}


public static class CustomViewPageAdapter extends FragmentStatePagerAdapter {

    public CustomViewPageAdapter(FragmentManager fm) {
        super(fm);

    }

    @Override
    public Fragment getItem(int arg0) {

        if(arg0 == 0) return hotFragment;
        else if(arg0 == 1) return feedFragment;
        else if(arg0 == 2) return locationsFragment;
        else if(arg0 == 3) return clubsFragment;

        return null;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 4;
    }

}

@Override
public void onLocationSelected(int position) {




}

}
package info.nightowl.nightowl;
导入info.nightowl.nightowl.LocationsGridFragment.onLocationSelectedListener;
公共类NightWatch扩展FragmentActivity实现onLocationSelectedListener{
公共静态ArrayList imageUrl=新ArrayList();
public static ArrayList dateList=new ArrayList();
公共静态ArrayList trendList=新建ArrayList();
public static ArrayList nameList=new ArrayList();
公共静态ArrayList imageLocationsList=新建ArrayList();
公共静态ArrayList imageClubsList=新建ArrayList();
public static ArrayList locationsList=new ArrayList();
public static ArrayList clubsList=new ArrayList();
公共静态ArrayList locationImagesUrl=新ArrayList();
公共静态ArrayList addressList=新ArrayList();
公共静态ArrayList hotImageUrl=新ArrayList();
public static ArrayList hotDateList=new ArrayList();
公共静态ArrayList hotTrendList=新建ArrayList();
公共静态ArrayList hotNameList=新建ArrayList();
公共静态ArrayList hotImageLocationsList=new ArrayList();
公共静态ArrayList hotImageClubsList=新建ArrayList();
FetchClubs FetchClubs=null;
公共int宽度、高度;
公共JSONArray列表;
公共最终字符串图像\u URL=”http://www.night-owl.info/webservice/";
共享引用优先权;
静态FeedFragment;
静态位置碎片位置碎片;
静态热片段热片段;
静态ClubsFragment ClubsFragment;
CustomViewPager customPager;
自定义视图页面适配器适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.activity\u night\u watch);
//方法来设置选项卡
getSizes();
setupFragments();
updateList();
prefs=getSharedReferences(“prefs”,0);
}
//从获取图像的片段调用
公共void加载位图(字符串图像、图像视图、布尔网格、文本视图加载文本){
整数大小;
如果(网格)大小=(宽度/9)/3;
其他尺寸=宽度-宽度/9;
Log.d(“寻呼机即将加载”,“寻呼机加载位图毕加索”);
getBitmap load=新建getBitmap(图像、图像视图、大小、加载文本);
加载。执行(图像);
}
公共类getBitmap扩展异步任务{
字符串loadImageUrl;
位图bmp;
整数大小;
文本视图加载文本视图;
私有最终WeakReference imageViewReference;
公共getBitmap(字符串图像、图像视图、整数大小、文本视图加载文本){
imageViewReference=新的WeakReference(imageView);
尺寸=尺寸;
loadingTextView=loadText;
}
@凌驾
受保护的void onPreExecute(){
Log.d(“异步”,“异步启动”);
super.onPreExecute();
}
@凌驾
受保护位图doInBackground(字符串…arg0){
//TODO自动生成的方法存根
试一试{
bmp=Picasso.with(NightWatch.this).load(IMAGE_URL+arg0[0]).resize(大小,
大小)get();
}捕获(IOE异常){
Log.d(“ioexc”,“寻呼机IOEXCEPTION傻瓜!!!”;
e、 printStackTrace();
}
返回bmp;
}
@凌驾
受保护的void onPostExecute(位图){
/*RoundedCornersDrawable drawable=新的RoundedCornersDrawable(getResources(),bmp);
loadImage.setImageDrawable(可绘制);
loadingTextView.setVisibility(View.GONE);
loadImage.setVisibility(View.VISIBLE)*/
if(imageViewReference!=null&&bitmap!=null){
最终ImageView=imageViewReference.get();
如果(imageView!=null){
设置图像位图(位图);
loadingTextView.setVisibility(View.GONE);
设置可见性(View.VISIBLE);
}
}
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.feed,menu);
返回true;
}
//设置两个选项卡“提要”和“位置”
//更新图像名称的ArrayList
公共void updateList(){
image url.clear();
trendList.clear();
dateList.clear();
nameList.clear();
imageLocationsList.clear();
imageClubsList.clear();
位置列表清除();
clubsList.clear();
位置ImageSurl.clear();
addressList.clear();
hotmageurl.clear();
hotTrendList.clear();
hotDateList.clear();
hotNameList.clear();
hotImageLocationsList.clear();
hotmageclubslist.clear();
新建getImageUrl().execute();
新建getLocationsUrl().execute();
}
类getImageUrl扩展了异步任务{
@凌驾
受保护的字符串doInBackground(字符串…arg0){
JSONParser=新的JSONParser();
JSONObject json=parser.getJSONFromUrl(IMAGE_URL+“updateimages.php”);
试一试{
list=json.getJSONArray(“posts”);
对于(int i=0;ipublic class FeedFragment extends Fragment implements OnClickListener {

ToggleButton buttonGrid;
static Spinner spinnerUploadStatus;
CustomEditText et;
CustomScrollTextView tv;
int width, height;
View view;
static boolean isGrid;
ViewPager mPager;
SharedPreferences prefs;
public ImagePagerAdapter mPageAdapter;
Button buttonSwitchFragment;

Integer[] b = { R.drawable.statusunpressed, R.drawable.red,
        R.drawable.green, R.drawable.blue };

List<Integer> spinnerList = new ArrayList<Integer>(Arrays.asList(b));
CustomSpinnerAdapter myAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {

    prefs = getActivity().getSharedPreferences("prefs", 0);
    getSizes();
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.activity_feed, container, false);

    setup();

    return view;
}

@SuppressLint("NewApi")
public void setup() {

    isGrid = false;

    mPager = (ViewPager) view.findViewById(R.id.myviewpager1);
    mPager.setOffscreenPageLimit(0);

    buttonGrid = (ToggleButton) view.findViewById(R.id.button_grid);
    buttonGrid.setOnClickListener(this);

    spinnerUploadStatus = (Spinner) view
            .findViewById(R.id.buttonUploadStatus);

    myAdapter = new CustomSpinnerAdapter(getActivity(),
            R.layout.item_simple_list_item, spinnerList);
    myAdapter
            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinnerUploadStatus.setAdapter(myAdapter);
    spinnerUploadStatus.setDropDownWidth((int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP, 50, getResources()
                    .getDisplayMetrics()));
    spinnerUploadStatus.setOnItemSelectedListener(myOnItemSelectedListener);
    spinnerUploadStatus.getBackground().setAlpha(0);

    buttonSwitchFragment = (Button) view
            .findViewById(R.id.buttonSwitchFragment);
    buttonSwitchFragment.setOnClickListener(this);

    Typeface font = Typeface.createFromAsset(getActivity().getAssets(),
            "NotCourierSans.ttf");
    et = (CustomEditText) view.findViewById(R.id.customEditText1);
    et.updateTypeFace(font);

    tv = (CustomScrollTextView) view
            .findViewById(R.id.customscrolltextview);
    tv.setText("WELCOME TO NIGHTOWL");
    tv.setTypeface(font);
    tv.start(width / 2500.0);

    Log.d("width", "width is " + width);
}

public void getSizes() {
    Display display = getActivity().getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    width = size.x;
    height = size.y;
}

@Override
public void onClick(View v) {

    switch (v.getId()) {

    case R.id.button_grid:

        isGrid = !isGrid;

        updateAdapter();
        break;
    case R.id.buttonSwitchFragment:
        ((NightWatch) getActivity()).scrollMainPager(2);
        break;

    }
}

public OnItemSelectedListener myOnItemSelectedListener = new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        int colour = arg2;

        spinnerUploadStatus.setSelection(0, true);
        et.sendText(prefs.getString("username", "username invalid"), colour);

    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }

};

public void scrollPager(int position) {

    isGrid = false;
    buttonGrid.setChecked(false);
    updateAdapter();

    mPager.setCurrentItem(position, true);
    Log.d("Pager", "PAGER UPDATED");
}

public static void disableButton(Boolean enabled) {
    spinnerUploadStatus.setEnabled(enabled);
}

public void updateAdapter() {
    int theSize;
    if (!isGrid)
        theSize = NightWatch.imageUrl.size();

    else if (NightWatch.imageUrl.size() % 9 > 0)
        theSize = NightWatch.imageUrl.size() / 9 + 1;
    else
        theSize = NightWatch.imageUrl.size() / 9;

    mPageAdapter = new ImagePagerAdapter(getChildFragmentManager(), theSize);
    mPager.setAdapter(mPageAdapter);

    Log.d("size of viewPager Adapter", "" + theSize);
}

public static class ImagePagerAdapter extends FragmentStatePagerAdapter {

    int mSize;

    public ImagePagerAdapter(FragmentManager fm, int size) {
        super(fm);

        mSize = size;
    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        Log.d("Starting imageDetailFragment", "");
        Log.d("Pager", "Pager starting fragment");

        Log.d("GRID", "fuck grid");
        if (!isGrid)
            return ImageDetailFragment.newInstance(
                    arg0, NightWatch.imageUrl, NightWatch.nameList,
                    NightWatch.trendList, NightWatch.dateList);
        else
            return GridFragment.newInstance(arg0, NightWatch.imageUrl);

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mSize;
    }
}

public class CustomSpinnerAdapter extends ArrayAdapter<Integer> {

    List<Integer> resourceId;
    Context c;

    public CustomSpinnerAdapter(Context context, int textViewResourceId,
            List<Integer> objects) {
        super(context, textViewResourceId, objects);

        resourceId = objects;
        c = context;

    }

    @Override
    public View getDropDownView(int position, View convertView,
            ViewGroup parent) {
        return getCustomDropdownView(position, convertView, parent);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }

    public View getCustomView(int position, View convertView,
            ViewGroup parent) {
        ImageView imageView = new ImageView(c);

        imageView.setImageResource(resourceId.get(position));
        imageView.setLayoutParams(new ListView.LayoutParams(
                (int) TypedValue.applyDimension(
                        TypedValue.COMPLEX_UNIT_DIP, 50, getResources()
                                .getDisplayMetrics()), (int) TypedValue
                        .applyDimension(TypedValue.COMPLEX_UNIT_DIP, 34,
                                getResources().getDisplayMetrics())));

        return imageView;
    }

    public View getCustomDropdownView(int position, View convertView,
            ViewGroup parent) {
        ImageView imageView = new ImageView(c);

        imageView.setImageResource(resourceId.get(position));
        imageView.setLayoutParams(new ListView.LayoutParams(
                (int) TypedValue.applyDimension(
                        TypedValue.COMPLEX_UNIT_DIP, 50, getResources()
                                .getDisplayMetrics()), (int) TypedValue
                        .applyDimension(TypedValue.COMPLEX_UNIT_DIP, 34,
                                getResources().getDisplayMetrics())));

        if (position == 0) {
            imageView.setVisibility(View.GONE);
        }

        return imageView;
    }

}

}
package info.nightowl.nightowl;

import java.io.IOException;
import java.util.ArrayList;

import com.example.nightowl.R;
import com.squareup.picasso.Picasso;

import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.Point;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class ImageDetailFragment extends Fragment implements OnClickListener {

int mImageNum;
ImageView imageView;
TextView trendTextView;
TextView nameTextView;
TextView dateTextView;
TextView loadingTextView;
Button upVoteButton, downVoteButton;
final String list = "voteList";
static SharedPreferences prefs;
SharedPreferences.Editor editor;
public ArrayList<String> imageUrl;
public ArrayList<String> trendList;
public ArrayList<String> nameList;
public ArrayList<String> dateList;
RelativeLayout.LayoutParams rParams;

int width, height;

static ImageDetailFragment newInstance(int imageNum,
        ArrayList<String> imageList, ArrayList<String> tempNameList,
        ArrayList<String> tempTrendList, ArrayList<String> tempDateList) {

    final ImageDetailFragment f = new ImageDetailFragment();
    Bundle args = new Bundle();
    args.putInt("imageNum", imageNum);
    args.putStringArrayList("imageList", imageList);
    args.putStringArrayList("nameList", tempNameList);
    args.putStringArrayList("trendList", tempTrendList);
    args.putStringArrayList("dateList", tempDateList);
    f.setArguments(args);
    return f;
}

public ImageDetailFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mImageNum = getArguments().getInt("imageNum");
        imageUrl = getArguments().getStringArrayList("imageList");
        nameList = getArguments().getStringArrayList("nameList");
        trendList = getArguments().getStringArrayList("trendList");
        dateList = getArguments().getStringArrayList("dateList");
    } else
        mImageNum = -1;
    prefs = getActivity().getSharedPreferences("prefs", 0);
    editor = getActivity().getSharedPreferences("prefs", 0).edit();
    getSizes();
    rParams = new RelativeLayout.LayoutParams((width - width/9), width - width/9);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    final View v = inflater.inflate(R.layout.image_detail_fragment,
            container, false);
    imageView = (ImageView) v.findViewById(R.id.imageView1);

    imageView.setVisibility(View.INVISIBLE);

    loadingTextView = (TextView) v.findViewById(R.id.loadingTextView);
    loadingTextView.setVisibility(View.VISIBLE);

    trendTextView = (TextView) v.findViewById(R.id.trendTextView);
    nameTextView = (TextView) v.findViewById(R.id.nameTextView);
    dateTextView = (TextView) v.findViewById(R.id.dateTextView);
    upVoteButton = (Button) v.findViewById(R.id.buttonUpVote);
    downVoteButton = (Button) v.findViewById(R.id.buttonDownVote);

    rParams.addRule(RelativeLayout.BELOW, nameTextView.getId());
    rParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    imageView.setLayoutParams(rParams);

    upVoteButton.setOnClickListener(this);
    downVoteButton.setOnClickListener(this);

    if (NightWatch.class.isInstance(getActivity())) {

        Typeface font = Typeface.createFromAsset(getActivity().getAssets(),
                "NotCourierSans.ttf");

        final String image = imageUrl.get(mImageNum);
        ((NightWatch) getActivity()).loadBitmap(image, imageView, false, loadingTextView);
        trendTextView.setText(trendList.get(mImageNum));
        nameTextView.setText(nameList.get(mImageNum));
        dateTextView.setText(dateList.get(mImageNum));

        updateButtonBackgrounds();

        loadingTextView.setTypeface(font);
        trendTextView.setTypeface(font);
        nameTextView.setTypeface(font);
        dateTextView.setTypeface(font);
        Log.d("fragment trend", NightWatch.trendList.get(0));

    }

    return v;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

}

@Override
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.buttonUpVote:

        if (prefs.getInt(imageUrl.get(mImageNum), 0) == -1) {
            downVoteButton
                    .setBackgroundResource(R.drawable.downvoteunpressed);
            upVoteButton.setBackgroundResource(R.drawable.upvotepressed);
            ((NightWatch) getActivity()).sendVote(1,
                    imageUrl.get(mImageNum));

        } else if (prefs.getInt(imageUrl.get(mImageNum), 0) == 0) {
            upVoteButton.setBackgroundResource(R.drawable.upvotepressed);
            ((NightWatch) getActivity()).sendVote(1,
                    imageUrl.get(mImageNum));
        }

        break;
    case R.id.buttonDownVote:

        if (prefs.getInt(imageUrl.get(mImageNum), 0) == 1) {
            downVoteButton
                    .setBackgroundResource(R.drawable.downvotepressed);
            upVoteButton.setBackgroundResource(R.drawable.upvoteunpressed);
            ((NightWatch) getActivity()).sendVote(-1,
                    imageUrl.get(mImageNum));

        } else if (prefs.getInt(imageUrl.get(mImageNum), 0) == 0) {
            downVoteButton
                    .setBackgroundResource(R.drawable.downvotepressed);
            ((NightWatch) getActivity()).sendVote(-1,
                    imageUrl.get(mImageNum));
        }

        break;
    }

};

public void updateButtonBackgrounds() {
    if (prefs.getInt(imageUrl.get(mImageNum), 0) == -1) {
        downVoteButton.setBackgroundResource(R.drawable.downvotepressed);
    } else if (prefs.getInt(imageUrl.get(mImageNum), 0) == 1) {
        upVoteButton.setBackgroundResource(R.drawable.upvotepressed);
    }
}

public static void sendVote(int vote, String imageName) {
    prefs.edit().putInt(imageName, vote).commit();
}

public void getSizes() {
    Display display = getActivity().getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    width = size.x;
    height = size.y;
}
}
package info.nightowl.nightowl;

public class HotFragment extends Fragment implements OnClickListener {

ToggleButton buttonGrid;
static Spinner spinnerUploadStatus;
CustomEditText et;
CustomScrollTextView tv;
int width, height;
View view;
static boolean isGrid;
ViewPager mPager;
SharedPreferences prefs;
public ImagePagerAdapter mPageAdapter;
Button buttonSwitchFragment;

Integer[] b = { R.drawable.statusunpressed, R.drawable.red,
        R.drawable.green, R.drawable.blue };

List<Integer> spinnerList = new ArrayList<Integer>(Arrays.asList(b));
CustomSpinnerAdapter myAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {

    prefs = getActivity().getSharedPreferences("prefs", 0);
    getSizes();
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.activity_feed, container, false);

    setup();

    return view;
}

@SuppressLint("NewApi")
public void setup() {

    isGrid = false;

    mPager = (ViewPager) view.findViewById(R.id.myviewpager1);
    mPager.setOffscreenPageLimit(0);

    buttonGrid = (ToggleButton) view.findViewById(R.id.button_grid);
    buttonGrid.setOnClickListener(this);

    spinnerUploadStatus = (Spinner) view
            .findViewById(R.id.buttonUploadStatus);

    myAdapter = new CustomSpinnerAdapter(getActivity(),
            R.layout.item_simple_list_item, spinnerList);
    myAdapter
            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinnerUploadStatus.setAdapter(myAdapter);
    spinnerUploadStatus.setDropDownWidth((int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP, 50, getResources()
                    .getDisplayMetrics()));
    spinnerUploadStatus.setOnItemSelectedListener(myOnItemSelectedListener);
    spinnerUploadStatus.getBackground().setAlpha(0);

    buttonSwitchFragment = (Button) view
            .findViewById(R.id.buttonSwitchFragment);
    buttonSwitchFragment.setOnClickListener(this);

    Typeface font = Typeface.createFromAsset(getActivity().getAssets(),
            "NotCourierSans.ttf");
    et = (CustomEditText) view.findViewById(R.id.customEditText1);
    et.updateTypeFace(font);

    tv = (CustomScrollTextView) view
            .findViewById(R.id.customscrolltextview);
    tv.setText("WELCOME TO NIGHTOWL");
    tv.setTypeface(font);
    tv.start(width / 2500.0);

    Log.d("width", "width is " + width);
}

public void getSizes() {
    Display display = getActivity().getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    width = size.x;
    height = size.y;
}

@Override
public void onClick(View v) {

    switch (v.getId()) {

    case R.id.button_grid:

        isGrid = !isGrid;

        updateAdapter();
        break;
    case R.id.buttonSwitchFragment:
        ((NightWatch) getActivity()).scrollMainPager(1);
        break;

    }
}

public OnItemSelectedListener myOnItemSelectedListener = new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {

        spinnerUploadStatus.setSelection(0, true);
        et.sendText(prefs.getString("username", "username invalid"), arg2);

    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }

};

public void scrollPager(int position) {

    isGrid = false;
    buttonGrid.setChecked(false);
    updateAdapter();

    mPager.setCurrentItem(position, true);
    Log.d("Pager", "PAGER UPDATED");
}

public static void disableButton(Boolean enabled) {
    spinnerUploadStatus.setEnabled(enabled);
}

public void updateAdapter() {
    int theSize;
    if (!isGrid)
        theSize = NightWatch.imageUrl.size();

    else if (NightWatch.imageUrl.size() % 9 > 0)
        theSize = NightWatch.imageUrl.size() / 9 + 1;
    else
        theSize = NightWatch.imageUrl.size() / 9;

    mPageAdapter = new ImagePagerAdapter(getChildFragmentManager(), theSize);
    mPager.setAdapter(mPageAdapter);

    Log.d("size of viewPager Adapter", "" + theSize);
}

public static class ImagePagerAdapter extends FragmentStatePagerAdapter {

    int mSize;

    public ImagePagerAdapter(FragmentManager fm, int size) {
        super(fm);

        mSize = size;
    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub
        Log.d("Starting imageDetailFragment", "");
        Log.d("Pager", "Pager starting fragment");

        Log.d("GRID", "fuck grid");
        if (!isGrid)
            return ImageDetailFragment.newInstance(arg0,
                    NightWatch.hotImageUrl, NightWatch.hotNameList,
                    NightWatch.hotTrendList, NightWatch.hotDateList);
        else
            return GridFragment.newInstance(arg0, NightWatch.imageUrl);

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mSize;
    }
}

public class CustomSpinnerAdapter extends ArrayAdapter<Integer> {

    List<Integer> resourceId;
    Context c;

    public CustomSpinnerAdapter(Context context, int textViewResourceId,
            List<Integer> objects) {
        super(context, textViewResourceId, objects);

        resourceId = objects;
        c = context;

    }

    @Override
    public View getDropDownView(int position, View convertView,
            ViewGroup parent) {
        return getCustomDropdownView(position, convertView, parent);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }

    public View getCustomView(int position, View convertView,
            ViewGroup parent) {
        ImageView imageView = new ImageView(c);

        imageView.setImageResource(resourceId.get(position));
        imageView.setLayoutParams(new ListView.LayoutParams(
                (int) TypedValue.applyDimension(
                        TypedValue.COMPLEX_UNIT_DIP, 50, getResources()
                                .getDisplayMetrics()), (int) TypedValue
                        .applyDimension(TypedValue.COMPLEX_UNIT_DIP, 34,
                                getResources().getDisplayMetrics())));

        return imageView;
    }

    public View getCustomDropdownView(int position, View convertView,
            ViewGroup parent) {
        ImageView imageView = new ImageView(c);

        imageView.setImageResource(resourceId.get(position));
        imageView.setLayoutParams(new ListView.LayoutParams(
                (int) TypedValue.applyDimension(
                        TypedValue.COMPLEX_UNIT_DIP, 50, getResources()
                                .getDisplayMetrics()), (int) TypedValue
                        .applyDimension(TypedValue.COMPLEX_UNIT_DIP, 34,
                                getResources().getDisplayMetrics())));

        if (position == 0) {
            imageView.setVisibility(View.GONE);
        }

        return imageView;
    }

}

}
Picasso.with(getActivity())
    .load(url)
    .into(imageView); //you can add .resize() before .into()
new AsyncTask<Void, Void, Void>() {
            Bitmap bitmap;
            @Override
            protected void onPreExecute() {
                //some code
            }

            @Override
            protected Void doInBackground(Void... arg0) {
                bitmap = getBitmapFromURL(url);
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                imageView.setImageBitmap(bitmap);
            }
        }.execute();
public Bitmap getBitmapFromURL(String src) {
    try {
        URL url = new URL(src);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        return BitmapFactory.decodeStream(input);
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}
//calcualte the raduis for the rounded images
final float scale = mContext.getResources().getDisplayMetrics().density; //get screen density for   scale
int pixels = (int) ((imageView.getWidth()-5) * scale); //get screen pixels based on density. Imageview is 60dp x 60dp in size, subtract some padding = 55
mRadiusCenter = pixels / 2;                                                 //get the raduis

//now load your image
 Picasso.with(mContext)
        .load(imageUrl)
        .fit().centerCrop()
        .transform(new RoundedTransformation(mRadiusCenter))
        .into(imageView);
// enables hardware accelerated rounded corners
// original idea here : http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/
public  class RoundedTransformation implements com.squareup.picasso.Transformation {
  private final int radius;

  // radius is corner radii in dp
  public RoundedTransformation(final int radius) {
      this.radius = radius;
  }

  @Override
  public Bitmap transform(final Bitmap source) {
      final Paint paint = new Paint();
      paint.setAntiAlias(true);
      paint.setShader(new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));

      Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);

      Canvas canvas = new Canvas(output);
      canvas.drawCircle(radius, radius, radius, paint);

      if (source != output) {
          source.recycle();
      }

      return output;
  }

  @Override
  public String key() {
      return "rounded";
  }

}