2013-08-05 109 views
0

點擊取消按鈕我得到一個硬故障請參閱logcat。行ChartingFragment.java:617dialog.dismiss();我不太確定爲什麼它說空或無法找到那裏的對話框。任何人都可以看到我在這裏失蹤了嗎取消AsyncTask

public class WebPageAsync extends AsyncTask<Void, Integer, Void>{ 
    ProgressBar progressBar; 
    TextView tvLoading, tvPer; 
    Dialog dialog; 
    Button btnCancel; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog = new Dialog(getActivity()); 
     dialog.setCancelable(false); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.progressdialog); 

     progressBar = (ProgressBar) dialog.findViewById(R.id.progressBar1); 
     tvLoading = (TextView) dialog.findViewById(R.id.tv1); 
     tvPer = (TextView) dialog.findViewById(R.id.tvper); 
     btnCancel = (Button) dialog.findViewById(R.id.btncancel); 

     btnCancel.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       objMyTask.cancel(true); 
       dialog.dismiss(); 
      } 
     }); 

     dialog.show(); 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     progressBar.setProgress(values[0]); 
     tvLoading.setText("Uploading... " + values[0] + " %"); 
     tvPer.setText(values[0]+" %"); 
    } 


    @Override 
    protected Void doInBackground(Void... params) { 

     String userID = null; 

     Log.i("PROJECTCARUSO","Fetching User/Posting User"); 
     userID = postUser(); 

     Log.i("PROJECTCARUSO","Fetching Charting/Posting Charting"); 
     if (userID != null) { 
      postCharting(); 
     } 

     return null; 
    } 


    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 

     dialog.dismiss(); 

     AlertDialog alert = new AlertDialog.Builder(getActivity()) 
       .create(); 

     alert.setTitle("Completed!!!"); 
     alert.setMessage("Your Task is Completed SuccessFully!!!"); 
     alert.setButton("Dismiss", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
      } 
     }); 
     alert.show(); 
    } 

    protected void postCharting() { 
     // Get the data 
     int percent = 0; 
     Cursor cursorCharting = getActivity().getContentResolver().query(StatusProvider.CONTENT_URI_CHARTING, null, StatusData.KEY_CHARTING_PROC + " is null " , null, null); 

     cursorCharting.moveToFirst(); 

     if (cursorCharting.getCount()>0 && cursorCharting!=null) { 
      Log.i("PROJECTCARUSO","Que'd Charting Information Found"); 
      while (cursorCharting.isAfterLast() == false) 
      { 
       if (isCancelled()) { 
        break; 
       } 
       percent += 100/cursorCharting.getCount(); 
       Log.i("PROJECTCARUSO","percent: " + percent); 
       publishProgress(percent); 

       ArrayList<NameValuePair> httpParams; 

       httpParams = new ArrayList<NameValuePair>();       
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_DATE, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_DATE)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_TEMPERATURE, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_TEMPERATURE)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_STAMPS, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_STAMPS)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_FERTILE, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_FERTILE)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_PERIOD, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_PERIOD)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_INTERCORSE, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_INTERCORSE)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_CERVIX, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_CERVIX)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_MOOD, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_MOOD)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_HEADACHE, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_HEADACHE)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_TEST, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_TEST)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_ENERGY, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_ENERGY)))); 
       httpParams.add(new BasicNameValuePair(StatusData.KEY_CHARTING_NOTES, cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_NOTES)))); 

       try { 
        SERVICE_URL = new URL("http://www.projectcaruso.com/android/com.projectcaruso/naturalfamilyplaning/postCharting.php"); 
       } catch (MalformedURLException e) { 
        Log.i("PROJECTCARUSO", "MalformedURLException: " + e.toString()); 
        e.printStackTrace(); 
       } 


       String response= doPost(SERVICE_URL, httpParams); 

       // First split the input String into an array, 
       // each element containing a String to be parse as an int 
       String[] intsToParse = response.split("\""); 

       int[] info = new int[intsToParse.length]; 
       int _id = 0; 

       // Now just parse each part in turn 
       for (int i = 0; i < info.length; i++) 
       { 

        if (isNumeric(intsToParse[i].toString())) { 
         _id = Integer.parseInt(intsToParse[i]); 
        } 
       } 

       if (_id >= 0) { 
        Log.i("PROJECTCARUSO", "Insert Successful: " + _id); 
        ContentValues values = new ContentValues(); 
        values.put(StatusData.KEY_CHARTING_PROC, "Y"); 
        getActivity().getContentResolver().update(StatusProvider.CONTENT_URI_CHARTING, values, " " + StatusData.KEY_CHARTING_DATE + " = " + cursorCharting.getString(cursorCharting.getColumnIndex(StatusData.KEY_CHARTING_DATE)), null); 
       } 

       cursorCharting.moveToNext(); 
      } 
     } else { 
      Log.i("PROJECTCARUSO","No que'd Charting Information Found"); 
     } 
    } 


    protected String postUser() { 
     String userID = null; 

     //Get the user 
     Cursor cursorUser = getActivity().getContentResolver().query(StatusProvider.CONTENT_URI_USER, null, null, null, null); 

     cursorUser.moveToFirst(); 

     if (cursorUser.getCount()>0 && cursorUser!=null) { 
      // Record found 
      if (cursorUser.getString(cursorUser.getColumnIndex(StatusData.KEY_USER_ID)) == null) { 
       Log.i("PROJECTCARUSO","KEY_USER_ID is null, need to upload the user information"); 
       //this user has logged in with facebook but has not be synced before. 
       //Push user information to my online database. 

       ArrayList<NameValuePair> httpParams; 

       httpParams = new ArrayList<NameValuePair>();       
       httpParams.add(new BasicNameValuePair("fbid", cursorUser.getString(cursorUser.getColumnIndex(StatusData.KEY_USER_ROWID)))); 
       httpParams.add(new BasicNameValuePair("social", cursorUser.getString(cursorUser.getColumnIndex(StatusData.KEY_USER_SOCIAL)))); 
       httpParams.add(new BasicNameValuePair("name", cursorUser.getString(cursorUser.getColumnIndex(StatusData.KEY_USER_NAME)))); 
       httpParams.add(new BasicNameValuePair("fname", cursorUser.getString(cursorUser.getColumnIndex(StatusData.KEY_USER_FNAME)))); 
       httpParams.add(new BasicNameValuePair("username", cursorUser.getString(cursorUser.getColumnIndex(StatusData.KEY_USER_USERNAME)))); 
       httpParams.add(new BasicNameValuePair("email", cursorUser.getString(cursorUser.getColumnIndex(StatusData.KEY_USER_EMAIL)))); 
       httpParams.add(new BasicNameValuePair("picture", cursorUser.getString(cursorUser.getColumnIndex(StatusData.KEY_USER_PICTURE)))); 
       httpParams.add(new BasicNameValuePair("other", cursorUser.getString(cursorUser.getColumnIndex(StatusData.KEY_USER_OTHER)))); 

       try { 
        SERVICE_URL = new URL("http://www.projectcaruso.com/android/com.projectcaruso/naturalfamilyplaning/postUser.php"); 
       } catch (MalformedURLException e) { 
        Log.i("PROJECTCARUSO", "MalformedURLException: " + e.toString()); 
        e.printStackTrace(); 
       } 

       String response = doPost(SERVICE_URL, httpParams); 


       // First split the input String into an array, 
       // each element containing a String to be parse as an int 
       String[] intsToParse = response.split("\""); 

       int[] info = new int[intsToParse.length]; 
       int _id = 0; 

       // Now just parse each part in turn 
       for (int i = 0; i < info.length; i++) 
       { 

        if (isNumeric(intsToParse[i].toString())) { 
         _id = Integer.parseInt(intsToParse[i]); 
        } 
       } 

       if (_id > 0) { 

        Log.i("PROJECTCARUSO", "Found id: " + _id); 
        ContentValues values = new ContentValues(); 
        values.put(StatusData.KEY_USER_ID, _id); 
        getActivity().getContentResolver().update(StatusProvider.CONTENT_URI_USER, values, " 1 = 1 ", null); 


        Cursor cursorUser2 = getActivity().getContentResolver().query(StatusProvider.CONTENT_URI_USER, null, null, null, null); 

        cursorUser2.moveToFirst(); 

        userID = cursorUser2.getString(cursorUser2.getColumnIndex(StatusData.KEY_USER_ID)); 
       } 

      } else { 
       while (cursorUser.isAfterLast() == false) 
       { 
        //this User is already set up to send/receive charting updates 
        Log.i("PROJECTCARUSO","User found and has been connected before"); 
        userID = cursorUser.getString(cursorUser.getColumnIndex(StatusData.KEY_USER_ID)); 

        cursorUser.moveToNext(); 
       } 
      } 
     } else { 
      //This user has not been set up to send/receive charting updates 
      Log.i("PROJECTCARUSO","User profile not set up, please login via facebook"); 
      Log.i("PROJECTCARUSO", "userID: " + userID); 
     } 
     return userID; 
    } 

    protected String doPost(URL url,ArrayList<NameValuePair> httpParams) { 
     String response = null; 

     try { 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(10000); 
      conn.setConnectTimeout(15000); 
      conn.setRequestMethod("POST"); 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 

      OutputStream os = conn.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8")); 
      writer.write(getQuery(httpParams)); 
      writer.close(); 
      os.close(); 

      conn.connect(); 

      //start listening to the stream 
      Scanner inStream = new Scanner(conn.getInputStream()); 

      //process the stream and store it in StringBuilder 
      while(inStream.hasNextLine()) 
      response+=(inStream.nextLine()); 

      Log.i("PROJECTCARUSO","response: " + response); 

     } catch (ProtocolException e) { 
      Log.i("PROJECTCARUSO", "Error: " + e.toString()); 
     } 

     catch (IOException e) { 
      Log.i("PROJECTCARUSO", e.toString()); 
     } 

     return response; 
    } 

    public boolean isNumeric(String str) { 
      try 
      { 
      double d = Double.parseDouble(str); 
      } 
      catch(NumberFormatException nfe) 
      { 
      return false; 
      } 
      return true; 
     } 

    private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException { 
     StringBuilder result = new StringBuilder(); 
     boolean first = true; 

     for (NameValuePair pair : params) 
     { 
      if (pair.getValue() == null) { 
       Log.i("PROJECTCARUSO", "Null value pair for: " + pair.getName()); 
      } else { 

       if (first) 
        first = false; 
       else 
        result.append("&"); 
        result.append(URLEncoder.encode(pair.getName(), "UTF-8")); 
        result.append("="); 
        result.append(URLEncoder.encode(pair.getValue(), "UTF-8")); 
        } 
      } 

      return result.toString(); 
     } 

