2014-09-14 3 views
0

다운로드 데이터이라는 클래스가 있습니다. 필요한 모든 JSON 데이터를 다운로드하여 SQLite DB에 저장하면 정상적으로 작동합니다. 그러나, 내 ListView에 채우는 함수를 전달할 때 내 응용 프로그램이 충돌합니다. onViewCreated 메서드에 추가하면 NullPointerException이 발생합니다. 데이터베이스가 비어 있음을 의미하지만 데이터를 다운로드하는 데 도움이되는 클래스의 메서드 끝에 추가하면 의미가 있습니다. java.lang.IllegalStateException : 단편. 내 코드는 다음과 같습니다 :Android에서 완료 될 때 메소드 실행

Public class DataRetrieval{ 
handleJson(); 
public void handleResponse { 
//My work goes here..... 
getResults(); 
} 
} 


    public class PendingFragment extends ListFragment{ 

    Context activityContext; 
    private ProgressDialog pDialog; 
    //Context context; 
    SimpleCursorAdapter mAdapter; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     View android = inflater.inflate(R.layout.pending_frag, container, false); 
     setHasOptionsMenu(true); 

     return android; 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onViewCreated(view, savedInstanceState); 
     //getResults(); 
     pDialog = new ProgressDialog(getActivity()); 
     pDialog.setMessage("Loading..."); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
     OrderDataRetrieval ord = new OrderDataRetrieval(getActivity()); 
     SharedPreferences pref = this.getActivity().getSharedPreferences("myData", Context.MODE_PRIVATE); 
     String getToken = pref.getString("key1", "no data"); 
     Uri uri = Uri.parse("content://" + getActivity().getString(R.string.AUTORITY_ORDER) + "/orders"); 
     Uri itemUri = Uri.parse("content://" + getActivity().getString(R.string.AUTORITY_ORDER) + "/item"); 
     Uri issuesUri = Uri.parse("content://" + getActivity().getString(R.string.AUTORITY_ORDER) + "/issue"); 
     ord.getData(getToken, uri, itemUri, issuesUri); 
     pDialog.dismiss(); 

    } 

    public void getResults(){ 
     This is the line the error points to --> Uri uri = Uri.parse("content://" + getString(R.string.AUTORITY_ORDER) + "/orders"); 
     String dbUri = uri.toString(); 
     ContentProvider cp = null; 
     final Cursor cursor = cp.query(uri, null, null, null, "_id"); 
     try { 
      JSONObject jObj = new JSONObject(cursor.toString()); 
      JSONArray jArr = new JSONArray(cursor.toString()); 
      Log.d("TAG JSONOBJ", jObj.toString()); 
      Log.d("TAG JSONArr", jArr.toString()); 
      parseJsonFeed(jObj); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    private void parseJsonFeed(JSONObject jObj){ 


    } 

    @Override 
    public void onAttach(Activity activity) { 
     // TODO Auto-generated method stub 
     activityContext = activity; 
     super.onAttach(activity); 
    } 

    @Override 
    public void onDetach() { 
     // TODO Auto-generated method stub 
     super.onDetach(); 
     try { 
      Field child1 = Fragment.class.getDeclaredField("PENDING"); 
      child1.setAccessible(true); 
      child1.set(this, null); 

     } catch (NoSuchFieldException e) { 
      // TODO: handle exception 
      throw new RuntimeException(e); 
     } catch (IllegalAccessException e) { 
      throw new RuntimeException(e); 
     } 
    } 

    @Override 
    public void onResume() { 
     // TODO Auto-generated method stub 
     //getResults(); 
     super.onResume(); 
    } 
} 

다음은 당신의 조각이 컨테이너 활동에 부착하기 전에 당신이 getActivity()를 호출 내 로그 캣

09-14 11:23:47.146: E/AndroidRuntime(25124): java.lang.IllegalStateException: Fragment PendingFragment{41e34b00} not attached to Activity 
09-14 11:23:47.146: E/AndroidRuntime(25124): at android.support.v4.app.Fragment.getResources(Fragment.java:603) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at android.support.v4.app.Fragment.getString(Fragment.java:625) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at com.deliveryscience.pod.fragments.PendingFragment.getResults(PendingFragment.java:75) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at com.deliveryscience.pod.handlers.OrderDataRetrieval.handleResponse(OrderDataRetrieval.java:117) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at com.deliveryscience.pod.handlers.OrderDataRetrieval$1.onResponse(OrderDataRetrieval.java:42) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at com.deliveryscience.pod.handlers.OrderDataRetrieval$1.onResponse(OrderDataRetrieval.java:1) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:65) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at android.os.Handler.handleCallback(Handler.java) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at android.os.Handler.dispatchMessage(Handler.java) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at android.os.Looper.loop(Looper.java) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at android.app.ActivityThread.main(ActivityThread.java) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at java.lang.reflect.Method.invokeNative(Native Method) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at java.lang.reflect.Method.invoke(Method.java:515) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java) 
09-14 11:23:47.146: E/AndroidRuntime(25124): at dalvik.system.NativeStart.main(Native Method) 

답변

0

입니다. onAttch()에서 활동 컨텍스트를 초기화하거나 onActivityCreated()에서 getAcitivty()를 사용해야합니다. onCreateView() 또는 onViewCreated()는 Fragment가 Activity에 연결하기 전에 호출합니다.

@Override 
public void onAttach(Activity activity) 
{ 
    //Initializing Activity Context 
} 
+0

나는 ** getActivity() **에에 ** onAttach ** 여전히 같은 일 –

+0

getActivity()는 당신이 onAttach에서 활동 인수로이 활동 부모 컨텍스트를 nreturns, 그러나 그것의 (활동 활동) 추가 . 전역 컨텍스트를 정의한 다음 activityContext = activity처럼 초기화하십시오. –

+0

내 코드를 수정했습니다. 그것은 여전히 ​​충돌하고 같은 것을 말하고 있습니다 –

관련 문제