بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
مشکل در پروژه دانلودر
مدیریت گفتگو
آخرین تغییر: 11 سال پیش
سلام . بنده همه ی کار هایی که گفته شده انجام دادم همون اول پروژه دانلودر کرش میکنه و این ارور میده
قسمت کانکشن ارور میده و من یک URL ساده از یک عکس از یک سایت برداشتم و وقتی توی بروزر میزنم راحت بازش میکنه.
03-01 15:52:22.112 2856-2856/com.example.mohamad.testdownloader E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.mohamad.testdownloader, PID: 2856
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mohamad.testdownloader/com.example.mohamad.testdownloader.MainActivity}:
android.os.NetworkOnMainThreadException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29)
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232)
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
at com.example.mohamad.testdownloader.FileDownloader.download(FileDownloader.java:21)
at com.example.mohamad.testdownloader.MainActivity.onCreate(MainActivity.java:19)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
پاسخها 2
توی یک ترد دیگه فراخانی کردم اما بازم نشد این ارور داد
اینجوری که من فهمیدم به پرمیشن گیر میده درصورتی که من دسترسی هم پرمیشن هم اس دی کارت دادم.
03-01 16:17:27.723 3000-3000/com.example.mohamad.testdownloader E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.mohamad.testdownloader, PID: 3000
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mohamad.testdownloader/com.example.mohamad.testdownloader.MainActivity}:
java.lang.SecurityException: Permission denied (missing INTERNET permission?)
نظرات
اینجا علت خطا عدم وجود دسترسی به اینترنت هست و راه حلش مطلبی که پایین گذاشتین نیست.
میدونم و دسترسی و من درست داده بودم اما خب ترد هم جواب نمیده و وقتی از ترد استفاده کردم این اتفاق افتاد . که فکر میکنم چون ترد استارت نکرده بودم اینطوری شده بود خلاصه راه حل پایین بهتره .
خب من مشکل با AsynTask حل کردم و چون توضیحات خوبی توی انجمن ندیدم تصمیم گرفتم یک توضیح و روش انجامش و بگم
برای استفاده از AsynTask به روش زیر عمل کنید کد های پایین مال کلاس FileDownloader هست
public class FileDownloader extends AsyncTask{
private String downloadpath;
private String filepath;
public FileDownloader(String d,String f){
downloadpath = d;
filepath = f;
}
@Override
protected Object doInBackground(Object[] params) {
try {
URL url = new URL(downloadpath);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();
FileOutputStream outputStream = new FileOutputStream(filepath);
InputStream inputstream = connection.getInputStream();
byte[] buffer = new byte[8*1024];
int len=0;
while ((len = inputstream.read(buffer))>0){
outputStream.write(buffer,0,len);
}
outputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
}
خب در بالا بنده کد خومو گذاشتم که ببینید فقط مشتق بگیرید و در doInBackground کد هارو اجرا کنید برای فراخانی هم اینطوری عمل کنید مثلا توی MainActivity بجای نوشتن FIlerdownload.flan به روش زیر عمل کنید
new FileDownloader("آدرس",G.DIR_MAPS + "/sample-image.jpg").execute();
نظرات
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات