بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
ارورر در پروژه ماركت اندرويد + قسمت بارگذاري عكس(حل شد )
سلام به همگي
من همه چيزو مطابق چيزي كه استاد گفته انجام دادم.(فصل 16 ماركت اندرويد - قسمت آخر 4 ) اما صلا عمل دانلود رو انجام نميده! و توي فايل temp من هيچي نيست!
اينم خطايي كه ميده:
08-11 07:38:57.520: W/System.err(30862): java.io.FileNotFoundException: /mnt/sdcard/web-magazine/temp/img/image3.jpg:
open failed: ENOENT (No such file or directory)
اگه خواستين تمام كدهارو ميزارم كه ببينيد، اما الالحصاب:
//---------------------------------------------------------- AdapterMag: ----------------------------------------------------------
package web_mag;
import java.io.File;
import java.util.ArrayList;
import com.itnegar.app.doctorjibi.R;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
public class AdapterMag extends ArrayAdapter<StructMag> {
//moshakhas kardane adaptor
public AdapterMag(ArrayList<StructMag> array) {
super(G.context, R.layout.web_magpost_row, array);
}
//negah daranade va moshakhas konandeye controlha
private static class ViewHolder {
public ViewGroup layoutRoot;
public TextView maglist_title;
public TextView maglist_desc;
public ImageView maglist_img;
//negahdarande
public ViewHolder(View view) {
maglist_title = (TextView) view.findViewById(R.id.maglist_title);
maglist_desc = (TextView) view.findViewById(R.id.maglist_desc);
layoutRoot = (ViewGroup) view.findViewById(R.id.layoutRoot);
maglist_img = (ImageView) view.findViewById(R.id.maglist_img);
}
//por konande
public void fill(final ArrayAdapter<StructMag> adapter, final StructMag item, final int position) {
maglist_title.setText(item.title);
maglist_desc.setText(item.description);
String filename = item.logoUrl.replace("/img/", "");
final File imageFile = new File(G.DIR_FINAL + "/" + filename);
if ( !imageFile.exists()) {
maglist_img.setImageBitmap(null);
DownloadManager.addToDownloadList(item.logoUrl);
}
BitmapFactory.Options options = new BitmapFactory.Options();
//options.inSampleSize = 8;
Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);
maglist_img.setImageBitmap(bitmap);
//raftan be activitiye badi pas az click ruye harkodam az anasor
layoutRoot.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
G.selectedPost = item;
Intent intent = new Intent(G.currentActivity, Magazine_postdetails.class);
G.currentActivity.startActivity(intent);
}
});
}
}
//daryaft konandeye etela'at az arraye
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
StructMag item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.web_magpost_row, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
Animation anim = AnimationUtils.loadAnimation(G.currentActivity, R.anim.animation);
convertView.setAnimation(anim);
return convertView;
}
}
//---------------------------------------------------------- DownloadManager: ----------------------------------------------------------
package web_mag;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import android.util.Log;
public class DownloadManager {
public static ArrayList<String> urls = new ArrayList<String>();
public static OnDownloadCompleteListener downloadCompleteListener;
public static void copyFile(String sourceFile, String destinationFile) {
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
try {
inputStream = new FileInputStream(sourceFile);
outputStream = new FileOutputStream(destinationFile);
byte[] buffer = new byte[G.DOWNLOAD_BUFFER_SIZE];
int len;
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
outputStream.flush();
outputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void initialize() {
downloadCompleteListener = new OnDownloadCompleteListener() {
@Override
public void onDownloadComplete(String url, String localPath) {
Log.i("LOG", "Image Download Complete, Original URL: " + url + ", Save Path: " + localPath);
copyFile(localPath, localPath.replace("/temp/", "/final/"));
new File(localPath).delete();
}
};
}
public static void addToDownloadList(String url) {
if (urls.contains(url)) {
return;
}
String filename = url.replace("/img/", "");
filename = filename.replace("/image/", "");
if (new File(G.DIR_FINAL + "/" + filename).exists()) {
return;
}
urls.add(url);
DownloadRequest downloadRequest = new DownloadRequest()
.downloadPath("http://192.168.1.4/drjibi_adc/phptest/" + url)
.filepath(G.DIR_TEMP + "/" + filename)
.listener(downloadCompleteListener)
.download();
}
}
//---------------------------------------------------------- DownloadRequest: ----------------------------------------------------------
package web_mag;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class DownloadRequest {
private int downloadedSize;
private int totalSize;
private int percent;
public int getDownloadedSize() {
return downloadedSize;
}
public int getTotalSize() {
return totalSize;
}
public int getPercent() {
return percent;
}
public DownloadRequest download() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(downloadPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();
totalSize = connection.getContentLength();
File file = new File(filepath);
if (file.exists()) {
file.delete();
}
FileOutputStream outputStream = new FileOutputStream(filepath);
InputStream inputStream = connection.getInputStream();
byte[] buffer = new byte[G.DOWNLOAD_BUFFER_SIZE];
int len = 0;
while ((len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
downloadedSize += len;
percent = (int) (100.0f * (float) downloadedSize / totalSize);
if (percent == 100 && listener != null) {
G.HANDLER.post(new Runnable() {
@Override
public void run() {
listener.onDownloadComplete(downloadPath, filepath);
}
});
}
if (simulate) {
try {
Thread.sleep(100);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
outputStream.close();
}
catch (MalformedURLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
return this;
}
private String downloadPath;
private String filepath;
private OnDownloadCompleteListener listener;
private boolean simulate;
public DownloadRequest downloadPath(String value) {
downloadPath = value;
return this;
}
public DownloadRequest filepath(String value) {
filepath = value;
return this;
}
public DownloadRequest listener(OnDownloadCompleteListener value) {
listener = value;
return this;
}
public DownloadRequest simulate(boolean value) {
simulate = value;
return this;
}
}
//------------------------------------------------------ .G: ----------------------------------------------------------
package web_mag;
import java.io.File;
import android.app.Application;
import android.content.Context;
import android.os.Environment;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
public class G extends Application{
public static Context context;
public static LayoutInflater inflater;
public static final Handler HANDLER = new Handler();
public static ActionBarActivity currentActivity;
public static final int DOWNLOAD_BUFFER_SIZE = 8 * 1024;
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_APP = DIR_SDCARD + "/web-magazine";
public static final String DIR_TEMP = DIR_APP + "/temp";
public static final String DIR_FINAL = DIR_APP + "/final";
public static StructMag selectedPost;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
new File(DIR_APP).mkdirs();
new File(DIR_TEMP).mkdirs();
new File(DIR_FINAL).mkdirs();
DownloadManager.initialize();
}
}
//------------------------------------------------------ Magazinepost: ----------------------------------------------------------
package web_mag;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.itnegar.app.doctorjibi.R;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.widget.ListView;
public class Magazine_post extends EnhancedActivity{
private ListView list;
private AdapterMag adapter;
private ArrayList<StructMag> magPost = new ArrayList<StructMag>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_magpost_layout);
//ejaze gereftan jahate ersal va daryafte dadeh tavasote JSON
StrictMode.ThreadPolicy policy= new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
//-----------------------------------------------------------
list = (ListView) findViewById(R.id.maglist_list);
adapter = new AdapterMag(magPost);
list.setAdapter(adapter);
populateFromServer();
}
private void fakedata(){
for(int i=0; i<50; i++){
StructMag magPosts = new StructMag();
magPosts.title="اپليكيشن #"+i;
magPosts.description="متن اپليكيشن #"+i;
magPost.add(magPosts);
}
adapter.notifyDataSetChanged();
}
private void populateFromServer() {
String result = Webservice.readUrl("http://192.168.1.4/drjibi_adc/phptest/index.php?action=read", null);
Log.i("stringgggggggg", result);
if (result != null) {
try {
magPost.clear();
JSONArray posts = new JSONArray(result);
for (int i = 0; i < posts.length(); i++) {
JSONObject object = posts.getJSONObject(i);
StructMag magPosts = new StructMag();
magPosts.title = object.getString("title");
magPosts.description = object.getString("content");
magPosts.logoUrl = object.getString("logo_url");
magPost.add(magPosts);
}
adapter.notifyDataSetChanged();
}catch (JSONException e) {e.printStackTrace();}
}
}
}
0
0
لطفا آقاي آقاجاني پاسخ بدند. ممنون (11 سال پیش)
+1
0
آقا صدرا شما 30 دقیقه پیش این سوال رو پرسیدید و اصلا شاید استاد و مدیرای سایت توی این 30 دقیقه آفلاین بودند! درضمن من قبلا از این چیزی که استاد نوشته بودند و یاد داده بودند استفاده کردم و این مشکلی که شما میگید رو هیچ وقت نداشتم. راستی اگه میخواید یه سری عکس رو از سرور بگیرید و نمایش بدید به نظر من بهترین کار استفاده از universal Image Loader هست. (11 سال پیش)
0
0
به نظرم مشکل از قسمت download Manger باشه.
میخوای اینطوری که میگم هم امتحان کن:
داخل متود initialize اون قسمتی که داری replace میکنی رو جداگونه بنویس و بعدن کپی رو انجام بده.امکان داره اینجور نوشتن تداخل ایجاد کنه... (11 سال پیش)
0
0
مشكل اينه كه اصلا دانلود انجام نميشه!!!! يعني اصلا حتي فايلي توي temp ايجان نميشه (11 سال پیش)
+1
0
این کدهایی که گذاشتی به نظرم برای قسمت دانلود کردن و درخواست دانلود جواب میده؛ منتها ممکنه تو آدرس دهی یه اشتباهاتی وجود داشته باشه...
نمیتونم دقیقن بگم مشکلش چیه اما به نظرم مشکل از جایی که کپی میکنی و بعد delete میکنی آب میخوره؛ با log کردن ببین کاری که مد نظرت هست رو انجام میده یا نه. که حداقل از این مورد مطمئن باشی. (11 سال پیش)
0
0
اينكارو كردم، همونطور كه در پست زير نشون دادم، از اونجا به بعد كار نميكنه و لاگ نميندازه (11 سال پیش)
+1
0
مشکل شما که مشخصه داره میگه mnt/sdcard/web-magazine/temp/img/ وجود نداره < من کلاس G شما رو نگاه کردم این آدرس رو از قبل نساختید < و فقط App_DIR و final , temp رو ساختید (11 سال پیش)
+1
0
پیشنهاد میکنم < یک لاگ از filepath در کلاس Downloader خودتون بگیرید < مطمئن بشید که مسیر درست هست (11 سال پیش)
0
0
خاک به سرم! چرا نوشته، temp/img ????? اصن حواسم نبود!!!! چیکار کنم بشه temp خالی؟؟ img رو کجا گذاشتم، لطف کنید راهنمایی کنید کجا اشتباه کردم درست شه. (11 سال پیش)
0
0
مشکل میتونه از addToDownloadList باشه < با اینکه ظاهرا درست هست < اما لاگ بگیرید < تا متوجه بشید (11 سال پیش)
0
0
ممنون كريس جان، مشكل حل شد، توي ديتابيس آدرس عكس بود "img/image3.jpg" اما توي كد گفته بودكه كه "/img/" رو رپليس كن، در صورتي كه بايد ميگفتم "img/" رو ريپليس كن. ممنون از همه. ببخشيد سرتون رو درد آوردم. (11 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
sadra
11 سال پیش
0
0
طبق لاگ هايي كه گرفتم، اين اينجا به بعد كار نميكنه و لاگ نميندازه:
//---------------------------------------------------------- DownloadRequest: ----------------------------------------------------------
package web_mag;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
publicclassDownloadRequest{
privateint downloadedSize;
privateint totalSize;
privateint percent;
publicint getDownloadedSize(){
return downloadedSize;
}
publicint getTotalSize(){
return totalSize;
}
publicint getPercent(){
return percent;
}
publicDownloadRequest download(){
Thread thread =newThread(newRunnable(){
@Override
publicvoid run(){
try{
URL url =new URL(downloadPath);
HttpURLConnection connection =(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();
totalSize = connection.getContentLength();
File file =newFile(filepath);
if(file.exists()){
file.delete();
}
///////////////////////////////////////////////////// از اينجا به بعد كار نميكنه ////////////////////////////////////////////////////////////////
FileOutputStream outputStream =newFileOutputStream(filepath);
InputStream inputStream = connection.getInputStream();
byte[] buffer =newbyte[G.DOWNLOAD_BUFFER_SIZE];
int len =0;
while((len = inputStream.read(buffer))>0){
outputStream.write(buffer,0, len);
downloadedSize += len;
percent =(int)(100.0f*(float) downloadedSize / totalSize);
if(percent ==100&& listener !=null){
G.HANDLER.post(newRunnable(){
@Override
publicvoid run(){
listener.onDownloadComplete(downloadPath, filepath);
}
});
}
if(simulate){
try{
Thread.sleep(100);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
outputStream.close();
}
catch(MalformedURLException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
}
});
thread.start();
returnthis;
}
privateString downloadPath;
privateString filepath;
privateOnDownloadCompleteListener listener;
privateboolean simulate;
publicDownloadRequest downloadPath(String value){
downloadPath = value;
returnthis;
}
publicDownloadRequest filepath(String value){
filepath = value;
returnthis;
}
publicDownloadRequest listener(OnDownloadCompleteListener value){
listener = value;
returnthis;
}
publicDownloadRequest simulate(boolean value){
simulate = value;
returnthis;
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .