2016-03-24 7 views
5

एंड्रॉइड स्टूडियो के लिए नया उत्पादन कर सकता है, और मैंने सोचा कि मैं ठीक कर रहा था, लेकिन कल रात एक त्रुटि में भाग गया कि मैं अपने सभी अच्छे प्रयासों के बावजूद ठीक नहीं लग रहा हूं। मेरी गतिविधियों में से एक बटन 'java.lang.NullPointerException' उत्पन्न कर सकता है, सिवाय इसके कि यह हर बार धक्का देने में विफल रहता है। यह गलत जगह आदि में कोड की एक पंक्ति को ऑर्डर करने के समान सरल हो सकता है, लेकिन मैं एंड्रॉइड स्टूडियो में इतना नया हूं, मुझे नहीं पता कि मैं कहां गलत हूं।बटन नल पॉइंटर अपवाद (एंड्रॉइड स्टूडियो)

public class searchPage extends AppCompatActivity { 

    private GoogleApiClient client; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_search_page); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    Button goBackButton = (Button) findViewById(R.id.goBackButton); 

    goBackButton.setOnClickListener(new View.OnClickListener() { 
     @Override 

     public void onClick(View v) { 

      startActivity(new Intent(searchPage.this, MainActivity.class)); 
     } 
    }); 

यहाँ एक्सएमएल

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Button" 
    android:id="@+id/goBackButton" 
    android:layout_marginTop="88dp" 
    android:layout_below="@+id/spinner4" 
    android:layout_centerHorizontal="true" 
    /> 

और मैनिफ़ेस्ट फ़ाइल

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.onein.mobilefinalapp"> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".searchPage" 
     android:label="@string/title_activity_search_page" 
     android:theme="@style/AppTheme.NoActionBar" /> 

    <activity 
     android:name=".MoviePage" 
     android:label="@string/title_activity_movie_page" 
     android:theme="@style/AppTheme.NoActionBar"></activity> 

    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
</application> 

</manifest> 

यहाँ है activity_search_page.xml

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

<include layout="@layout/content_search_page" /> 

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="@dimen/fab_margin" 
    android:src="@android:drawable/ic_dialog_email" /> 

</android.support.design.widget.CoordinatorLayout> 
है

यदि आपको किसी अन्य जानकारी की आवश्यकता है, तो कृपया मुझे बताएं।

किसी भी मदद की बहुत सराहना की! धन्यवाद।

संपादित करें - डुप्लिकेट बटन हटा दिया, और activity_search_page.xml

+1

कारण है कि आप एक ही आईडी 'goBackButton' के साथ दो बटन है? –

+0

अपवाद स्टैक ट्रेस उपयोगी होगा। –

+0

साझा करें गतिविधि_search_page.xml भी –

उत्तर

4

विधि मंगलाचरण 'setOnClickListener' 'java.lang.NullPointerException' कम उत्पादन हो सकता है में जोड़ने ...

यह निरीक्षण विधि नियंत्रण विश्लेषण करती है और संभावित प्रवाह की रिपोर्ट करने के लिए डेटा प्रवाह जो हमेशा सत्य या झूठे होते हैं, अभिव्यक्ति जिसका मूल्य स्थिर रूप से स्थिर साबित होता है, और ऐसी परिस्थितियां जो शून्यता अनुबंध उल्लंघन का कारण बन सकती हैं।

यह केवल एक चेतावनी है क्योंकि findViewByIdnull वापस आ जाएगी दी गई id लेआउट में नहीं पाया जा सकता है।

यदि आप यह सुनिश्चित करने के लिए जानते हैं कि आईडी उस लेआउट में है जिसे आप उपयोग कर रहे हैं, तो आप सुरक्षित रूप से इसे अनदेखा कर सकते हैं, या आप इसे किसी दावे (और संभवतः @Nullable एनोटेशन) से अनदेखा कर सकते हैं।

सभी की
View v = findViewById(R.id.someId); 
assert v != null; 
v.setOnClickListener(...); 
+0

हाँ, मैंने कोशिश की। जब भी मैं इसे चलाता हूं तब भी मेरे ऐप को क्रैश कर देता हूं और बटन पर क्लिक करता हूं। बस कहता है कि ऐप ने – Oneinchwalrus

+1

पर काम करना बंद कर दिया है और लॉगकैट आपको बताएगा कि क्यों, जावा –

+0

धन्यवाद में एक अन्य NullPointerException की तरह, मेरे लिए काम करता है! हालांकि मैं थोड़ी उलझन में हूं, मुझे नलपॉन्टर एक्सेप्शन त्रुटि ओपी मिल गया है अगर मैं क्लिक श्रोता सेट करने से पहले "assert v! = null" कथन का उपयोग नहीं करता हूं। @ क्रिकेट_007 क्या आप थोड़ा और अंतर्दृष्टि प्रदान कर सकते हैं क्यों? मैं इंप्रेशन आवेषण कथन के तहत नियंत्रण प्रवाह के बजाए एक शर्त की कोशिश करने में त्रुटियों को मुद्रित करने के लिए उपयोग कर रहा हूं। मैंने अपने "assert v! = null" को "if (v! = null)" में बदल दिया है ताकि मेरे सिर में अधिक समझ हो सके – devonJS

0

पहले, अपने Button जरूरतों findViewById() काम करने के लिए activity_search_page.xml फ़ाइल में किया जाना है।

दूसरा, मुझे लगता है कि आप बैक बटन कार्यक्षमता चाहते हैं, उस मामले

  1. में Button
  2. से संबंधित कोड निकाल दें जोड़े toolbar.setDisplayHomeAsUpEnabled(true);
  3. कोड

    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          startActivity(new Intent(searchPage.this, MainActivity.class)); 
         } 
    }); 
    
  4. नीचे जोड़ें वैकल्पिक, अपने स्वयं के ड्रॉइंग का उपयोग करने के लिए toolbar.setNavigationIcon(R.drawable.your_own_back_button_drawable_here); का उपयोग करें।

This may help as well

0

के रूप में @ cricket007 यह एक चेतावनी है कि इस मामले में कोई संसाधन तो पाया जाता है, अशक्त दिया जाता है जो वास्तव में ऐप्लिकेशन क्रैश करता है तो है द्वारा सही ढंग से बताया।

कुछ इस समस्या को हल करने के तरीके:

1) आदेश

assert object_name != null 

या बस करना alt+enter का प्रयोग करें, यह एंड्रॉयड स्टूडियो द्वारा शीर्ष सुझावों में से एक के बीच में है।

2) का प्रयोग करें

if(object!=null) 

3) try और catch ब्लॉक (त्रुटियों से निपटने के जावा के रास्ते का उपयोग करें।)

try{ 
    your entire code here; 
} 
catch(Exception e){ 
    what to do when exception happens 
} 
+0

मैं स्टैक कमेटी के लिए काफी नया हूं, इसलिए कृपया बेहतर उत्तर देने के लिए स्वतंत्र महसूस करें, और मुझे बताएं कि क्या मुझे एक जोड़ना चाहिए कोड का सारांश, जहां मैंने लागू किया है या नहीं? धन्यवाद। –

+0

मेरे अनुभव में एक nullpointerexception को पकड़ने का प्रयास करें –

+0

@ cricket_007 क्या मुझे इसे संपादन में हटाया जाना चाहिए या टैग की सिफारिश नहीं की जानी चाहिए? यह स्टैक ओवरफ़्लो पर कैसे किया जाता है? –

संबंधित मुद्दे