2014-07-11 33 views
7

में स्ट्रिंग-सरणी के साथ NullPointerException एंड्रॉइड पर पहला ऐप और वास्तव में नया (लगभग एक साल पहले खेला गया लेकिन कुछ भी नहीं आया), प्रोग्रामिंग में सभ्य। यह सुनिश्चित करना चाहते हैं कि ऐप एक फोन पर प्रस्तुत करता है, कोई कार्यक्षमता एटीएम नहीं। ठीक है, कोई समस्या नहीं है। इसे अपने फोन पर दबाएं और "दुर्भाग्य से, स्प्लिटर बंद हो गया है"।स्पिनर

संपादित करें - MainActivity.java को जोड़ा गया, संपादन से पहले और बाद (वास्तविक कोड में नहीं), लेकिन * है अब यह झंडे

adapter.setDropDownViewResource(android.R.layout.activity_main); 
// Apply the adapter to the spinner 
spinnerSplit.setAdapter(adapter); 

कह त्रुटि: (18, 36) पहचानकर्ता उम्मीद

setDropDownViewResource, activity_main और setAdapter सभी लाल

एंड्रॉयड स्टूडियो
मोटो जी में - CM11 4.4.4

यहां कोड है, अगर मुझे कुछ याद आ गया तो मुझे बताएं।

MainActivity.java

package com.hydr0dr4gon.splitrv2; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
*import android.widget.ArrayAdapter; 
import android.widget.Spinner;* 


public class MainActivity extends Activity { 

    *Spinner spinnerSplit = (Spinner) findViewById(R.id.spinner); 
// Create an ArrayAdapter using the string array and a default spinner layout 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
     R.array.arraySplitr, android.R.layout.simple_spinner_item); 
// Specify the layout to use when the list of choices appears 
adapter.setDropDownViewResource(android.R.layout.activity_main); 
// Apply the adapter to the spinner 
spinnerSplit.setAdapter(adapter);* 

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


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 

SplitrDialogFragment.java

package com.hydr0dr4gon.splitrv2; 

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.content.DialogInterface; 
import android.os.Bundle; 

public class SplitrDialogFragment extends DialogFragment { 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the Builder class for convenient dialog construction 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    builder.setMessage(R.string.dialog_split_pay) 
      .setNegativeButton(R.string.OK, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // User cancelled the dialog 
       } 
      }); 

    // Create the AlertDialog object and return it 
    return builder.create(); 
} 
} 

strings.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="app_name">Splitr</string> 
    <string name="hello_world">Hello world!</string> 
    <string name="action_settings">Settings</string> 
    <string name="btnSplit">Split</string> 
    <string name="btnTip">+ Tip</string> 
    <string name="txtSplit">Split By</string> 
    <string name="txtHint">Enter Bill Total</string> 
    <string name="spinnerSplit">No. of People</string> 
    <string name="dialog_split_pay">Each Person Pays</string> 
    <string name="OK">OK</string> 

<array name="arraySplitr"> 
    <item>2</item> 
    <item>3</item> 
    <item>4</item> 
    <item>5</item> 
    <item>6</item> 
    <item>7</item> 
    <item>8</item> 
    <item>9</item> 
    <item>10</item> 
</array> 

actvity_main.xml

RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context="com.hydr0dr4gon.splitr.MainActivity"> 

<TableLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true" 
    android:paddingLeft="40dp" 
    android:paddingTop="80dp" 
    android:paddingRight="40dp" 
    android:paddingBottom="80dp"> 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_span="2" 
      android:inputType="number" 
      android:ems="10" 
      android:id="@+id/editText" 
      android:layout_column="0" 
      android:layout_weight="1.5" 
      android:hint="@string/txtHint" /> 

    </TableRow> 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <TextView 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:text="@string/txtSplit" 
      android:id="@+id/txtSplit" 
      android:layout_weight="1" 
      android:textSize="32dp" 
      android:textAlignment="center" 
      android:gravity="center" /> 

     <Spinner 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:id="@+id/spinner" 
      android:layout_weight="1" 
      android:spinnerStyle="@android:style/Widget.Spinner.DropDown" 
      android:textAlignment="center" 
      android:entries="@array/arraySplitr" 
      android:prompt="@string/spinnerSplit"/> 

    </TableRow> 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:text="@string/btnTip" 
      android:id="@+id/btnTip" 
      android:layout_weight="1" /> 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:text="@string/btnSplit" 
      android:id="@+id/btnSplit" 
      android:layout_weight="1" /> 
    </TableRow> 

</TableLayout> 

logcat

