这是我的代码。开始时的目标是将图像抓取到动态列表视图中,基本上就像我自己数据库中的 RSS 提要一样。我所做的是抓取http链接并将其转换为drawable,然后从那里将drawable从动态列表视图设置为imageview。
这是问题所在。当我进入应用程序时,第一次加载是好的。但是当我点击刷新按钮时,我将收到“633632 字节分配时内存不足”错误,然后是更详细的错误版本,其中包含所有已分配的堆大小限制。
我该如何解决这个问题?
package com.whatstherex.sam;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Vector;
import org.apache.http.NameValuePair;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
public class Snapshots extends Activity implements View.OnClickListener {
Button bBackSnapshots, bRefreshSnapshots, bSnapshotsSnapshots;
ListView snapshotsDynamicListView;
Vector<SnapshotsData> snapshotsInputs = new Vector<SnapshotsData>();
SnapshotsCustomFeedAdaptor adaptor;
String username, snapshotsList;
String[] feed;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
setContentView(R.layout.snapshots);
initialize();
}
public void initialize() {
bBackSnapshots = (Button) findViewById(R.id.bBackSnapshots);
bRefreshSnapshots = (Button) findViewById(R.id.bRefreshSnapshots);
bSnapshotsSnapshots = (Button) findViewById(R.id.bSnapshotsSnapshots);
bBackSnapshots.setOnClickListener(this);
bRefreshSnapshots.setOnClickListener(this);
bSnapshotsSnapshots.setOnClickListener(this);
getInformations();
}
private AsyncTask<String, Void, String> task;
private AsyncTask<String, Void, String> task1;
private AsyncTask<String, Void, InputStream[]> task2;
public void getInformations(){
task = new AsyncTask<String, Void, String>() {
ProgressDialog dialog;
Bundle bundle;
String res;
@Override
protected void onPreExecute(){
dialog = new ProgressDialog(Snapshots.this, ProgressDialog.STYLE_SPINNER);
dialog.setMessage("Loading Data...");
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
dialog.show();
}
@Override
protected String doInBackground(String... arg0) {
bundle = getIntent().getExtras();
res = bundle.getString("Username");
return res;
}
@Override
protected void onPostExecute(String result) {
dialog.dismiss();
username = result;
task1 = new AsyncTask<String, Void, String>() {
ProgressDialog dialog1;
ArrayList<NameValuePair> postParameters;
String response1;
String res1;
@Override
protected void onPreExecute(){
snapshotsDynamicListView = (ListView) findViewById(R.id.lvSnapshots);
postParameters = new ArrayList<NameValuePair>();
dialog1 = new ProgressDialog(Snapshots.this, ProgressDialog.STYLE_SPINNER);
dialog1.setMessage("Loading Data...");
dialog1.setCancelable(false);
dialog1.setCanceledOnTouchOutside(false);
dialog1.show();
}
@Override
protected String doInBackground(String... arg0) {
try {
response1 = CustomHttpClient.executeHttpPost("http://whatstherex.info/getS.php", postParameters);
res1 = response1.toString();
res1 = res1.replaceAll("null", "");
snapshotsList = res1.toString();
return snapshotsList;
}catch(Exception e){
res1 = e.toString();
return res1;
}
}
@Override
protected void onPostExecute(String result1) {
feed = result1.split("[_]");
task2 = new AsyncTask<String, Void, InputStream[]>() {
ProgressDialog dialog2;
InputStream[] is = new InputStream[50];
Drawable[] d = new Drawable[50];
String[] res2 = new String[50];
Drawable p4, p5, p9, p10, p14, p15, p19, p20, p24, p25, p29, p30, p34, p35, p39, p40, p44, p45, p49, p50, p54, p55, p59, p60, p64, p65, p69, p70, p74, p75, p79, p80, p84, p85, p89, p90, p94, p95, p99, p100, p104, p105, p109, p110, p114, p115, p119, p120, p124, p125;
@Override
protected void onPreExecute(){
dialog2 = new ProgressDialog(Snapshots.this, ProgressDialog.STYLE_SPINNER);
dialog2.setMessage("Loading Data...");
dialog2.setCancelable(false);
dialog2.setCanceledOnTouchOutside(false);
dialog2.show();
}
@Override
protected InputStream[] doInBackground(String... src) {
for(int i = 0; i<50; i++){
res2[i] = src[i];
}
for(int i = 0; i<50; i++){
try {
is[i] = (InputStream) new URL(res2[i]).getContent();
} catch (Exception e) {
e.toString();
}
}
return is;
}
@Override
protected void onPostExecute(InputStream[] result2) {
for(int i = 0; i<50; i++){
try {
d[i] = Drawable.createFromStream(result2[i], "src name");
} catch (Exception e) {
e.toString();
}
}
p4 = d[0];
p5 = d[1];
p9 = d[2];
p10 = d[3];
p14 = d[4];
p15 = d[5];
p19 = d[6];
p20 = d[7];
p24 = d[8];
p25 = d[9];
p29 = d[10];
p30 = d[11];
p34 = d[12];
p35 = d[13];
p39 = d[14];
p40 = d[15];
p44 = d[16];
p45 = d[17];
p49 = d[18];
p50 = d[19];
p54 = d[20];
p55 = d[21];
p59 = d[22];
p60 = d[23];
p64 = d[24];
p65 = d[25];
p69 = d[26];
p70 = d[27];
p74 = d[28];
p75 = d[29];
p79 = d[30];
p80 = d[31];
p84 = d[32];
p85 = d[33];
p89 = d[34];
p90 = d[35];
p94 = d[36];
p95 = d[37];
p99 = d[38];
p100 = d[39];
p104 = d[40];
p105 = d[41];
p109 = d[42];
p110 = d[43];
p114 = d[44];
p115 = d[45];
p119 = d[46];
p120 = d[47];
p124 = d[48];
p125 = d[49];
snapshotsInputs.add(new SnapshotsData(feed[1].toString(), feed[2].toString(), feed[3].toString(), p4, p5));
snapshotsInputs.add(new SnapshotsData(feed[6].toString(), feed[7].toString(), feed[8].toString(), p9, p10));
snapshotsInputs.add(new SnapshotsData(feed[11].toString(), feed[12].toString(), feed[13].toString(), p14, p15));
snapshotsInputs.add(new SnapshotsData(feed[16].toString(), feed[17].toString(), feed[18].toString(), p19, p20));
snapshotsInputs.add(new SnapshotsData(feed[21].toString(), feed[22].toString(), feed[23].toString(), p24, p25));
snapshotsInputs.add(new SnapshotsData(feed[26].toString(), feed[27].toString(), feed[28].toString(), p29, p30));
snapshotsInputs.add(new SnapshotsData(feed[31].toString(), feed[32].toString(), feed[33].toString(), p34, p35));
snapshotsInputs.add(new SnapshotsData(feed[36].toString(), feed[37].toString(), feed[38].toString(), p39, p40));
snapshotsInputs.add(new SnapshotsData(feed[41].toString(), feed[42].toString(), feed[43].toString(), p44, p45));
snapshotsInputs.add(new SnapshotsData(feed[46].toString(), feed[47].toString(), feed[48].toString(), p49, p50));
snapshotsInputs.add(new SnapshotsData(feed[51].toString(), feed[52].toString(), feed[53].toString(), p54, p55));
snapshotsInputs.add(new SnapshotsData(feed[56].toString(), feed[57].toString(), feed[58].toString(), p59, p60));
snapshotsInputs.add(new SnapshotsData(feed[61].toString(), feed[62].toString(), feed[63].toString(), p64, p65));
snapshotsInputs.add(new SnapshotsData(feed[66].toString(), feed[67].toString(), feed[68].toString(), p69, p70));
snapshotsInputs.add(new SnapshotsData(feed[71].toString(), feed[72].toString(), feed[73].toString(), p74, p75));
snapshotsInputs.add(new SnapshotsData(feed[76].toString(), feed[77].toString(), feed[78].toString(), p79, p80));
snapshotsInputs.add(new SnapshotsData(feed[81].toString(), feed[82].toString(), feed[83].toString(), p84, p85));
snapshotsInputs.add(new SnapshotsData(feed[86].toString(), feed[87].toString(), feed[88].toString(), p89, p90));
snapshotsInputs.add(new SnapshotsData(feed[91].toString(), feed[92].toString(), feed[93].toString(), p94, p95));
snapshotsInputs.add(new SnapshotsData(feed[96].toString(), feed[97].toString(), feed[98].toString(), p99, p100));
snapshotsInputs.add(new SnapshotsData(feed[101].toString(), feed[102].toString(), feed[103].toString(), p104, p105));
snapshotsInputs.add(new SnapshotsData(feed[106].toString(), feed[107].toString(), feed[108].toString(), p109, p110));
snapshotsInputs.add(new SnapshotsData(feed[111].toString(), feed[112].toString(), feed[113].toString(), p114, p115));
snapshotsInputs.add(new SnapshotsData(feed[116].toString(), feed[117].toString(), feed[118].toString(), p119, p120));
snapshotsInputs.add(new SnapshotsData(feed[121].toString(), feed[122].toString(), feed[123].toString(), p124, p125));
adaptor = new SnapshotsCustomFeedAdaptor(Snapshots.this, R.layout.snapshotsdata, snapshotsInputs);
snapshotsDynamicListView.setAdapter(adaptor);
dialog2.dismiss();
}
};
task2.execute(feed[4], feed[5], feed[9], feed[10], feed[14], feed[15], feed[19], feed[20], feed[24], feed[25], feed[29], feed[30],
feed[34], feed[35], feed[39], feed[40], feed[44], feed[45], feed[49], feed[50], feed[54], feed[55], feed[59], feed[60],
feed[64], feed[65], feed[69], feed[70], feed[74], feed[75], feed[79], feed[80], feed[84], feed[85], feed[89], feed[90],
feed[94], feed[95], feed[99], feed[100], feed[104], feed[105], feed[109], feed[110], feed[114], feed[115], feed[119],
feed[120], feed[124], feed[125]);
dialog1.dismiss();
}
};
task1.execute();
}
};
task.execute();
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bBackSnapshots:
finish();
break;
case R.id.bRefreshSnapshots:
finish();
startActivity(getIntent());
break;
case R.id.bSnapshotsSnapshots:
break;
}
}
}