দ্রষ্টব্য: এই উত্তরটি অ্যান্ড্রয়েড স্টুডিও ২.২.২ ব্যবহার করছে
দ্রষ্টব্য 2: আমি বিবেচনা করছি যে আপনার ডিভাইসটি সফলভাবে সংযুক্ত হয়েছে।
আপনার অ্যাপ্লিকেশন ক্র্যাশ হওয়ার সময় প্রথম কাজটি আপনি লগগিকেটে দেখলে অ্যান্ড্রয়েড স্টুডিওর নীচে মেনুগুলির একটি তালিকা সহ একটি সরঞ্জামদণ্ড রয়েছে:
"অ্যান্ড্রয়েড মনিটর" এ ক্লিক করুন (আমি উপরের চিত্রটিতে আন্ডারলাইন করা।)
এখন, আপনি এর মতো কিছু পাবেন:
" Verbose
" এ " " পরিবর্তন করুন " Error
এখন এটি আপনাকে লগ করা ত্রুটিগুলি কেবল প্রদর্শন করবে। এই সমস্ত ত্রুটি সম্পর্কে এখন চিন্তা করবেন না (যদি আপনি সেগুলি পেয়ে থাকেন)।
ঠিক আছে. এখন, আপনার অ্যাপটি ক্রাশ করতে আপনি যা করেছিলেন তা করুন। আপনার অ্যাপ ক্রাশ হওয়ার পরে আপনার লগকটে যান log আপনার একটি নতুন ক্র্যাশ লগ পাওয়া উচিত যাতে প্রচুর পরিমাণে রয়েছে at:x.x.x
: এবং Caused by: TrumpIsPresidentException
উদাহরণস্বরূপ। Caused by:
আপনার লগকটে সেই বিবৃতিতে যান ।
পরবর্তী যে Caused By:
, সেখানে ব্যতিক্রম যে ঘটেছে হওয়া উচিত। আমার ক্ষেত্রে এটি একটি RuntimeException
এবং এর নীচে একটি লাইন থাকা উচিত যার মধ্যে নীল লিঙ্ক রয়েছে :
যদি এরCaused by:
নীচে কোথাও নীল পাঠ্যের একটি লাইন থাকে না, তবে অন্যটির মতো Caused by:
করে দেখুন।
সেই নীল লিঙ্কটিতে ক্লিক করুন । সমস্যাটি যেখানে ঘটেছিল সেখানে আপনাকে নিয়ে যাওয়া উচিত। আমার ক্ষেত্রে, এটি এই লাইনের কারণে ছিল:
throw new RuntimeException();
সুতরাং, এখন আমি জানি কেন এটি ক্রাশ হচ্ছে। এর কারণ আমি নিজে ব্যতিক্রম ছুঁড়েছি। এটি একটি সুস্পষ্ট ত্রুটি ছিল ।
তবে, ধরা যাক আমি আরও একটি ত্রুটি পেয়েছি:
java.lang.NullPointerException
আমি আমার লগক্যাটটি চেক করেছি, আমি যে নীল লিঙ্কটি দিয়েছি তাতে ক্লিক করেছি এবং এটি আমাকে এখানে নিয়ে গেছে:
mTextView.setText(myString);
সুতরাং, এখন আমি ডিবাগ করতে চাই। এই স্ট্যাকওভারফ্লো প্রশ্ন অনুসারে , একটি নলপয়েন্টার এক্সসেপশন বলে যে কিছু একটা null
।
সুতরাং, আসুন জেনে নেওয়া যাক কি নাল । দুটি সম্ভাবনা আছে। হয় mTextView
নাল, বা myString
শূন্য হয়। mTextView.setText(mString)
লাইনের আগে , আমি এই দুটি লাইন যুক্ত করব:
Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);
এখন, যেমন আমরা আগে করেছি (আমরা ভেরোজকে ত্রুটিতে পরিবর্তন করেছি), আমরা "ত্রুটি" পরিবর্তন করে "ডিবাগ" করতে চাই। যেহেতু আমরা ডিবাগিং করে লগ করছি। সমস্ত লগ পদ্ধতি এখানে:
Log.
d means Debug
e means error
w means warning
v means verbose
i means information
wtf means "What a terrible failure". This is similar to Log.e
সুতরাং, যেহেতু আমরা ব্যবহার করেছি Log.d
, আমরা ডিবাগ এ যাচাই করছি। এজন্য আমরা এটিকে ডিবাগ-এ পরিবর্তন করেছি।
নোটিশের Log.d
একটি প্রথম প্যারামিটার রয়েছে, আমাদের ক্ষেত্রে "অ্যাপডিবুগ"। লগকটের উপরে-ডানদিকে "ফিল্টার নেই" ড্রপ ডাউন মেনুতে ক্লিক করুন। "ফিল্টার কনফিগারেশন সম্পাদনা করুন" নির্বাচন করুন, আপনার ফিল্টারে একটি নাম দিন এবং "লগ ট্যাগ" এ "অ্যাপ ডিবাগ" দিন। "ওকে" ক্লিক করুন। এখন, আপনার লগক্যাটটিতে দুটি লাইন দেখা উচিত:
yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false
সুতরাং এখন আমরা জানি যে এমটেক্সটভিউটি নাল।
আমি আমার কোডটি পর্যবেক্ষণ করছি, এখন আমি কিছু লক্ষ্য করছি।
আমি private TextView mTextView
আমার ক্লাসের শীর্ষে ঘোষণা করেছি। তবে, আমি এটি সংজ্ঞায়িত করছি না।
মূলত আমি আমার অনক্রিট () এ এটি করতে ভুলে গেছি:
mTextView = (TextView) findViewById(R.id.textview_id_in_xml);
সুতরাং mTextView
এটি কেন নাল, কারণ আমি আমার অ্যাপ্লিকেশনটি কী তা বলতে ভুলে গিয়েছি। সুতরাং আমি সেই লাইনটি যুক্ত করছি, আমার অ্যাপ্লিকেশনটি চালান, এবং এখন অ্যাপটি ক্রাশ হয় না।