我是Android新手,自上次编码以来已经很久了。对不起,如果这是一个虚拟问题。
我的应用程序要求用户引入将在API中搜索的索引字词。然后,用户输入用于创建请求JSONObjects的URL。这是在第一个活动中完成的。第二个活动接收URL并向API发出请求。
我正在使用第三方库在类似Tinder的刷卡效果视图(https://github.com/Diolor/Swipecards)中显示结果。这个库有一个名为onAdapterAboutToEmpty的方法,其中包含了JSONObjectRequest。我也在使用Volley来创建RequestQueue。
但是,在创建第二个活动时,会调用此方法三次。我只需要调用一次。所以,我的问题如下:
这里有代码:
public class DisplayQueryActivity extends AppCompatActivity {
RequestQueue mRequestQueue;
ResearchAdapter mJSONAdapter;
SwipeFlingAdapterView mSwipePaper;
String user_urlQuery;
public int index_Springer_Query;
public int number_papers_deleted = 0;
static final int PICK_USER_ACTION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_query);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//Get data from previous Activity
Intent intentDisplayQuery = getIntent();
user_urlQuery = intentDisplayQuery.getStringExtra(UserInput.EXTRA_QUERY);
index_Springer_Query = extractFieldQuery(user_urlQuery, URL_RESULT_STARTING);
mJSONAdapter = new ResearchAdapter(this, getLayoutInflater(), getProviderLogoImage(user_urlQuery));
mRequestQueue = Volley.newRequestQueue(this);
mSwipePaper = (SwipeFlingAdapterView) findViewById(R.id.swipe_content);
}
@Override
protected void onStart(){
super.onStart();
mSwipePaper.setAdapter(mJSONAdapter);
displaySwipeMode();
}
private void displaySwipeMode(){
mSwipePaper.setFlingListener(new SwipeFlingAdapterView.onFlingListener() {
@Override
public void removeFirstObjectInAdapter() {
mJSONAdapter.remove(0);
number_papers_deleted++;
mJSONAdapter.notifyDataSetChanged();
}
@Override
public void onLeftCardExit(Object dataObject) {
Toast.makeText(DisplayQueryActivity.this, "Left!", Toast.LENGTH_SHORT).show();
}
@Override
public void onRightCardExit(Object dataObject) {
Toast.makeText(DisplayQueryActivity.this, "Right!", Toast.LENGTH_SHORT).show();
}
@Override
public void onAdapterAboutToEmpty(int itemsInAdapter) {
sendJsonRequest();
}
@Override
public void onScroll(float v) {
}
});
}
private void sendJsonRequest() {
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,
user_urlQuery,
(String) null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
mJSONAdapter.updateData(response.optJSONArray(VR_RECORDS));
Log.d("Console says: ", response.toString());
}
},
new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error){
Log.d("Console says: ", error.getMessage().toString());
}
});
mRequestQueue.add(request);
}
任何帮助将不胜感激。感谢。
答案 0 :(得分:-1)
欢迎使用Stack Overflow,这种行为很正常。代码基本上是在内存中保存三个项目。它在前三个加载,然后当你向右滑动它在下一个项目加载到内存并释放第一个...
例如
1,2,3被加载到内存
您在第1号右侧滑动。
然后从内存中删除1并加载编号4
你现在有2,3,4的内存。
希望这有帮助