ProgressDialog
ProgressDialog
Привет! Метод ProgressDialog.show(Context context,String,String,Boolean) принимает на вход первым праметр Context. Собственно, хотелось бы узнать смысл передачи туда именно Context-a, а не непосредственно Activity. Во всех примерах кода, что нагуглил туда передается Activity.this. Можно пример, где явно передается контекст? Спасибо!
Re: ProgressDialog
Activity.this и есть контекст активитиbundos писал(а):Привет! Метод ProgressDialog.show(Context context,String,String,Boolean) принимает на вход первым праметр Context. Собственно, хотелось бы узнать смысл передачи туда именно Context-a, а не непосредственно Activity. Во всех примерах кода, что нагуглил туда передается Activity.this. Можно пример, где явно передается контекст? Спасибо!
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: ProgressDialog
Не понял. В гугле написано, что контекст содержит инфу о всем приложении вообще. Т.е. я могу передавать туда экземпляры любого класса, которые отнаследованы от контекста и, в частности, Activity? А какую конкретно инфу из контекста метод show использует для создания ProgressDialog?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ProgressDialog
Естественно! См. "наследование".Т.е. я могу передавать туда экземпляры любого класса, которые отнаследованы от контекста и, в частности, Activity?
Если копаете так глубоко, то стоит смотреть исходники, благо они открыты. Метод show создает объект ProgressDialog, который в свою очередь вызывает метод Super у суперкласса, ака AlertDialog, который в свою очередь вызывает super у суперкласса Dialog. Вот тут можно глянуть метод Dialog(Context, int), в котором можно посмотреть для чего нужен контекст.
Вдогонку. Как минимум контест всегда бывает нужен при создании какого-то объекта - View для того, что бы узнать путь к проекту.
Re: ProgressDialog
Не получается. Создаю новый класс MyContext, наследуюсь от контекста (это для того чтобы передать на вход методу show экземпляр MyContext-a), он надобавлял кучу неведомых методов. Далее класс, который асинхронно подгружает картинку:
[syntax=java]public class ImageDownload extends AsyncTask <Void,Void,Drawable>{
ProgressDialog progressDialog;
Drawable drw;
String url="pict_url";
String url;
MyContext context;
protected void onPreExecute(){
super.onPreExecute();
context =new MyContext();
progressDialog=ProgressDialog.show(context, "message1", "message2");
}
@Override
protected Drawable doInBackground(Void... params) {
try {
drw= Drawable.createFromStream((InputStream) new URL(url).getContent(), "srcName");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return drw;
}
protected void onPostExecute(){
super.onPostExecute(drw);
progressDialog.dismiss();
}[/syntax]
При запуске падает, лог:
05-18 16:42:13.514: E/AndroidRuntime(388): FATAL EXCEPTION: main
05-18 16:42:13.514: E/AndroidRuntime(388): java.lang.AssertionError: LayoutInflater not found.
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.LayoutInflater.from(LayoutInflater.java:174)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.ContextThemeWrapper.getSystemService(ContextThemeWrapper.java:69)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.LayoutInflater.from(LayoutInflater.java:171)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.policy.impl.PhoneWindow.<init>(PhoneWindow.java:161)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.policy.impl.Policy.makeNewWindow(Policy.java:59)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.policy.impl.Policy.makeNewWindow(Policy.java:33)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.policy.PolicyManager.makeNewWindow(PolicyManager.java:58)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.Dialog.<init>(Dialog.java:142)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.AlertDialog.<init>(AlertDialog.java:63)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ProgressDialog.<init>(ProgressDialog.java:80)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ProgressDialog.<init>(ProgressDialog.java:76)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ProgressDialog.show(ProgressDialog.java:101)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ProgressDialog.show(ProgressDialog.java:90)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ProgressDialog.show(ProgressDialog.java:85)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.example.test.ImageDownload.onPreExecute(ImageDownload.java:28)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.os.AsyncTask.execute(AsyncTask.java:391)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.example.test.CurrentFragment.onCreateView(CurrentFragment.java:31)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.view.ViewPager.populate(ViewPager.java:1011)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.view.ViewPager.populate(ViewPager.java:880)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1374)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.View.measure(View.java:8171)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:578)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:362)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.View.measure(View.java:8171)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.View.measure(View.java:8171)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.View.measure(View.java:8171)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.View.measure(View.java:8171)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.os.Looper.loop(Looper.java:123)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-18 16:42:13.514: E/AndroidRuntime(388): at java.lang.reflect.Method.invokeNative(Native Method)
05-18 16:42:13.514: E/AndroidRuntime(388): at java.lang.reflect.Method.invoke(Method.java:521)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-18 16:42:13.514: E/AndroidRuntime(388): at dalvik.system.NativeStart.main(Native Method)
Почему нельзя таким образом передать контекст? Как я понял, при создании если у нас есть какой-то класс- потомок контекста, то экземпляр этого класса будет содержать некую инфу обо всем приложении и, соответсвенно, его можно скормить методу show.
[syntax=java]public class ImageDownload extends AsyncTask <Void,Void,Drawable>{
ProgressDialog progressDialog;
Drawable drw;
String url="pict_url";
String url;
MyContext context;
protected void onPreExecute(){
super.onPreExecute();
context =new MyContext();
progressDialog=ProgressDialog.show(context, "message1", "message2");
}
@Override
protected Drawable doInBackground(Void... params) {
try {
drw= Drawable.createFromStream((InputStream) new URL(url).getContent(), "srcName");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return drw;
}
protected void onPostExecute(){
super.onPostExecute(drw);
progressDialog.dismiss();
}[/syntax]
При запуске падает, лог:
05-18 16:42:13.514: E/AndroidRuntime(388): FATAL EXCEPTION: main
05-18 16:42:13.514: E/AndroidRuntime(388): java.lang.AssertionError: LayoutInflater not found.
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.LayoutInflater.from(LayoutInflater.java:174)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.ContextThemeWrapper.getSystemService(ContextThemeWrapper.java:69)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.LayoutInflater.from(LayoutInflater.java:171)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.policy.impl.PhoneWindow.<init>(PhoneWindow.java:161)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.policy.impl.Policy.makeNewWindow(Policy.java:59)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.policy.impl.Policy.makeNewWindow(Policy.java:33)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.policy.PolicyManager.makeNewWindow(PolicyManager.java:58)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.Dialog.<init>(Dialog.java:142)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.AlertDialog.<init>(AlertDialog.java:63)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ProgressDialog.<init>(ProgressDialog.java:80)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ProgressDialog.<init>(ProgressDialog.java:76)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ProgressDialog.show(ProgressDialog.java:101)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ProgressDialog.show(ProgressDialog.java:90)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ProgressDialog.show(ProgressDialog.java:85)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.example.test.ImageDownload.onPreExecute(ImageDownload.java:28)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.os.AsyncTask.execute(AsyncTask.java:391)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.example.test.CurrentFragment.onCreateView(CurrentFragment.java:31)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.view.ViewPager.populate(ViewPager.java:1011)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.view.ViewPager.populate(ViewPager.java:880)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1374)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.View.measure(View.java:8171)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:578)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:362)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.View.measure(View.java:8171)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.View.measure(View.java:8171)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.View.measure(View.java:8171)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.View.measure(View.java:8171)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.os.Looper.loop(Looper.java:123)
05-18 16:42:13.514: E/AndroidRuntime(388): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-18 16:42:13.514: E/AndroidRuntime(388): at java.lang.reflect.Method.invokeNative(Native Method)
05-18 16:42:13.514: E/AndroidRuntime(388): at java.lang.reflect.Method.invoke(Method.java:521)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-18 16:42:13.514: E/AndroidRuntime(388): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-18 16:42:13.514: E/AndroidRuntime(388): at dalvik.system.NativeStart.main(Native Method)
Почему нельзя таким образом передать контекст? Как я понял, при создании если у нас есть какой-то класс- потомок контекста, то экземпляр этого класса будет содержать некую инфу обо всем приложении и, соответсвенно, его можно скормить методу show.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ProgressDialog
Судя по ошибке java.lang.AssertionError, она является чем-то логическим (см. Assert в Java), где не найдено какого-то свойства (LayoutInflater not found.) в контексте. Я так понимаю контекст нельзя создать потому, что, он должен наполниться какой-то системной информацией о приложении. А в твоём случае ты просто создал наследника контекста без информации и естественно not found. Другими словами, откуда в твоем контексте взяться необходимой информации? Думаю контекст так создавать нельзя.
Re: ProgressDialog
Понятно, спасибо! Переделал и опять не работает
[syntax=java] protected void onPreExecute(){
super.onPreExecute();
Bundle bundle= new Bundle();
act= new MainActivity();
act.onCreate(bundle);
progressDialog=new ProgressDialog(act);
progressDialog.setMessage("Downloading pickture from url");
progressDialog.show();
}[/syntax]
Нагуглил, что контекст не доступен из коструктора активити, поэтому вызываю метод onCreate. Но теперь вылетает NullPointerException.
05-18 20:06:27.114: E/AndroidRuntime(531): FATAL EXCEPTION: main
05-18 20:06:27.114: E/AndroidRuntime(531): java.lang.NullPointerException
05-18 20:06:27.114: E/AndroidRuntime(531): at android.app.Activity.getLayoutInflater(Activity.java:2759)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:195)
05-18 20:06:27.114: E/AndroidRuntime(531): at com.example.test.MainActivity.onCreate(MainActivity.java:22)
05-18 20:06:27.114: E/AndroidRuntime(531): at com.example.test.ImageDownload.onPreExecute(ImageDownload.java:30)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.os.AsyncTask.execute(AsyncTask.java:391)
05-18 20:06:27.114: E/AndroidRuntime(531): at com.example.test.CurrentFragment.onCreateView(CurrentFragment.java:31)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.view.ViewPager.populate(ViewPager.java:1011)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.view.ViewPager.populate(ViewPager.java:880)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1374)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.View.measure(View.java:8171)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:578)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:362)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.View.measure(View.java:8171)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.View.measure(View.java:8171)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.View.measure(View.java:8171)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.View.measure(View.java:8171)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.os.Looper.loop(Looper.java:123)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-18 20:06:27.114: E/AndroidRuntime(531): at java.lang.reflect.Method.invokeNative(Native Method)
05-18 20:06:27.114: E/AndroidRuntime(531): at java.lang.reflect.Method.invoke(Method.java:521)
05-18 20:06:27.114: E/AndroidRuntime(531): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-18 20:06:27.114: E/AndroidRuntime(531): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-18 20:06:27.114: E/AndroidRuntime(531): at dalvik.system.NativeStart.main(Native Method)
Оформлять ImageDownload как вложенный подкласс, наверное, смысла не особо имеет. Потому что загруженную картинку в классе ImageDownload я запихиваю во вьюшку во фрагменте Current_Fragment.
[syntax=java] protected void onPreExecute(){
super.onPreExecute();
Bundle bundle= new Bundle();
act= new MainActivity();
act.onCreate(bundle);
progressDialog=new ProgressDialog(act);
progressDialog.setMessage("Downloading pickture from url");
progressDialog.show();
}[/syntax]
Нагуглил, что контекст не доступен из коструктора активити, поэтому вызываю метод onCreate. Но теперь вылетает NullPointerException.
05-18 20:06:27.114: E/AndroidRuntime(531): FATAL EXCEPTION: main
05-18 20:06:27.114: E/AndroidRuntime(531): java.lang.NullPointerException
05-18 20:06:27.114: E/AndroidRuntime(531): at android.app.Activity.getLayoutInflater(Activity.java:2759)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:195)
05-18 20:06:27.114: E/AndroidRuntime(531): at com.example.test.MainActivity.onCreate(MainActivity.java:22)
05-18 20:06:27.114: E/AndroidRuntime(531): at com.example.test.ImageDownload.onPreExecute(ImageDownload.java:30)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.os.AsyncTask.execute(AsyncTask.java:391)
05-18 20:06:27.114: E/AndroidRuntime(531): at com.example.test.CurrentFragment.onCreateView(CurrentFragment.java:31)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.view.ViewPager.populate(ViewPager.java:1011)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.view.ViewPager.populate(ViewPager.java:880)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1374)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.View.measure(View.java:8171)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:578)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:362)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.View.measure(View.java:8171)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.View.measure(View.java:8171)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.View.measure(View.java:8171)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.View.measure(View.java:8171)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.os.Looper.loop(Looper.java:123)
05-18 20:06:27.114: E/AndroidRuntime(531): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-18 20:06:27.114: E/AndroidRuntime(531): at java.lang.reflect.Method.invokeNative(Native Method)
05-18 20:06:27.114: E/AndroidRuntime(531): at java.lang.reflect.Method.invoke(Method.java:521)
05-18 20:06:27.114: E/AndroidRuntime(531): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-18 20:06:27.114: E/AndroidRuntime(531): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-18 20:06:27.114: E/AndroidRuntime(531): at dalvik.system.NativeStart.main(Native Method)
Оформлять ImageDownload как вложенный подкласс, наверное, смысла не особо имеет. Потому что загруженную картинку в классе ImageDownload я запихиваю во вьюшку во фрагменте Current_Fragment.
Re: ProgressDialog
onCreate() - это событие, его вообще лучше не вызывать.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: ProgressDialog
bundos
Какое наследование контекста? Какое программное создание активити? Какой ещё вызов onCreate на ходу?
Стирайте и забудьте то что вы написали, потому что это бред. Контекст получается просто из активити ссылкой на неё или на контекст приложение, или ссылкой на активити из фрагмента.
Какое наследование контекста? Какое программное создание активити? Какой ещё вызов onCreate на ходу?
Стирайте и забудьте то что вы написали, потому что это бред. Контекст получается просто из активити ссылкой на неё или на контекст приложение, или ссылкой на активити из фрагмента.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: ProgressDialog
Да, тут я понял почему был не прав. В этом случае создается класс, который никакой инфы о приложении не содержит.rezak90 писал(а): Какое наследование контекста?
Нужно было получить контекст. Я создал активити программно, вызвал onCreate, потому что в при вызове контркутора активити никакого контекста еще нет. Не вижу ничего криминального, можете пояснить почему так делать нельзя?rezak90 писал(а): Какое программное создание активити? Какой ещё вызов onCreate на ходу?
Re: ProgressDialog
Потому, что это не метод, а событие. Вызывая события вы берете на себя функцию второго Бога в операционной системе, а он должен быть один 
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: ProgressDialog
что бы получить контекст:
getApplicationContext()
this (если активити)
MainActivity.this (если inner class/method)
getActivity() (если во фрагменте)
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: ProgressDialog
Вот оно где подвох, спасибо!Foenix писал(а):Потому, что это не метод, а событие. Вызывая события вы берете на себя функцию второго Бога в операционной системе, а он должен быть один
Re: ProgressDialog
Рассматриваю несколько open-source проектов на андроид и везде там получение контекста сделано через передачу в параметрах. В том числе много статических классов, работающих с SqlLite и в каждом методе необходима передача контекста.
В свое время когда гуглил тему получения контекста, то натолкнулся на решение аналогичное этому:
http://stackoverflow.com/questions/2002 ... 61#5114361
Там контекст берется из Application.
Какой из способов предпочтительнее (передача в параметрах или из Apllication)? Может есть подводные камни в получении контекста из Application?
В свое время когда гуглил тему получения контекста, то натолкнулся на решение аналогичное этому:
http://stackoverflow.com/questions/2002 ... 61#5114361
Там контекст берется из Application.
Какой из способов предпочтительнее (передача в параметрах или из Apllication)? Может есть подводные камни в получении контекста из Application?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ProgressDialog
Да. На сколько знаю, контекст от Application не даст показать ProgressDialog. Туда вроде надо передавать контекст именно той активности, в которой он будет просматриваться. Вроде так.
Re: ProgressDialog
http://android-developers.blogspot.co.i ... leaks.html в этой статье идет речь об утечке памяти связанной с контекстом Activity. Если я правильно понял, то разбирается случай, когда долгоживущий объект связан с контекстом активити и из-за этого GC не может удалить из памяти данное активити. Как одно из решений данной проблемы, в статье призывается использовать в данном случае контекст именно Application - так не будет связи с активити, которые должны иметь возможность умирать.
no--, как вы получаете контекст в своих приложениях?
no--, как вы получаете контекст в своих приложениях?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ProgressDialog
Да, помню что там есть факт утечки и что советуют использовать контекст от Application и this. Именно так и использую.
Re: ProgressDialog
Спасибо вам, вопрос исчерпан 
Re: ProgressDialog
Созрел еще вопрос. Для дальнейшего написания тестов контекст все таки лучше передавать в параметрах? Кто имел опыт написания тестов?
