2011-09-29 13 views
6

स्कूल के लिए मैं एक एंड्रॉइड ऐप बना रहा हूं। इस ऐप के लिए मेरे पास एक टुकड़ा है, जो डेटाबेस से सिर्फ तारों के साथ ग्रिडव्यू दिखाता है। इसके लिए मुझे एक टुकड़ा चाहिए। जब मैं getActivity() को कॉल करता हूं, तो यह शून्य हो जाता है। ऑनएट विधि, जैसा कि सुझाव दिया गया है here ऐप क्रैश होने से पहले कॉल नहीं किया जाता है। मुझे इसे कैसे हल करना चाहिए?
weekFragmetn.xml:प्राप्त करें निष्क्रियता खंड से शून्य वापस लौटना

package nl.siebeh.schoolmate; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.ContextMenu; 
import android.view.ContextMenu.ContextMenuInfo; 
import android.view.LayoutInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.GridView; 

public class weekFragment extends Fragment { 
    dbLayer db; 
    Context mContext; 

    @Override 
    public void onAttach(Activity activity) { 
     mContext = getActivity(); 
     Log.i("Schoolmate","onAttach called"); 
     super.onAttach(activity); 
    } 

    public weekFragment newInstance(String title) { 
     Log.i("Schoolmate","newInstance called"); 
     db = new dbLayer(mContext); 
     weekFragment fragment = new weekFragment(); 
     ArrayList<ArrayList<Object>> result = null; 

     if(title == "leraren"){ 
      result = db.getAllRowsAsArrays("weekTeacher", null); 
     }else if(title == "locatie"){ 
      result = db.getAllRowsAsArrays("weekLocation", null); 
     }else if(title == "vakken"){ 
      result = db.getAllRowsAsArrays("weekSubjects", null); 
     } 

     String[] array = new String[60]; 

     for(int i = 0; i < 60; i++){ 
      array[i] = ""; 
     } 

     array[1] = getResources().getStringArray(R.array.days)[0]; 
     array[2] = getResources().getStringArray(R.array.days)[1]; 
     array[3] = getResources().getStringArray(R.array.days)[2]; 
     array[4] = getResources().getStringArray(R.array.days)[3]; 
     array[5] = getResources().getStringArray(R.array.days)[4]; 

     for(int i = 1; i < 10; i++){ 
      array[i] = Integer.toString(i); 
     } 

     for(int position = 0; position < result.size(); position++){ 
      ArrayList<Object> row = result.get(position); 
      int hour = Integer.valueOf(row.get(1).toString()).intValue(); 
      int day = Integer.valueOf(row.get(0).toString()).intValue(); 
      int pos = 6 * hour + day; 
      array[pos] = row.get(position).toString(); 
     } 
     fragment.mContent = array; 

     return fragment; 
    } 

    private String[] mContent = {""}; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     if (container == null) { 
      return null; 
     } 
     View v = inflater.inflate(R.layout.week_fragment, container, false); 
     GridView gridview = (GridView) v.findViewById(R.id.gridview); 
     gridview.setAdapter(new weekAdapter(mContext, mContent)); 
     return gridview; 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     return super.onContextItemSelected(item); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
    } 



} 

logcat: (आइटम पर क्लिक करें के बाद से एक सूची में आइटम है कि गतिविधि, जहां टुकड़ा शुरू कर दिया है/एम्बेडेड शुरू होता है)

