آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ارورر در پروژه ماركت اندرويد + قسمت بارگذاري عكس(حل شد )

sadra  11 سال پیش  11 سال پیش
0 0

سلام به همگي

من همه چيزو مطابق چيزي كه استاد گفته انجام دادم.(فصل 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;
}
}
+1 0
از اون قسمت به بعد، برنامت کرش هم میکنه؟ اشتباه نمیکنی؟ آخه قبل از اون قسمت که نه return داریم و نه همچین چیزی که از کد بیاد بیرون که! دلیلی نداره که دیگه log چاپ نشه! اگه قبلش (داخل if) چاپ کنه؛ باید از if به بعد؛ و اونجایی که outputStream رو هم میسازی باید چاپ کنه. (11 سال پیش)
0 0
دقيقا تا قبل onputstream همه چي رو اجرا ميكنه، از onPutStream به بعد هيچي اجرا نميشه نه لاگي نه چيزي! (11 سال پیش)
0 0
الان كه چك كردم، از همون كرش ميكنه و مياد catch (IOException e) { e.printStackTrace();} اجرا ميكنه، يعني آخرين catch رو (11 سال پیش)
0 0
لاگ آخرين ctach هم ميگه كه: 08-11 09:19:13.281: I/stringgggggggg(8724): java.io.FileNotFoundException: /mnt/sdcard/web-magazine/temp/img/image3.jpg: open failed: ENOENT (No such file or directory)k (11 سال پیش)
0 0
البته 3تا عكسه، واسه هر سته image1 image2 image3 همينو ميگه (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .