2012-02-03 6 views
1

안녕하세요. Natali (Cont from this thread)의 도움을 받아 첫 번째 단편 활동 및 thnx를 만들려고합니다. 나는 조각난으로 잘 작동하는 수업을 변환했고 나는이 점에 이르렀지만 지금은 해결할 수없는 악명 높은 NPE를 가지고있다.NPE로 단편 활동

그것은 내 목록 조각 클래스에서와 유사하지만 그림을 그려 낼 수는 없습니다. 나는 그것의 쉬운 수정을 확신합니다. (?) 그리고 나는 또한 약간의 변수를 하드 코드로 대체하여 실행하기가 좀 더 쉬워졌습니다.

다음은 LogCat 및 활동 사본입니다. thnx 사전에 도움을!

편집 :올바른 로그 파일 : 로그 캣 :

 02-03 10:21:14.410: E/AndroidRuntime(29792): FATAL EXCEPTION: main 
02-03 10:21:14.410: E/AndroidRuntime(29792): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.andaero.test/com.andaero.test.fragments.MainActivity}: java.lang.NullPointerException 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1815) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.ActivityThread.access$500(ActivityThread.java:122) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.os.Looper.loop(Looper.java:132) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.ActivityThread.main(ActivityThread.java:4123) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at java.lang.reflect.Method.invokeNative(Native Method) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at java.lang.reflect.Method.invoke(Method.java:491) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at dalvik.system.NativeStart.main(Native Method) 
02-03 10:21:14.410: E/AndroidRuntime(29792): Caused by: java.lang.NullPointerException 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:99) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:94) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1539) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1508) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at com.andaero.test.fragments.ListFragment.loadQuery(ListFragment.java:72) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at com.andaero.test.fragments.ListFragment.onActivityCreated(ListFragment.java:60) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:795) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:960) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1674) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.Activity.performCreate(Activity.java:4400) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
02-03 10:21:14.410: E/AndroidRuntime(29792): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1779) 
02-03 10:21:14.410: E/AndroidRuntime(29792): ... 11 more 

MainActivity 클래스 :

public class MainActivity extends Activity { 

     /** Called when the activity is first created. */ 

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

The ListFragment Class: 
public class ListFragment extends android.app.ListFragment { 

    boolean mDualPane; 
    int mCurCheckPosition = 0; 
    protected TextView activityTitle; 

    boolean mExternalStorageAvailable = false; 
    boolean mExternalStorageWriteable = false; 

    String extStorageDirectory = Environment.getExternalStorageDirectory() 
      .toString(); 
    File dbfile = new File(extStorageDirectory + "/myApp/dB/myApp.db"); 
    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); 

    private static final String QUERY_KEY = "SELECT * FROM Regulatory_List"; 
    private static final String QUERY_ORDER = "ASC"; 

    private View layout; 

    @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      layout = inflater.inflate(R.layout.listview, null); 
      return layout; 

     } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     Bundle extras = getActivity().getIntent().getExtras(); 

     String q = null; 
     if (extras != null) { 
      q = extras.getString(QUERY_KEY); 
     } 
     loadQuery(q); 

    } 

    public void loadQuery(String q) { 

     if (Environment.getExternalStorageState().equals(
       Environment.MEDIA_MOUNTED)) { 

      String qO = getActivity().getIntent().getStringExtra("QUERY_ORDER"); 

      Cursor c = db.rawQuery(q + " ORDER BY `_id` " + qO, null); 
      setListAdapter(new QueryAdapter(getActivity(), c)); 
      db.close(); 

     } else { 
      Alerts.sdCardMissing(getActivity()); 
     } 
    } 

    public class QueryAdapter extends CursorAdapter { 

     public QueryAdapter(Context context, Cursor c) { 
      super(context, c); 
      LayoutInflater.from(context); 
     } 

     @Override 
     public void bindView(View v, Context context, final Cursor c) { 

      int tvLabel = c.getColumnIndexOrThrow("label"); 
      String label = c.getString(tvLabel); 
      final TextView labelTxt = (TextView) v.findViewById(R.id.label); 

      if (labelTxt != null) { 
       labelTxt.setText("(" + label + ")"); 
      } 

      int tvTitle = c.getColumnIndexOrThrow("title"); 
      final String title = c.getString(tvTitle); 
      TextView titleTxt = (TextView) v.findViewById(R.id.listTitle); 

      if (titleTxt != null) { 
       titleTxt.setText(title); 
      } 

      int tvDescription = c.getColumnIndexOrThrow("description"); 
      String description = c.getString(tvDescription); 
      TextView descriptionTxt = (TextView) v.findViewById(R.id.caption); 

      if (descriptionTxt != null) { 
       descriptionTxt.setText(description); 
      } 

      int tvDate = c.getColumnIndexOrThrow("date"); 
      String date = c.getString(tvDate); 
      TextView dateTxt = (TextView) v.findViewById(R.id.dateAdded); 

      if (dateTxt != null) { 
       dateTxt.setText(date); 
      } 

      int tvGoto = c.getColumnIndexOrThrow("gotoURL"); 
      final String gotoURL = c.getString(tvGoto); 
      TextView gotoTxt = (TextView) v.findViewById(R.id.dummy); 

      if (gotoTxt != null) { 
       gotoTxt.setText(gotoURL); 
      } 

      gotoTxt.setVisibility(View.GONE); 
      v.setTag(gotoURL); 

      final ListView lv = getListView(); 
      lv.setEnabled(true); 
      lv.setClickable(true); 

      lv.setOnItemClickListener(new OnItemClickListener() { 

       public void onItemClick(AdapterView<?> arg0, View v, int arg2, 
         long arg3) { 

        String url = ""; 
        url = (String) v.getTag(); 

        int nI = c.getColumnIndexOrThrow("intent"); 
        String intent = c.getString(nI); 
        Class<?> myIntent = null; 
        try { 
         myIntent = Class.forName("com.andaero.test.fragments" 
           + intent); 
        } catch (ClassNotFoundException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

        int tvTitle = c.getColumnIndexOrThrow("title"); 
        String title = c.getString(tvTitle); 

        int tvLabel = c.getColumnIndexOrThrow("label"); 
        String label = c.getString(tvLabel); 

        String queryKey = "SELECT * FROM " + label; 
        c.close(); 
        db.close(); 

        Intent i = new Intent(); 
        i.putExtra("QUERY_KEY", queryKey); 
        i.putExtra("KEY_URL", url); 
        i.putExtra("KEY_SUBTITLE", title); 
        i.putExtra("KEY_LABEL", label); 
        i.putExtra("KEY_INTENT", intent); 
        i.putExtra("QUERY_ORDER", "ASC"); 
        i.putExtra("KEY_YPOS", "0.0"); 
        startActivity(i); 
       } 
      }); 
     } 

     @Override 
     public View newView(Context context, Cursor cursor, ViewGroup parent) { 
      final View v = LayoutInflater.from(context).inflate(
        R.layout.list_item, parent, false); 
      return v; 
     } 
    } 

    } 
+1

"q = extras.getString (QUERY_KEY);" 쿼리가 다른 활동에서 전달되고 있습니까? 당신이 원하는 것 같아요 loadQuery (QUERY_KEY); – Frohnzie

+0

@Frohnzie 예, 다른 활동에 의해 전달되었습니다. 원래 클래스는 정상적으로 작동했습니다. 이제 디버깅하기 쉽도록 NPE를 getrting 한 후 하드 코딩했습니다. – CelticParser

+0

@Frohnzie Thnx! 나는 그것을 다시 (더 가까이서) 쳐다 보았다. 그리고 나는 나의 끈을 틀린 장소에 넣었다. 바꾸기 :'String q = null;'with :'String q = "SELECT * FROM Regulatory_List",'그게 효과가 있어요. – CelticParser

답변

0
Caused by: java.lang.IllegalArgumentException: column '_id' does not exist 

당신이 열 이름 _id에서이없는 의미 너. 너.

이 부분은 link입니다.

"커서에서 ListView 위젯으로 데이터를 노출하는 어댑터입니다. 커서에는"_id "라는 열이 있어야하며 그렇지 않으면이 클래스가 작동하지 않습니다."

편집 :

검색어가 유효하지 않은 것 같습니다.

Cursor c = db.rawQuery(QUERY_KEY + " ORDER BY `_id` " + QUERY_ORDER, null); 

당신은 여전히 ​​문제가 로그인 할 때 더 많은 정보를 추가하는 경우 : 나는 당신이 원하는 것은 생각

Log.e("QUERY", q + " ORDER BY `_id` " + qO); 

편집 :

왜이 q = extras.getString(QUERY_KEY);을하고 있습니다에서 통과되는 쿼리인가 다른 활동? 당신이 원하는 것처럼 보입니다 loadQuery(QUERY_KEY);

+0

Thnx, 잘못된 로그 파일을 복사했습니다. 수정 된 로그가 위에 있습니다. – CelticParser

+0

나는 따옴표가 필요하다고 생각하지 않는다. – Frohnzie