0
내 앱 기능은 Json에서 맞춤형 어댑터로 여러 이미지를 표시하고 싶습니다. 이제는 필요한 모든 이미지를 다운로드해야합니다. 사용자가 다운로드 버튼을 클릭하면 특정 조각이 외부 메모리에 저장됩니다.Android- json 및 Picasso를 사용하여 URL에서 외부 저장소로 이미지를 다운로드 할 수 없습니다.
가 나는 파일 참고 권한 준 : 이미지를 추출하고 피카소를 사용하여 다운로드
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
코드 것은 :
public class AKVSeriesOneFragment extends Fragment {
private static final String TAG = MainActivity.class.getSimpleName();
private View view;
// Movies json url
private static final String url = "https://developers.kurtisgallery.in/example_api/kurtisone/id/8";
private ProgressDialog pDialog;
private List<Movie> movieList = new ArrayList<Movie>();
private GridView gridView;
private CustomListAdapter adapter;
public AKVSeriesOneFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_akvseries_one, container, false);
ImageView imageView = (ImageView) rootView.findViewById(R.id.downoadimgs);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < movieList.size(); i++) {
String url = movieList.get(i).getThumbnailUrl();
Picasso.with(getContext())
.load(url)
.into(new Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
new Thread(new Runnable() {
@Override
public void run() {
File sd = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File folder = new File(sd, "/Picasso/");
if (!folder.exists()) {
if (!folder.mkdir()) {
Log.e("ERROR", "Cannot create a directory!");
} else {
folder.mkdir();
}
}
for (int i=0; i< movieList.size(); i++) {
File[] fileName = {new File("Image"+i)};
if (!fileName[i].exists()) {
try {
fileName[i].createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
} else {
try {
FileOutputStream outputStream = new FileOutputStream(String.valueOf(fileName[i]));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}).start();
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
}
}
});
gridView = (GridView) rootView.findViewById(R.id.list);
adapter = new CustomListAdapter(getActivity(), movieList);
gridView.setAdapter(adapter);
pDialog = new ProgressDialog(getActivity());
// Showing progress dialog before making http request
pDialog.setMessage("Loading...");
pDialog.show();
JsonArrayRequest movieReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
hidePDialog();
// Parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
Movie movie = new Movie();
//movie.setTitle(obj.getString("category_name"));
movie.setThumbnailUrl(obj.getString("thumb_img_dest"));
movieList.add(movie);
} catch (JSONException e) {
e.printStackTrace();
}
}
// notifying list adapter about data changes
// so that it renders the list view with updated data
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
hidePDialog();
}
});
// Adding request to request queue
AppController.getInstance().addToRequestQueue(movieReq);
return rootView;
}
Here I am getting error EROFS (Read-only file system) 내가 유래 전에 검색과 많은 유사한 probleb하지만 비를 발견했다 솔루션의 나를 위해 일하고있다. 나는 초보자 안드로이드 개발자입니다.
내 이미지가 성공적으로 표시됩니다. –
마치'if (! fileName [0] .exists()) {' –
@DaniweNugent 문제는 이전과 동일하게 유지됩니다. –