2014-07-01 49 views
0

我正在開發一個Madlib應用程序。您在下面看到的代碼是處理從madlibinput1.xml中的edittext框中收集輸入的類,將該信息存儲爲字符串,然後將該文本發送到madliboutput.xml,在那裏它將輸入中收集的輸入替換爲所有「wx」 XML。這個類曾經是一個活動,但是我發現將它作爲一個片段可以更好地實現我的導航抽屜。不過,我幾乎是一個初學者(通常是編程語言),並且覺得我沒有將代碼轉換爲與片段一起工作的很好。將活動轉換爲片段?獲取空指針異常

有人可以幫我弄清楚爲什麼當我點擊轉換按鈕時,在gather()方法(也許是其他地方的空指針)中有空指針異常。也許我做錯了一些關於我的xml的信息或者與我的視圖有關的信息。非常感謝你的支持。

package com.shamu11.madlibsportable; 

import java.io.IOException; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AutoCompleteTextView; 
import android.widget.Button; 
import android.widget.TextView; 
import android.app.Activity; 
import android.content.Context; 
import android.content.res.Resources; 

public class Madlibs extends Fragment { 
int inLayout; // will hold the id number for layout file 
       // main_class_activity_in.xml. 
int outLayout; // will hold the id number for layout file 
       // main_class_activity_out.xml. 
int outviewid; // will hold the id number for the textview found in 
       // main_class_activity_out.xml 
//Activity activity = this; 
String test; 
AutoCompleteTextView autoview; 
StringBuffer stringbuffer = new StringBuffer(); 
String[] stringviews = new String[16]; 

Button convert; 

View view; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    //super.onCreate(savedInstanceState); 

    view = inflater.inflate(R.layout.madlibinput1, container, false); 

    //setContentView(R.layout.madlibinput1); 
    outLayout = (R.layout.madliboutput1); 
    inLayout = (R.layout.madlibinput1); 
    outviewid = (R.id.outview14); 

    convert = (Button) view.findViewById(R.id.convert); 
    convert.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      gather(); 
      postIt(); 
     } 
    }); 

    return view; 

} 

public void gather() { 

    ViewGroup layout = (ViewGroup) getView().findViewById(R.id.anskey_clover); 
    View[] views = new View[layout.getChildCount()]; 
    int[] ids = new int[layout.getChildCount()]; 

    for (int i = 0; i < layout.getChildCount(); i++) { 
     ids[i] = layout.getChildAt(i).getId(); 
    } 

    for (int i = 0; i < layout.getChildCount(); i++) { 
     AutoCompleteTextView au = (AutoCompleteTextView) getActivity().findViewById(ids[i]); 
     stringbuffer.append(au.getText().toString() + "\n"); 

    } 

    //setContentView(outLayout); 
    TextView outview = (TextView) getView().findViewById(outviewid); 
    outview.setText(stringbuffer.toString()); 

} 

public void postIt() { 
    String str = "let's go to the park"; 
    String str2; 
    String newstr = null; 

    //setContentView(outLayout); 
    TextView outview = (TextView) view.findViewById(outviewid); 
    str = (String) outview.getText(); 
    stringviews = stringbuffer.toString().split("\n"); // turns the 
                 // stringbuffer from 
                 // getAllXml() into 
                 // an array and 
                 // assigns to 
                 // stringviews. 

    for (int i = 0; i < stringviews.length; i++) { 
     str2 = stringviews[i]; 
     newstr = str.replaceFirst("wx", str2); // replaces all the "wx"s in 
               // the 
               // main_class_activity_out 
               // textview with values from 
               // strinvgviews. 
     str = newstr; 
    } 
    outview.setText(newstr); 
    stringbuffer.delete(0, stringbuffer.length()); 

    Fragment newFragment = new MadlibsOutput(); 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

    transaction.replace(R.id.fragment1, newFragment); 
    transaction.addToBackStack(null); 

    transaction.commit(); 

} 

} 

