다운로드 데이터이라는 클래스가 있습니다. 필요한 모든 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)
나는 ** getActivity() **에에 ** onAttach ** 여전히 같은 일 –
getActivity()는 당신이 onAttach에서 활동 인수로이 활동 부모 컨텍스트를 nreturns, 그러나 그것의 (활동 활동) 추가 . 전역 컨텍스트를 정의한 다음 activityContext = activity처럼 초기화하십시오. –
내 코드를 수정했습니다. 그것은 여전히 충돌하고 같은 것을 말하고 있습니다 –