অ্যান্ড্রয়েডে আর ক্লাস আর কি?


90

অ্যান্ড্রয়েড স্টুডিওতে, যখন আমি একটি খালি ক্রিয়াকলাপ ব্যবহার করে একটি প্রকল্প তৈরি করি, তখন আমি MainActivity.javaফাইলটিতে নিম্নলিখিত কোডের টুকরোটি পাই :

package my.company.my_proj;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

যেখানে নামের একটি ক্রিপ্টিক শ্রেণি Rব্যবহৃত হয়। এই শ্রেণীর উদ্দেশ্য কী R?

উত্তর:


119

Rএকটি শ্রেণি যা নির্দিষ্ট অ্যাপ্লিকেশন প্যাকেজের সমস্ত সংস্থার জন্য সংজ্ঞা যুক্ত করে । এটি অ্যাপ্লিকেশন প্যাকেজের নামস্থানে রয়েছে

উদাহরণস্বরূপ, আপনি যদি আপনার ম্যানিফেস্টে আপনার প্যাকেজের নামটি বলেন তবে আপনার সমস্ত সংস্থার প্রতীক সহ com.foo.barএকটি Rশ্রেণি তৈরি করা হয়েছে com.foo.bar.R

সাধারণত দুটি R ক্লাস আপনার সাথে কাজ করবে

  1. ফ্রেমওয়ার্ক রিসোর্স android.Rএবং
  2. আপনার নিজের জায়গাতেই আপনার নিজের

এটির নাম দেওয়া হয়েছে Rকারণ এটি আর এসোসোর্সগুলির জন্য দাঁড়িয়েছে এবং লোকেদের আর কিছু দীর্ঘায়িত করার কোনও অর্থ নেই, বিশেষত যেহেতু এটির পরে মোটামুটি দীর্ঘ প্রতীক নামগুলি ব্যবহার করা সাধারণ কারণ এটি ন্যায্য পরিমাণ রেখার মোড়কের কারণ হতে পারে।


11
সমস্ত সমস্যা সমাধানের পরে এবং বইটি নিয়ে যাওয়ার পরে, আমি যুক্ত করতে পারি (বই থেকে): এটি একটি স্বয়ংক্রিয়ভাবে উত্পন্ন উত্সাহী শ্রেণি যা প্রকল্পের সংস্থানগুলির জন্য রেফারেন্স সরবরাহ করে। একে "আর শ্রেণি" বলা হয় কারণ এটির নাম আর। জাভা । এটি এএপিটি দ্বারা রেজোলর্ড থেকে রেস ফোল্ডারের মধ্যে নির্ধারিত হয় generated
অ্যান্ড্রয়েড ইভ


14
লোকেরা কিছু দীর্ঘ সময় টাইপ করে তোলে: এটি পরিষ্কার কোড বলে এবং এটি এখনও সবার কাছে না পৌঁছতে পারে not একটি লেটার ক্লাস, এক্সটেনশন, ভেরিয়েবল স্থানীয় প্রেক্ষাপটে সূক্ষ্ম হতে পারে তবে বিশ্বব্যাপী কখনও নয়। এই মত কুৎসিত নামগুলি এ জাতীয় অনর্থক প্রশ্নগুলির দিকে পরিচালিত করে।
ব্রেইনরে

23

আর কি: আর সম্পর্কে খুব রহস্যজনক কিছু নেই It এটি কেবলমাত্র এমন একটি শ্রেণী যা অনেকগুলি স্থির উপক্লাস রয়েছে, এটি গ্রহনে খোলে এবং একবার দেখুন (এর জেনার / এর অধীনে)।

এই শ্রেণীর প্রতিটি সদস্য দুটি জিনিসের মধ্যে একটি: 1) স্ট্যাটিক ফাইনাল ক্লাস বা 2) স্ট্যাটিক ফাইনাল ইন্টিজারগুলি যা তাদের শ্রেণীর অন্যান্য সদস্যদের সাথে সম্মানের সাথে অনন্য।

এটি এত গুপ্ত কেন: বিভ্রান্ত হওয়া সহজ কারণ আরটি স্বয়ংক্রিয়ভাবে পিঁপড়ে দ্বারা উত্পাদিত হয়। এটির গুপ্তচর কারণ এটি আপনাকে ম্যানুয়ালি "স্পর্শ" করার কথা নয় (অবশ্যই আপনি পারবেন তবে আপনার পরিবর্তনগুলি পুনরুত্থানের পরে স্বয়ংক্রিয়ভাবে মুছে যাবে)। এর অতিরিক্ত ক্রিপ্টিক কারণ কখনও কখনও গ্রহনটি স্বয়ংক্রিয়ভাবে অ্যান্ড্রয়েড স্ট্যান্ডার্ড আর ফাইলটি আমদানি করে (উপরের উত্তরে আলোচিত হিসাবে)

কেন এটি সর্বদা প্রথম যেটিকে সমাধান করা যায় না: আর জাভা ক্লাস এবং প্যাকেজগুলির নিয়ম ঠিক অনুসরণ করে, আমদানির ক্ষেত্রে আর কীভাবে কাজ করে সে সম্পর্কে বিশেষ কিছু নেই । আর আপনার ম্যানিফেস্ট ফাইলটিতে প্যাকেজ এন্ট্রি দ্বারা নির্দিষ্ট প্যাকেজে স্বয়ংক্রিয়ভাবে স্থাপন করা হবে

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="package.which.will.contain.R.and.probably.the.main.package.in.the.application" android:versionName="8.6.2011" android:versionCode="1">
    <uses-sdk android:minSdkVersion="13" />

