AppCompatActivity.onCreate สามารถเรียกได้จากภายในกลุ่มไลบรารีเดียวกันเท่านั้น


108

หลังจากอัปเกรดเป็น appcompat 25.1.0ฉันเริ่มได้รับข้อผิดพลาดเกี่ยวกับสาย

ในรหัสของฉัน:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

ฉันได้รับข้อผิดพลาดผ้าสำลี:

AppCompatActivity.onCreate can only be called from within the same library group (groupId=com.android.support)

จะป้องกันพฤติกรรมดังกล่าวได้อย่างไร?


6
แทนที่invalidateOptionsMenu()ด้วยsupportInvalidateOptionsMenu(). มันควรจะทำงาน
ᴛʜᴇᴘᴀᴛᴇʟ

1
ฉันไม่ได้ใช้วิธีการดังกล่าวในโค้ดของฉัน
พิกเซล

3
ดูเหมือนจะเป็นข้อบกพร่อง: code.google.com/p/android/issues/detail?id=230387
Felipe Lima

คำตอบ:


95

ดังที่เฟลิเป้ได้ชี้ให้เห็นแล้วในความคิดเห็นของเขานี่เป็นข้อบกพร่องในเครื่องมือเวอร์ชันก่อนวางจำหน่าย

คุณสามารถแก้ปัญหาได้ในตอนนี้จนกว่า Google จะออกการแก้ไขโดยเพิ่มสิ่งต่อไปนี้ลงในไฟล์ build.gradle ของโมดูลโปรเจ็กต์:

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}

เป็นที่น่าสังเกตว่าสิ่งนี้อาจซ่อนข้อผิดพลาดที่แท้จริงในโครงการของคุณเนื่องจากจะระงับข้อผิดพลาดประเภทนั้นทั้งหมดดังนั้นตัวเลือกที่ดีกว่าคือการปรับลดรุ่น Android Studio และเครื่องมือที่ใช้ในโครงการ


5
ผมขอแนะนำให้คำตอบ @ Cbr ด้านล่างก็เพียงยับยั้งในระดับวิธีการและการทำงานบน Android สตูดิโอ 3 //noinspection RestrictedApiซึ่งแตกต่างจาก
Sakiboy

137

เนื่องจากคำตอบก่อนหน้านี้ถูกไฮไลต์ไว้มันคือข้อบกพร่อง ฉันไม่แนะนำให้ปิดการใช้งานคำเตือนผ้าสำลีเฉพาะโปรเจ็กต์ แต่สำหรับวิธีการนั้นเท่านั้น ใส่คำอธิบายประกอบวิธีของคุณดังนี้:

@SuppressLint("RestrictedApi")
@Override
public void setupDialog(Dialog dialog, int style) {
    super.setupDialog(dialog, style);
    //your code here
}

4
คำตอบนี้ดีที่สุดเพราะไม่ได้ปิดการใช้งานทั่วโลก แต่จะแก้ข้อผิดพลาด / คำเตือนใน IDE และในเวลาคอมไพล์ก็เข้าใจได้ง่ายเนื่องจากมีการระบุไว้อย่างชัดเจนที่ด้านบนของวิธีการ ( //noinspection RestrictedApiซึ่งแตกต่างจากที่ซ่อนเป็นความคิดเห็นและ ปิดเสียงเตือนใน IDE เท่านั้น แต่ไม่ใช่ในเวลาคอมไพล์) และใช้ได้กับ Android Studio และ Gradle เวอร์ชันล่าสุด
Sakiboy

1
คำตอบนี้ควรใช้ ไม่ควรปิดการใช้งานทั่วโลกในโครงการ
Christopher Smit

1
คุณยังสามารถใช้คำอธิบายประกอบนี้เฉพาะบรรทัดที่คุณต้องการแทนการระงับสำหรับวิธีการทั้งหมด
Ben Kane

65

การปิดคำเตือนใน lint

เพิ่มความคิดเห็นนี้เหนือบรรทัดของรหัสซึ่งให้คำเตือน:

//noinspection RestrictedApi

2
ฉันจะไปกับคนนี้ ฉันอาจเป็นทางออกที่ดีกว่าที่จะไม่ปิดการใช้งาน lintOptions ทั่วโลก Thx
Yoraco Gonzales

4
ไม่ทำงานใน Android Studio 3 มีการเปลี่ยนแปลงบางอย่างหรือไม่
vovahost

13
@vovahost ฉันใช้@SuppressLint("RestrictedApi")แทน//noinspection RestrictedApiโดยไม่มีปัญหาใน Android Studio 3
เวกเตอร์

1
ใช่แน่นอนว่ามันใช้ได้กับฉันเช่นกัน แต่ // noinspection ใช้ได้กับคำสั่งเดียวเท่านั้นซึ่งดีกว่า
vovahost

1
@Sakiboy โซลูชันของ Cbr ใช้กับวิธีการทั้งหมดที่ฉันไม่ต้องการใช้เพราะอาจซ่อนข้อผิดพลาดอื่น ๆ
vovahost
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.