シングルトンクラスを作成し、それにアプリケーションコンテキストを渡すことによって、ネットワーク要求アクティビティを独立させることについてはdocumentationを読んでいます。私はそれを同様に実装しましたが、私はまだ回転すると、アプリケーションはデータを表示する前に呼び出しが完了するのを待っています。だから私は間違っていて、それを正しく設定して、コールがアプリケーションの寿命を延ばすようにして、ドキュメンテーションごとにオリエンテーションを変更するたびに呼び出さないようにします。私はそれがローダまたは改造やokhttpを使用して行うことができます知っているが、私はボレーどのようにボレーリクエストアクティビティをアンドロイドで独立させるのですか?
を使用してMainActivity.java
package com.example.imnobody.photosearch;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ImageGridAdapter imageGridAdapter;
private List<String> imageList;
public static final String URL = "API_HERE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageList = new ArrayList<>();
//imageList = QueryUtils.extractImages(SAMPLE_JSON_RESPONSE);
GridView gridView = (GridView) findViewById(R.id.gridview);
final TextView emptyTextView = (TextView)findViewById(android.R.id.empty);
gridView.setEmptyView(emptyTextView);
imageGridAdapter = new ImageGridAdapter(MainActivity.this,imageList);
gridView.setAdapter(imageGridAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Intent intent = new Intent(MainActivity.this,ImageActivity.class);
intent.putExtra("imageuri",imageList.get(position));
startActivity(intent);
}
});
StringRequest stringRequest = new StringRequest(Request.Method.GET, URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
imageList = QueryUtils.extractImages(response); //extract needed things from json
imageGridAdapter.clear();
imageGridAdapter.addAll(imageList);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
emptyTextView.setText("Unknown error occured");
}
});
VolleySingleton.getInstance(this.getApplicationContext()).addToRequestQueue(stringRequest);
}
}
VolleySingleton.java
package com.example.imnobody.photosearch;
import android.content.Context;
import android.graphics.Bitmap;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
import android.support.v4.util.LruCache;
/**
* Created by imnobody on 7/8/17.
*/
public class VolleySingleton {
private static VolleySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mCtx;
private VolleySingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized VolleySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new VolleySingleton(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
}
これはちょうど1つの質問ですので、これは向きが変わったときにメモリリークにつながるので、なぜボレーのために別のシングルトンクラスが必要なのでしょうか?それとも、単にこのようなもの(https://developer.android.com/training/volley/simple.html) – Nobody
を明示するのではなく、「** this **」を使うとメモリにつながりますリーク.. "、**この**は私の答えのコードフラグメント、またはコード断片の後に記載されているサービスのアプローチを参照していますか? – cjurjiu
私は[前のページ](https://開発者)で言及されている通常のアプローチに対して、ドキュメントで言及されている[シングルトンアプローチ](https://developer.android.com/training/volley/requestqueue.html)を意味しませんでした。 android.com/training/volley/simple.html)を参照してください。私はちょうどシングルトンクラスのアプローチを持つことがこれと比較してどのように優れているかを知りたいだけです。 – Nobody