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

خطا در onResume لیست ویو(حل شد)

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

چرا در onResume خطا میده برنامه؟ خطا ی NullPointerException. 

می خواستم برای لیست ویو تا زمان دریافت اطلاعات لودینگ داشته باشه و بگید کجا شرط اینترنت رو چک کنم؟

 public class NewsFragment extends Fragment {
	private ArrayAdapter adapter;
	public NewsFragment(){}
	ProgressDialog mProgressDialog;
	ListView lstContent;
	
	
	
	
	
	@Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
           Bundle savedInstanceState) {
		
		 View rootView = inflater.inflate(R.layout.fragment_news, container, false);
		 
		  ListView lstContent = (ListView) rootView.findViewById(R.id.lstContent);
		 	  
		  new TestAsync().execute();
		 
		  
		
		 return rootView; 
	
}
	
	
	   @Override
	   public void onResume() {
        super.onResume();
        adapter.notifyDataSetChanged();
	    
	}
	

	class TestAsync extends AsyncTask<Void, Void, Void>
		 {

		 protected void onPreExecute () {
		 mProgressDialog = new ProgressDialog(getActivity());
		 mProgressDialog.setMessage("لطفا صبر کنید...");
		 mProgressDialog.setIndeterminate(false);
		 mProgressDialog.show();
		 
		 }

		@Override
		protected Void doInBackground(Void... params) {
			DoRead();
	
			return null;
		}
		 }
	
	    protected void onPostExecute(Void result){
		   mProgressDialog.dismiss();
		   
		      adapter = new AdapterNews(G.tasks);
			  lstContent.setAdapter(adapter);
			  DoRead();
			  
			  
		   
		 
		   
	   }

	   public void onReceived(String data) {
		   
		   
         
      }

	
		
	
	public void DoRead() {
	        String result = Webservice.readUrl("http://192.168.1.1/android/note_server/news.php?action=read", null);
	        if (result != null) {
	            try {
	                G.tasks.clear();
	                JSONArray tasks = new JSONArray(result);
	                for (int i = 0; i < tasks.length(); i++) {
	                    JSONObject object = tasks.getJSONObject(i);
	                    StructTask task = new StructTask();
	                    task.id = object.getLong("news_id");
	                    task.title = object.getString("news_title");
	                    task.desc = object.getString("news_desc");
	                    task.date = object.getString("news_date") ;

	                    G.tasks.add(task);
	                }
	            }
	            catch (JSONException e) {
	                e.printStackTrace();
	            }
	        }
	    }
	 
}
0 0
جدیدا چرا کسی جواب سوال نمیده؟ چیزی شده ما خبر نداریم؟ (11 سال پیش)
0 0
تو رو خدا یکی بگه چکار کنم؟ adapter.notifyDataSetChanged(); رو که بر می دارم لودینگ اجرا میشه ولی اطلاعات نمیاد. (11 سال پیش)
+1 0
در پاسخ به کامنت اولتون > چون سطح و کیفیت اغلب سوالات بجای بالا رفتن هر روز پایین تر میره - هدف یادگیری و برنامه نویس شدن (به قول استاد) نیست - برخی از سوالات هم از توان امثال من خارج هست - خیلی ها هنوز فرق سوال با معما رو درک نکردن - و دلایل دیگر ... - با این اوصاف فعالیت در اینجا برای برخی به منزله هدر دادن زمان و انرژی شون هست. (11 سال پیش)
0 0
اینو قبول دارم Spirit جان. ولی من و امسال من بعضی جاها میمونیم باید سوال بپرسم تا مشکلم حل شه چون هنوز حرفه ای نشدم . :( (11 سال پیش)
+1 0
اشکال اول تو همون onResume هست، این متد خیلی زودتر از AsyncTask اجرا میشه (رجوع به چرخه حیات Fragment)، تو اون لحظه Adapter شما null هست پس اون خطایی که گفتید رو میگیرید - دلیل نمایش ندادن اطلاعات هم از جایی دیگست (شاید اطلاعات دریافت نشده، Adapter درست نوشته نشده) - توی متد onPostExecute هم متد DoRead رو دوباره صدا زدین، نمیدونم چرا؟! (11 سال پیش)
0 0
خوب وقتی این 3 تا رو میزارم قبل return rootView اطلاعات میاد و لودینگ هم اجرا میشه ولی وقتی میزارم داخل onPostExecute فقط لودینگ اجرا میشه. اصلا از این تیکه سر در نمیارم. :( (11 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
علی  11 سال پیش
0 0

   adapter = new AdapterNews(G.tasks);
		   lstContent.setAdapter(adapter);
		   DoRead();
0 0
الان اینجوری کردم کدها رو. چرا نمی خونه اطلاعات رو؟ واقعا موندم دیگه . (11 سال پیش)
پاسخ به سوال 
علی  11 سال پیش
0 0

public class NewsFragment extends Fragment {
	public ArrayAdapter adapter;
	public NewsFragment(){}
	ProgressDialog mProgressDialog;
	ListView lstContent;
	ConnectionDetector cd;


	
	@Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
           Bundle savedInstanceState) {
		
		 View rootView = inflater.inflate(R.layout.fragment_news, container, false);
		 
		 lstContent =  (ListView) rootView.findViewById(R.id.lstContent);
		 	  
	      new TestAsync().execute();
	      cd = new ConnectionDetector(getActivity());
		 
	      
		 return rootView; 
	
}
	
	

	
		class TestAsync extends AsyncTask<String, Void, String>
		 {

			@Override
			protected String doInBackground(String... params) {
				 
				  DoRead();
				return null;
			}
			
			
			 protected void onPreExecute () {
				 mProgressDialog = new ProgressDialog(getActivity());
				 mProgressDialog.setMessage("لطفا صبر کنید...");
				 mProgressDialog.setIndeterminate(false);
				 mProgressDialog.show();
				 super.onPreExecute();
		     	 }
			 
			 
			 
		 protected void onPostExecute(String result){
					
		  mProgressDialog.dismiss();
	           if (!cd.isConnectingToInternet()){
						
				Toast.makeText(getActivity().getApplicationContext(), "خطا در برقراری ارتباط.", Toast.LENGTH_LONG).show();
			}else{
				   
		   adapter = new AdapterNews(G.tasks);
		lstContent.setAdapter(adapter);
		}

   }
			
			
		public void onResume() {
		  adapter.notifyDataSetChanged();
			   
			}
			
		 }
	
	
		public void DoRead() {
	        String result = Webservice.readUrl("http://192.168.1.1/android/note_server/news.php?action=read", null);
	        if (result != null) {
	            try {
	                G.tasks.clear();
	                JSONArray tasks = new JSONArray(result);
	                for (int i = 0; i < tasks.length(); i++) {
	                    JSONObject object = tasks.getJSONObject(i);
	                    StructTask task = new StructTask();
	                    task.id = object.getLong("news_id");
	                    task.title = object.getString("news_title");
	                    task.desc = object.getString("news_desc");
	                    task.date = object.getString("news_date") ;

	                    G.tasks.add(task);
	                }
	            }
	            catch (JSONException e) {
	                e.printStackTrace();
	            }
	        }
	    }
	
}
0 0
Sprit جان درست شد عزیز یه جا اشتباه از خودم بود ! همین کد بالا درست کار میکنه. فقط طرف اگه اینترنت وصل باشه و شارژ تموم شده باشه چطوری باید چک کرد؟ (11 سال پیش)

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