madlibinput1.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="#ffffff" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.39" 
    android:background="#ffffff" > 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="184dp" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:background="#ffffff" > 

     <TextView 
      android:id="@+id/outview1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="8dp" 
      android:text="1.) Adjective to Describe:" /> 

     <TextView 
      android:id="@+id/lvheader_song" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="8dp" 
      android:text="2.) ing-verb (i.e. running):" /> 

     <TextView 
      android:id="@+id/textView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="8dp" 
      android:text="3.) Negative Adjective:" /> 

     <TextView 
      android:id="@+id/textView4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="8dp" 
      android:text="4.) Negative Verb:" /> 

     <TextView 
      android:id="@+id/textView5" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="8dp" 
      android:text="5.) Adjective" /> 

     <TextView 
      android:id="@+id/textView6" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="8dp" 
      android:text="6.) Plural Noun:" /> 

     <TextView 
      android:id="@+id/textView7" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="8dp" 
      android:text="7.) Verb (ending in &apos;-ed&apos;):" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/anskey_clover" 
     android:layout_width="match_parent" 
     android:layout_height="234dp" 
     android:orientation="vertical" > 

     <AutoCompleteTextView 
      android:id="@+id/auview1" 
      android:layout_width="141dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.40" 
      android:ems="10" 
      android:text="la dee dah" /> 

     <AutoCompleteTextView 
      android:id="@+id/auview2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:ems="10" /> 

     <AutoCompleteTextView 
      android:id="@+id/auview3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:ems="10" /> 

     <AutoCompleteTextView 
      android:id="@+id/auview4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:ems="10" /> 

     <AutoCompleteTextView 
      android:id="@+id/auview5" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:ems="10" /> 

     <AutoCompleteTextView 
      android:id="@+id/auview6" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:ems="10" /> 

     <AutoCompleteTextView 
      android:id="@+id/auview7" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:ems="10" /> 

    </LinearLayout> 
</LinearLayout> 

<Button 
    android:id="@+id/convert" 
    android:layout_width="222dp" 
    android:layout_height="93dp" 
    android:layout_weight="0.25" 
    android:text="Get My Mad Lib" /> 

</LinearLayout> 

madliboutput1.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/outview14" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="20dp" 
    android:gravity="left" 
    android:text="madlib text.........etc" /> 

</LinearLayout> 

LOG CAT:

06-30 23:00:11.530: E/AndroidRuntime(5567): FATAL EXCEPTION: main 
06-30 23:00:11.530: E/AndroidRuntime(5567): Process: com.shamu11.madlibsportable, PID: 5567 
06-30 23:00:11.530: E/AndroidRuntime(5567): java.lang.NullPointerException 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at com.shamu11.madlibsportable.Madlibs.gather(Madlibs.java:78) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at com.shamu11.madlibsportable.Madlibs$1.onClick(Madlibs.java:51) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at android.view.View.performClick(View.java:4438) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at android.view.View$PerformClick.run(View.java:18422) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at android.os.Handler.handleCallback(Handler.java:733) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at android.os.Handler.dispatchMessage(Handler.java:95) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at android.os.Looper.loop(Looper.java:136) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at android.app.ActivityThread.main(ActivityThread.java:5001) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at java.lang.reflect.Method.invoke(Method.java:515) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
06-30 23:00:11.530: E/AndroidRuntime(5567):  at dalvik.system.NativeStart.main(Native Method) 
+0

你在'outview.setText(stringbuffer.toString())上得到NPE'''我認爲'outView'爲null –

+0

@shayanpourvatan有什麼建議嗎? – sanic

+0

我認爲問題是'getView()。findViewById(outviewid);' –

回答

0

你試圖找到鑑於活動沒有片段,由此行:

AutoCompleteTextView au = (AutoCompleteTextView) getActivity().findViewById(ids[i]);