的logcat:

08-05 09:54:45.182: E/AndroidRuntime(317): FATAL EXCEPTION: main 
08-05 09:54:45.182: E/AndroidRuntime(317): java.lang.NullPointerException 
08-05 09:54:45.182: E/AndroidRuntime(317): at com.projectcaruso.naturalfamilyplaning.ChartingFragment$WebPageAsync$1.onClick(ChartingFragment.java:617) 
08-05 09:54:45.182: E/AndroidRuntime(317): at android.view.View.performClick(View.java:4192) 
08-05 09:54:45.182: E/AndroidRuntime(317): at android.view.View$PerformClick.run(View.java:17254) 
08-05 09:54:45.182: E/AndroidRuntime(317): at android.os.Handler.handleCallback(Handler.java:615) 
08-05 09:54:45.182: E/AndroidRuntime(317): at android.os.Handler.dispatchMessage(Handler.java:92) 
08-05 09:54:45.182: E/AndroidRuntime(317): at android.os.Looper.loop(Looper.java:137) 
08-05 09:54:45.182: E/AndroidRuntime(317): at android.app.ActivityThread.main(ActivityThread.java:4950) 
08-05 09:54:45.182: E/AndroidRuntime(317): at java.lang.reflect.Method.invokeNative(Native Method) 
08-05 09:54:45.182: E/AndroidRuntime(317): at java.lang.reflect.Method.invoke(Method.java:511) 
08-05 09:54:45.182: E/AndroidRuntime(317): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 
08-05 09:54:45.182: E/AndroidRuntime(317): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 
08-05 09:54:45.182: E/AndroidRuntime(317): at dalvik.system.NativeStart.main(Native Method) 

回答

1

什麼是objMyTask?我認爲這是觸發NullPointerExceptionnull

如果objMyTaskWebPageAsync的一個實例,我強烈建議您使用WebPageAsync.this.cancel(true)而不是objMyTask.cancel(true)