2015-01-12 8 views
20

यही वह है जो मैं कई घंटों के लिए करने की कोशिश कर रहा हूं: मुझे मुख्य एक्टिविटी.जावा फ़ाइल (नीचे सूचीबद्ध) और एक fragment_start.xml फ़ाइल है प्रारंभ करें बटन। स्टार्ट-बटन को टैप करने से word_main.xml फ़ाइल को पॉइंट-/राउंड- और उलटी गिनती-टेक्स्टव्यू के साथ प्रदर्शित करना चाहिए। यह काम नहीं करता है और यह है कि क्या हो रहा है: पीआईडी:: 1240 java.lang.NullPointerException: आभासी विधि आह्वान करने के लिए प्रयास 'शून्य android.widget.TextView.setText (java.lang- java.lang.NullPointerException - null ऑब्जेक्ट संदर्भ पर सेटटेक्स्ट

logcat मुझसे कहता है .harSequence) 'एक शून्य ऑब्जेक्ट संदर्भ

एमुलेटर प्रदर्शित करता है: दुर्भाग्यवश, गेम बंद हो गया है।

यह उल्लेख करने के लिए आवश्यक है कि मैं प्रोग्रामिंग में नया हूं?

किसी भी सलाह के लिए धन्यवाद!

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


public class MainActivity extends Activity implements View.OnClickListener { 

private int points; 
private int round; 
private int countdown; 

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

private void newGame() { 
    points=0; 
    round=1; 
    initRound(); 
} 

private void initRound() { 
    countdown = 10; 
    update(); 
} 

private void update() { 
    fillTextView(R.id.points, Integer.toString(points)); 
    fillTextView(R.id.round, Integer.toString(round)); 
    fillTextView(R.id.countdown, Integer.toString(countdown * 1000)); 
} 

private void fillTextView (int id, String text) { 
    TextView tv = (TextView) findViewById(id); 
    tv.setText(text); 
} 

private void showStartFragment() { 
    ViewGroup container = (ViewGroup) findViewById(R.id.container); 
    container.removeAllViews(); 
    container.addView(
      getLayoutInflater().inflate(R.layout.fragment_start, null)); 
    container.findViewById(R.id.start).setOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 
    if(view.getId() == R.id.start) { 
     startGame(); 
    } 
} 

public void startGame() { 
    newGame(); 
} 
} 
+5

पोस्ट करना पूरे अपवाद संदेश/logcat में मदद मिलेगी। – arleitiss

+0

कृपया अपनी एक्सएमएल फाइलें पोस्ट करें। – Rohit5k2

+0

मेरा जवाब देखें। स्पष्टीकरण स्पष्ट नहीं हो सकता है, लेकिन आपको खुद को ट्रैक करना होगा कि आप एक पैरामीटर के रूप में गलत आईडी क्यों देते हैं (क्योंकि यदि इस आईडी के साथ कोई दृश्य मौजूद है, तो विधि शून्य नहीं लौटाएगी) – ProgrammingIsAwsome

उत्तर

15

यहाँ आपकी समस्या निहित है:

private void fillTextView (int id, String text) { 
    TextView tv = (TextView) findViewById(id); 
    tv.setText(text); // tv is null 
} 

-> (TextView) findViewById (आईडी); // रिटर्न शून्य लेकिन आपके कोड से, मुझे नहीं पता कि यह विधि शून्य क्यों लौटती है। ट्रैक करने का प्रयास करें, पैरामीटर के रूप में आप कौन सी आईडी देते हैं और यदि निर्दिष्ट आईडी के साथ यह दृश्य मौजूद है।

त्रुटि संदेश बहुत स्पष्ट है और आपको यह भी बताता है कि आपको किस विधि पर बताया गया है। प्रलेखन से:

public final View findViewById (int id) 
    Look for a child view with the given id. If this view has the given id, return this view. 
    Parameters 
     id The id to search for. 
    Returns 
     The view that has the given id in the hierarchy or null 

http://developer.android.com/reference/android/view/View.html#findViewById%28int%29

दूसरे शब्दों में: आप आईडी आप एक पैरामीटर के रूप देने के साथ कोई दृश्य है।

19

समस्या tv.setText (टेक्स्ट) है। परिवर्तनीय टीवी शायद शून्य है और आप उस नल पर सेटटेक्स्ट विधि को कॉल करते हैं, जिसे आप नहीं कर सकते। मेरा अनुमान है कि समस्या findViewById विधि पर है, लेकिन यह यहां नहीं है, इसलिए मैं कोड के बिना और अधिक नहीं बता सकता।

+0

हां यह समस्या है। त्रुटि संदेश यहां बहुत स्पष्ट है। – ProgrammingIsAwsome

+0

आप यह जांचने का प्रयास कर सकते हैं कि आपने एक ही आईडी के साथ दो या दो से अधिक टेक्स्टव्यू घोषित किए हैं या नहीं – cammando

3
private void fillTextView (int id, String text) { 
    TextView tv = (TextView) findViewById(id); 
    tv.setText(text); 
} 

यदि यह वह जगह है जहाँ आप नल पॉइंटर एक्सेप्शन हो रही है, वहाँ कोई दृश्य आईडी है कि आप findViewById() में पारित करने के लिए मिल गया था, और वास्तविक अपवाद फेंक दिया जाता है जब आप null पर एक समारोह setText() कॉल करने के लिए कोशिश । आपको R.layout.activity_main के लिए अपना एक्सएमएल पोस्ट करना चाहिए, क्योंकि यह कहना मुश्किल है कि आपके कोड को देखकर चीज़ें कहां गलत हुईं।

अशक्त संकेत के बारे में अधिक पढ़ने: What is a NullPointerException, and how do I fix it?

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