2

onCreateView에서 AsyncTask를 호출하려고 할 때 널 포인터 예외가 발생합니다. 요청을 보내는 중에도 진행률 대화 상자를 표시해야합니다.조각 내의 Asyc 작업에서 Null 포인터 예외

** GrIsHu의 제안 후에 나는 어떻게 우리가 할 수있는 예외 **

03-04 11:16:42.762: E/AndroidRuntime(10435): FATAL EXCEPTION: main 
03-04 11:16:42.762: E/AndroidRuntime(10435): java.lang.NullPointerException 
03-04 11:16:42.762: E/AndroidRuntime(10435): at com.test.newinfiniteapp.RequestClient.onPreExecute(RequestClient.java:25) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.os.AsyncTask.execute(AsyncTask.java:534) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at com.test.newinfiniteapp.PendingApprovals.postHttpRequest(PendingApprovals.java:295) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at com.test.newinfiniteapp.PendingApprovals.onCreateView(PendingApprovals.java:49) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.os.Handler.handleCallback(Handler.java:800) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.os.Handler.dispatchMessage(Handler.java:100) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.os.Looper.loop(Looper.java:194) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at android.app.ActivityThread.main(ActivityThread.java:5371) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at java.lang.reflect.Method.invokeNative(Native Method) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at java.lang.reflect.Method.invoke(Method.java:525) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
03-04 11:16:42.762: E/AndroidRuntime(10435): at dalvik.system.NativeStart.main(Native Method) 

AsyncTask를

public class RequestClient extends AsyncTask<String, Void, String>{ 
    Context context; 
    CallBack callBack; 

    public RequestClient (CallBack callBack) { 
     this.callBack = callBack; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     Main.progressDialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     String responseString=""; 
     HttpClient client = null; 
     try { 
      client = new DefaultHttpClient(); 
      HttpGet get = new HttpGet(param[0]); 
      client.getParams().setParameter("http.socket.timeout", 6000); 
      client.getParams().setParameter("http.connection.timeout", 6000); 
      HttpResponse responseGet = client.execute(get); 
      HttpEntity resEntityGet = responseGet.getEntity(); 
      if (resEntityGet != null) { 
       responseString = EntityUtils.toString(resEntityGet); 
       Log.i("GET RESPONSE", responseString.trim()); 
      } 
     } catch (Exception e) { 
      Log.d("ANDRO_ASYNC_ERROR", "Error is "+e.toString()); 
     } 
     Log.d("ANDRO_ASYNC_RESPONSE", responseString.trim()); 
     client.getConnectionManager().shutdown(); 
     return responseString.trim(); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     callBack.run(result); 
     Main.progressDialog.dismiss(); 
    } 


} 

MainClass가

public class Main extends Fragment { 

    public static ProgressDialog progressDialog; 
    final Context context = getActivity(); 
    public static String url = ConfigUrl.MainUrl; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.activity, 
       container, false); 
     progressDialog = new ProgressDialog(context); 
     progressDialog.setMessage("Please Wait .!!!"); 
     progressDialog.setIndeterminate(false); 
     progressDialog.setProgressStyle(ProgressDialog.THEME_HOLO_DARK); 
     progressDialog.setCancelable(false); 
     postHttpRequest(); 

     return rootView; 
    } 

    private void postHttpRequest() { 
     RequestClient reqClient = new RequestClient(new CallBack() { 

      @Override 
      public void run(Object result) { 
       try { 
       String AppResponse = (String) result; 
       Log.d("Status recived", AppResponse); 


       } catch (Exception e) { 
        Log.e("Exception Occured", "Exception is " + e.getMessage()); 
       } 
      } 
     }); 
     reqClient.execute(url); 

    } 
} 

제발 도와주세요 얻고있다 이 작업을 수행 . 비동기 작업의 내부 클래스를 만들고 싶지 않습니다.

+0

. 실제로 원하는게 뭐야? –

+0

이 줄 때문일 수 있습니다 ** progressDialog.setProgressStyle (ProgressDialog.THEME_HOLO_DARK); ** 제거하고 한번 시도하십시오 .. –

+0

어떤 줄이'PendingApprovals.java' 클래스의 41 번째 줄입니까? –

답변

1

우선 onCreateView 메서드 내에서 context을 정의하십시오. 이해가 안

final Context context; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity, 
      container, false); 
     context = getActivity(); 
+0

오류가 제거되었습니다 이제 지금 다른 예외가 생겼습니다. 내 질문에 예외가 게시됩니다 – Developer

+0

ProgressDialog가 'Main'Fragment 안에있는 ProgressDialog의 실제 참조를 가져올 수 없습니다. – GrIsHu

+0

그래서 내가 할 수있는 일은 – Developer

0

사용 우는 방법

RegisterAsync extends AsyncTask<String, Void, AsyncTaskResult<JSONObject>> { 


    ProgressDialog dlg; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dlg = new ProgressDialog(context); 
     dlg.setCanceledOnTouchOutside(false); 
     dlg.setCancelable(false);  
     dlg.setMessage("Please wait...."); 
     dlg.show(); 
    } 

    @Override 
    protected AsyncTaskResult<JSONObject> doInBackground(String... params) { 
     //do your stuff 
    } 


    protected void onPostExecute(AsyncTaskResult<JSONObject> result) { 
      } 
1
progressDialog.setProgressStyle(ProgressDialog.THEME_HOLO_DARK); 
+0

@ abcd ... 좀 더 이해할 수 있도록 답변 주위에 몇 가지 설명을주고 – VinayVeluri

+0

이것은 ** 로켓 답변 **라고합니다! –