> 07-11 21:18:50.899 10290-10290/com.hydr0dr4gon.splitrv2 D/ActivityThread﹕ handleBindApplication:com.hydr0dr4gon.splitrv2 
07-11 21:18:50.899 10290-10290/com.hydr0dr4gon.splitrv2 D/ActivityThread﹕ setTargetHeapUtilization:0.75 
07-11 21:18:50.899 10290-10290/com.hydr0dr4gon.splitrv2 D/ActivityThread﹕ setTargetHeapMinFree:2097152 
07-11 21:18:51.198 10290-10290/com.hydr0dr4gon.splitrv2 D/AndroidRuntime﹕ Shutting down VM 
07-11 21:18:51.206 10290-10290/com.hydr0dr4gon.splitrv2 E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.hydr0dr4gon.splitrv2, PID: 10290 
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 
      at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) 
      at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
      at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193) 
      at android.widget.Spinner.onMeasure(Spinner.java:482) 
      at android.view.View.measure(View.java:16521) 
      at android.widget.TableRow.getColumnsWidths(TableRow.java:312) 
      at android.widget.TableLayout.findLargestCells(TableLayout.java:508) 
      at android.widget.TableLayout.measureVertical(TableLayout.java:473) 
      at android.widget.TableLayout.onMeasure(TableLayout.java:439) 
      at android.view.View.measure(View.java:16521) 
      at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719) 
      at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455) 
      at android.view.View.measure(View.java:16521) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
      at android.view.View.measure(View.java:16521) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
      at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327) 
      at android.view.View.measure(View.java:16521) 
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2552) 
      at android.view.View.measure(View.java:16521) 
      at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912) 
      at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109) 
      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291) 
      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996) 
      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600) 
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
      at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
      at android.view.Choreographer.doFrame(Choreographer.java:544) 
      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5137) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611) 

धन्यवाद।

+1

त्रुटि com4ydr0dr4gon.splitrv2 में लाइन 394 पर है। क्या आपने पूरी फाइल पोस्ट की है? – SeahawksRdaBest

+1

विशेष रूप से आपके ऐरेएडाप्टर परिभाषा में। – SeahawksRdaBest

+0

क्या आपने पहले ही जांच की है कि गतिविधि के एक्सएमएल में आपके तार आपके 'स्ट्रिंग्स.एक्सएमएल' की सामग्री से मेल खाते हैं? –

उत्तर

21
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference 
    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) 
    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
    at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193) 
    at android.widget.Spinner.onMeasure(Spinner.java:482) 

यह आपको बताता है कि त्रुटि Spinner को माप रही थी। वास्तव में, तारों में से एक जो इसे अंदर प्रदर्शित किया जाना चाहिए शून्य है।

सबसे संभावित कारण @array/arraySplitr संसाधन के साथ एक समस्या है। क्या यह वैध string-array संसाधन as defined in the documentation है?

यह:

<array name="arraySplitr"> 
    <item>2</item> 
    ... 

बजाय होना चाहिए:

<string-array name="arraySplitr"> 
    <item>2</item> 
    ... 

array तत्व Typed Arrays के लिए है। स्ट्रिंग सरणी का उपयोग string-array का उपयोग करना चाहिए।

+0

हाँ यह सब अच्छा है – wakoquacko

+0

@ वाकोक्वाको कृपया अपनी पोस्ट में उस संसाधन का एक्सएमएल शामिल करें। मुझे बहुत आश्वस्त है कि त्रुटि उससे संबंधित है। :) – matiash

+0

अनुरोध के रूप में शामिल - स्ट्रिंग्स.एक्सएमएल – wakoquacko

0

आपके लॉगकैट में एक NullPointerException है।

E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.hydr0dr4gon.splitrv2, PID: 10290 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)

कुछ आरंभ नहीं किया है। आपके कोड से मैं नहीं देख सकता कि यह क्या होगा। क्या आपके पास ArrayAdapter है और यदि ऐसा है तो आप इसे प्रारंभ करते हैं और इसमें मौजूद सभी ऑब्जेक्ट्स हैं? या आपकी टेबल सिर्फ आपकी लेआउट फ़ाइल से भरा है? मैं यह देखना शुरू कर दूंगा कि आपकी तालिका कैसे भरती है (लॉगकैट के आधार पर) लेकिन मैं विशेष रूप से नहीं देख सकता कि आपके द्वारा पोस्ट किए गए कोड से समस्या क्या होगी।

+0

में मेल खाता है अगर मैं उनमें से एक था तो हाँ मदद कर सकता है। – wakoquacko

+0

यह 'आभासी विधि' वर्णन है जो मुझे आश्चर्यचकित करता है कि यह अपराधी है या नहीं। शुक्र है कि एंड्रॉइड बहुत अच्छी तरह से प्रलेखित है जो नए हिस्सों को सीखने में मदद करता है। ArrayAdapters के लिए प्रलेखन यहां दिया गया है। http://developer.android.com/reference/android/widget/ArrayAdapter.html – jdkorv11

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