2011-09-29 35 views
6

Đối với trường tôi đang tạo một ứng dụng Android. Đối với ứng dụng này tôi có một đoạn, trong đó cho thấy một GridView chỉ với chuỗi, từ một cơ sở dữ liệu. Đối với điều này tôi cần một mảnh. Khi tôi gọi getActivity(), nó trả về null. Phương thức onAttach, như đề xuất here không được gọi trước khi ứng dụng gặp sự cố. Làm thế nào tôi nên giải quyết điều này?
weekFragmetn.xml:getActivity trả về null từ đoạn

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: (kể từ khi nhấp chuột vào mục các mục trong danh sách bắt đầu hoạt động, nơi các mảnh vỡ được bắt đầu/nhúng)

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} 

Trả lời

8

Bạn không cuộc gọi getActivity(), điều này gây khó khăn cho việc trả lời câu hỏi.

Bạn đang nhận được NullPointerExceptionmContextnull. Tôi đoán là mContextnull bởi vì, trong mã là fragmentAdapter, bạn đang gọi số new weekFragment(), sau đó gọi số newInstance() trên đó. Có thể bạn nghĩ rằng bạn đang theo dõi một số mẫu được nêu trong JavaDocs Fragment, nhưng trong đó, newInstance() là phương pháp static, không phải là phương pháp thể hiện khi bạn có nó ở đây.

Chỉ lấy tất cả mã ra khỏi newInstance() và di chuyển nó đến onActivityCreated() hoặc một thời gian khi đoạn được gắn với hoạt động để getActivity() hoạt động. Trên đường đi, xóa triển khai onAttach() và thành viên dữ liệu mContext của bạn, không cần thiết (và mContext được điền theo cách rất đáng sợ).

+0

Cảm ơn bạn đã phản hồi nhanh. Trong onAttach nên mContext được đặt thành getActivity(), Bây giờ nó là cái gì tôi tìm thấy trên một trang khác. Tôi sẽ thử ngay lập tức. – Siebe

+0

@Swilzard: "Trong onAttach nên mContext được đặt thành getActivity()" - không, chỉ cần gọi 'getActivity()' khi bạn cần 'Hoạt động'. – CommonsWare

+0

@CommonsWare: trong trường hợp của tôi, tôi đang khởi chạy phân đoạn khi nhấp vào nút..vì vậy, đây là hoạt động giả định đã được tạo. nhưng bây giờ ở đây nếu gọi getActivity(). finish() từ fragment .. nó cho NULL POINTER ... bất kỳ gợi ý nào.? – CoDe

Các vấn đề liên quan