【发布时间】:2016-01-22 13:39:50
【问题描述】:
我是 Android 的绝对初学者,现在我开始使用带有 Listview 的 volley HTTP 库。所以我创建了一个测试项目并尝试了 volley 和 Android。我正在创建一个新提要查看应用程序。例如,facebook 新闻。数据只是用于学习目的的虚拟数据。我的项目按预期工作。当 scoll 到达列表视图的底部时,它会加载新数据。但是在频繁加载数据多次后,我的应用程序抛出内存不足错误。
我的活动课
public class VolleyActivity extends Activity{
private int defaultLastLoadedItem=0;
private int lastSawFirstListItem;
private int itemLoadedOn;
private ArrayAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.volley_main);
Button getBtn = (Button)findViewById(R.id.btn_get_request);
getBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
ListView listView = (ListView)findViewById(R.id.volleyListView);
adapter = new CustomAdapter(this,new ArrayList<Entity>());
listView.setAdapter(adapter);
updateListView();
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(lastSawFirstListItem<firstVisibleItem)
{
int currentLastItem = firstVisibleItem+visibleItemCount;
if(currentLastItem!=itemLoadedOn)
{
updateListView();
Toast.makeText(getBaseContext(),"More item loaded",Toast.LENGTH_SHORT).show();
itemLoadedOn = currentLastItem;
}
}
lastSawFirstListItem = firstVisibleItem;
}
});
}
public void updatedListView(int lastloadedItem)
{
defaultLastLoadedItem = lastloadedItem;
//"http://api.androidhive.info/feed/feed.json";
String url = "http://192.168.43.82:8888/simple_json/index.json";//"http://api.androidhive.info/feed/feed.json";
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
List<Entity> items = new ArrayList<Entity>();
try{
JSONArray jsonArray = jsonObject.getJSONArray("feed");
for(int i=0;i<jsonArray.length();i++)
{
JSONObject item = jsonArray.getJSONObject(i);
Entity en = new Entity();
en.setId(item.getInt("id"));
en.setName(item.getString("name"));
en.setUrl(item.getString("url"));
items.add(en);
}
adapter.addAll(items);
}
catch (JSONException e)
{
Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(getBaseContext(),"Error listener",Toast.LENGTH_SHORT).show();
}
});
Volley.newRequestQueue(getBaseContext()).add(jsonRequest);
}
public void updateListView()
{
updatedListView(defaultLastLoadedItem);
}
}
我想知道的是:
我的应用程序在投入生产时会抛出这种错误(omm)吗?
如果可以,我该如何解决这个问题?
如果我当前的代码不合适,我应该如何为这种newfeeds 应用自定义listview 以获得更好的性能?
【问题讨论】:
标签: android listview android-volley