আপনার আর ফাইলটি কোন প্যাকেজটির সাথে সম্পর্কিত তা দেখার জন্য কেবল গ্রিপসে জেন / ফোল্ডারটি খুলুন (প্যাকেজ ভিউ)। আপনি সেখানে তালিকাভুক্ত একটি প্যাকেজ দেখতে পাবেন, এতে আপনার ম্যানিফেস্টে নির্দিষ্ট করা নাম থাকবে। এটিকে মোছার চেষ্টা করুন, আপনার সমস্ত সংস্থান সঠিক নামকরণের নিয়ম অনুসরণ করে এবং আপনার সমস্ত এক্সএমএল ফাইল সঠিক এক্সএমএল নিয়ম অনুসরণ করে এবং যদি স্বয়ংক্রিয়ভাবে বিলম্বটি গ্রহনে সক্ষম হয় তবে তা ফিরে আসবে ।

আর ফাইলটি বোঝার মূল চাবিকাঠিটি এটি অন্য শ্রেণীর মতো একই প্যাকেজে রয়েছে যদিও এটি অন্য ডিরেক্টরিতে রয়েছে তবে আপনার "মূল" প্যাকেজের অন্তর্ভুক্ত অন্যান্য ফাইলগুলি। আপনি এটি বোঝার পরে এবং সিনট্যাক্স এবং রিসোর্স ফাইলগুলির নামকরণ বোঝার পরে আর এর সাথে সমস্যা সমাধানের বিষয়টি সহজ।


3

R আপনার সংস্থানগুলির নাম। আপনার দ্বারা অ্যাক্সেস করা কোনও সংস্থান R.$FOLDER.$RESOURCEবা খুব অনুরূপ কিছু something

যদি এটি সমাধান করা যায় না, নিশ্চিত হয়ে নিন যে পথটি সঠিক এবং রেফারেন্স করা সংস্থানটি বিদ্যমান (কেস-সংবেদনশীল; এক্সটেনশন অন্তর্ভুক্ত করুন)।

এছাড়াও, বিভ্রান্তিকর অংশটি (আমার কাছে, যাইহোক) এটি হ'ল দুটি আলাদা R যদি আপনি প্রচুর "সমাধান করা যায় না" ত্রুটিগুলি পেয়ে থাকেন তবে আপনি কী আমদানি করছেন তা দেখার চেষ্টা করুন। এটি পরিবর্তন বা অপসারণ করার চেষ্টা করুন। অথবা আপনি আপনার প্রকল্পটি পরিষ্কার করার চেষ্টা করতে পারেন (সতর্কতা: কখনও কখনও এটি জিনিসগুলি ইতিমধ্যে যা তাদের চেয়ে খারাপ করে তোলে)।


হ্যাঁ, আমার প্রকল্পটি পরিষ্কার করা একটি নিত্যদিনের রুটিন বলে মনে হয় - গ্রহনটি সর্বদা অবিচ্ছিন্ন হয়ে যায় এবং জিনিসগুলি ভুলে যায়, তবে একটি ভাল পরিচ্ছন্নতা জিনিসগুলি ঠিক করে দেবে বলে মনে হয় (যদিও জন এর উল্লেখ মতো আমি এর চেয়ে খারাপ হওয়ার অভিজ্ঞতা কখনও পাইনি) ।
ব্রায়ান ডি

@ ব্রায়ান: আমি যখন আমার প্রকল্পটি পরিষ্কার করি, তখন গ্রহপৃষ্ঠীটি আমার Rফাইলটি ধ্বংস করে এবং পুনঃজেনার করে । একবারে এটি "পুনরায় জন্মানো" পদক্ষেপটি আমাকে ছাড়াই (বা একটি খালি সাথে) রেখে দেয় Rএবং Rহাত দ্বারা করা কোনও পরিবর্তন স্বয়ংক্রিয়ভাবে পূর্বাবস্থায়িত করার জন্য প্রোগ্রাম করা হয়।
জন

@ জন: আপনি কৌতূহলের বাইরে কি ওএস ব্যবহার করছেন?
ব্রায়ান ডি

@ জন, ক্লিনিং আমার ক্ষেত্রে কোনও উপকারে আসেনি। আপনি এই থ্রেডে ত্রুটিগুলির আসল তালিকা দেখতে পাবেন (যার উত্তর এখনও দেওয়া হয়নি): stackoverflow.com/questions/4928784/…
অ্যান্ড্রয়েড ইভ

1

অ্যান্ড্রয়েড আর.জাভা এএপিটি (অ্যান্ড্রয়েড অ্যাসেট প্যাকেজিং সরঞ্জাম) দ্বারা স্বতঃ উত্পাদিত ফাইল যা রেস / ডিরেক্টরিটির সমস্ত সংস্থানগুলির জন্য সংস্থান আইডি ধারণ করে। আপনি ক্রিয়াকলাপ_মাইন.এক্সএমএল ফাইলে কোনও উপাদান তৈরি করে থাকলে সংশ্লিষ্ট উপাদানটির আইডি এই ফাইলটিতে স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়। এই আইডিটি উপাদানটির কোনও ক্রিয়াকলাপ সম্পাদনের জন্য ক্রিয়াকলাপ উত্স ফাইলটিতে ব্যবহার করা যেতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.