09-29 19:10:56.611: INFO/ActivityManager(70): Starting: Intent { cmp=nl.siebeh.schoolmate/.overviewWeek } from pid 536 
09-29 19:10:56.970: INFO/Schoolmate(536): newInstance called 
09-29 19:11:06.631: WARN/ActivityManager(70): Launch timeout has expired, giving up wake lock! 
09-29 19:11:06.671: WARN/ActivityManager(70): Activity idle timeout for HistoryRecord{40770188 nl.siebeh.schoolmate/.overviewWeek} 
09-29 19:12:20.661: DEBUG/SntpClient(70): request time failed: java.net.SocketException: Address family not supported by protocol 
09-29 19:14:11.811: DEBUG/dalvikvm(536): Debugger has detached; object registry had 413 entries 
09-29 19:14:11.811: ERROR/SchoolMate(536): java.lang.NullPointerException 
09-29 19:14:11.811: INFO/SchoolMate(536): Context is null 
09-29 19:14:11.820: WARN/System.err(536): java.lang.NullPointerException 
09-29 19:14:11.820: WARN/System.err(536):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118) 
09-29 19:14:11.820: WARN/System.err(536):  at nl.siebeh.schoolmate.dbLayer.<init>(dbLayer.java:50) 
09-29 19:14:11.820: WARN/System.err(536):  at nl.siebeh.schoolmate.weekFragment.newInstance(weekFragment.java:31) 
09-29 19:14:11.820: WARN/System.err(536):  at nl.siebeh.schoolmate.fragmentAdapter.getItem(fragmentAdaptar.java:21) 
09-29 19:14:11.820: WARN/System.err(536):  at nl.siebeh.schoolmate.titleFragmentAdapter.getItem(titleFragmentAdapter.java:1) 
09-29 19:14:11.820: WARN/System.err(536):  at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:62) 
09-29 19:14:11.820: WARN/System.err(536):  at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:321) 
09-29 19:14:11.820: WARN/System.err(536):  at android.support.v4.view.ViewPager.populate(ViewPager.java:441) 
09-29 19:14:11.820: WARN/System.err(536):  at android.support.v4.view.ViewPager.onAttachedToWindow(ViewPager.java:563) 
09-29 19:14:11.820: WARN/System.err(536):  at android.view.View.dispatchAttachedToWindow(View.java:6156) 
09-29 19:14:11.820: WARN/System.err(536):  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1122) 
09-29 19:14:11.820: WARN/System.err(536):  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1127) 
09-29 19:14:11.820: WARN/System.err(536):  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1127) 
09-29 19:14:11.820: WARN/System.err(536):  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1127) 
09-29 19:14:11.820: WARN/System.err(536):  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1127) 
09-29 19:14:11.820: WARN/System.err(536):  at android.view.ViewRoot.performTraversals(ViewRoot.java:765) 
09-29 19:14:11.830: WARN/System.err(536):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
09-29 19:14:11.840: WARN/System.err(536):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-29 19:14:11.840: WARN/System.err(536):  at android.os.Looper.loop(Looper.java:123) 
09-29 19:14:11.840: WARN/System.err(536):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-29 19:14:11.840: WARN/System.err(536):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-29 19:14:11.840: WARN/System.err(536):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-29 19:14:11.850: WARN/System.err(536):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-29 19:14:11.850: WARN/System.err(536):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-29 19:14:11.850: WARN/System.err(536):  at dalvik.system.NativeStart.main(Native Method) 
09-29 19:14:11.850: DEBUG/AndroidRuntime(536): Shutting down VM 
09-29 19:14:11.850: WARN/dalvikvm(536): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536): FATAL EXCEPTION: main 
09-29 19:14:11.870: ERROR/AndroidRuntime(536): java.lang.NullPointerException 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at nl.siebeh.schoolmate.weekFragment.newInstance(weekFragment.java:49) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at nl.siebeh.schoolmate.fragmentAdapter.getItem(fragmentAdaptar.java:21) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at nl.siebeh.schoolmate.titleFragmentAdapter.getItem(titleFragmentAdapter.java:1) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:62) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:321) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.support.v4.view.ViewPager.populate(ViewPager.java:441) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.support.v4.view.ViewPager.onAttachedToWindow(ViewPager.java:563) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.view.View.dispatchAttachedToWindow(View.java:6156) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1122) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1127) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1127) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1127) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1127) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.view.ViewRoot.performTraversals(ViewRoot.java:765) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.os.Looper.loop(Looper.java:123) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-29 19:14:11.870: ERROR/AndroidRuntime(536):  at dalvik.system.NativeStart.main(Native Method) 
09-29 19:14:11.890: WARN/ActivityManager(70): Force finishing activity nl.siebeh.schoolmate/.overviewWeek 
09-29 19:14:12.413: WARN/ActivityManager(70): Activity pause timeout for HistoryRecord{40770188 nl.siebeh.schoolmate/.overviewWeek} 
09-29 19:14:21.910: WARN/ActivityManager(70): Launch timeout has expired, giving up wake lock! 
09-29 19:14:22.441: WARN/ActivityManager(70): Activity idle timeout for HistoryRecord{4070c7a0 nl.siebeh.schoolmate/.schoolmate} 
09-29 19:14:32.451: WARN/ActivityManager(70): Activity destroy timeout for HistoryRecord{40770188 nl.siebeh.schoolmate/.overviewWeek} 

उत्तर

8

आप नहीं करते मेंgetActivity() कॉल है, जो इस प्रश्न का उत्तर देना मुश्किल बनाता है।

आपको NullPointerException मिल रहा है क्योंकि mContextnull है। मेरा अनुमान है कि mContextnull है, क्योंकि कोड में fragmentAdapter पर, आप new weekFragment() पर कॉल कर रहे हैं, फिर newInstance() पर कॉल कर रहे हैं। आपने अनुमान लगाया है कि आप Fragment जावाडॉक्स में उल्लिखित कुछ पैटर्न का पालन कर रहे थे, लेकिन वहां, newInstance()static विधि है, उदाहरण के लिए आपके पास यह उदाहरण विधि नहीं है।

newInstance() से बाहर के सभी कोड ले जाएं और इसे onActivityCreated() पर ले जाएं या कुछ समय जब विभाजन गतिविधि से जुड़ा हुआ है तो getActivity() काम करता है। वैसे भी, अपने onAttach() कार्यान्वयन और mContext डेटा सदस्य को हटाएं, जिनमें से कोई भी आवश्यक नहीं है (और mContext बहुत डरावनी तरीके से आबादी है)।

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। एटैच में mContext को एक्टिविटी() प्राप्त करने के लिए सेट किया जाना चाहिए, अब यह एक और साइट पर जो कुछ मिला है वह है। मैं इसे तुरंत कोशिश करूँगा। – Siebe

+0

@Swilzard: "ऑनचैच को mContext को निष्क्रियता() प्राप्त करने के लिए सेट किया जाना चाहिए" - नहीं, आपको 'गतिविधि' की आवश्यकता होने पर बस 'getActivity()' पर कॉल करें। – CommonsWare

+0

@ कॉमन्सवेयर: मेरे मामले में मैं बटन के क्लिक पर खंड शुरू कर रहा हूं .. तो यहां यह पहले से ही बनाई गई गतिविधि माना जाता है। लेकिन अब यहां अगर कॉल प्राप्त करें()। खंड() को टुकड़े से खत्म करें .. यह कुल पॉइंटर दे रहा है ... कोई सुझाव। – CoDe

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