OnPostExecute从未触发过

时间:2014-01-18 17:30:58

标签: android methods android-asynctask runtime-error

我在stackoverflow上读过很多问题,但我没有找到解决问题的方法。问题是我在onClick中使用AsynkTask方法调用.execute()doInBackground已完成,但之后onPostExecute未被调用,即使其上有@overridedoInBackground返回值。我发帖是班级。

public class FragmentControllaCorsa extends Fragment implements View.OnClickListener{

    private Button controlla;
    private TextView ultimaCorsa, validitaCorsa;
    private EditText codiceDocumento;
    private Context context;

    // Tag usato nei log.
    // Tag used into logs.
    private static final String TAG = FragmentControllaCorsa.class.getName();

    // Test dall'Emulatore:
    // Testing from Emulator:
    private static final String LOGIN_URL = "http://10.0.2.2/PrimaAppAndroid/get/ultimaTratta.php";

// Tag(ID) del responso Json restituito dallo script php:
// JSON element ids from repsonse of php script:
private static final String TAG_SUCCESS = "success";
private static final String TAG_DATA = "Data";
private static final String TAG_DURATA = "DurataConvalida";


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    /*
    Inserisco il layout di questo fragment.
    --
    Inflate the layout for this fragment
     */
    return inflater.inflate(R.layout.fragment_controlla_corsa, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    /*
    Creo Il bottone controlla e vi associo come listener questa classe stessa.
    --
    I create the button controlla and I associate him this class as listnener.
     */
    controlla = (Button) getView().findViewById(R.id.buttonControllaCorsa);
    controlla.setOnClickListener(this);

    /*
    Ottengo le due edit text dal file .xml, il context dell'activity e l'EditText codiceDocumento.
    --
    I get the two EditText from the .xml file, the activity context and the EditText codiceDocumento.
     */
    ultimaCorsa = (TextView) getView().findViewById(R.id.ultimaCorsaControlloCorsa);
    validitaCorsa = (TextView) getView().findViewById(R.id.validitaCorsaControlloCorsa);
    context = getActivity();
    codiceDocumento = (EditText) getView().findViewById(R.id.codiceDocumentoControllaCorsa);

}


@Override
public void onClick(View view) {
    new DownloadUltimaCorsa().execute();
}


class DownloadUltimaCorsa extends AsyncTask<Void, Void, JSONObject>{

    private ProgressDialog pDialog;


    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(context);
        pDialog.setMessage("Download ultima tratta...");
        // Dura un tempo indeterminato.
        // It lasts a undefined time.
        pDialog.setIndeterminate(false);
        // E' cancellabile dal tasto Back.
        // It's cancelable by the Back key.
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected JSONObject doInBackground(Void... voids) {

        // Per il controllo se è andato a buon fine.
        // Checking if all goes well.
        int success;
        // Il parametro da passare.
        // The param to pass.
        String codice = codiceDocumento.getText().toString();
        JSONParser jsonParser = new JSONParser();

        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();  //http://stackoverflow.com/a/17609232/2337094 Namevaluepair
        params.add(new BasicNameValuePair("codice", codice));

        // Avvio della richiesta.
        Log.d("request!", "starting");
        // Start the request.
        JSONObject json = jsonParser.makeHttpRequest(
                LOGIN_URL, "POST", params);

        // Controllo del respondo json
        // Check your log for json response
        Log.d("Download effettuato", json.toString());

        return json;
        // json success tag
            /*success = json.getInt(TAG_SUCCESS);
            if (success == 1) {//SE VORRÒ GESTIRE L'ERRORE.
                return json;
            } else {
                return json;
            }*/
    }


    @Override
    protected void onPostExecute(JSONObject json) {
        super.onPostExecute(json);
        // Chiudo il ProgressDialog.
        // Dismiss the ProgressDialog.
        pDialog.dismiss();

        try {
            JSONArray valore = new JSONArray(json.toString());
            JSONObject riga = valore.getJSONObject(0);
            ultimaCorsa.setText(riga.getString(TAG_DATA));
            validitaCorsa.setText(riga.getString(TAG_DURATA));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
}

为什么不调用onPostExecute()? 提前谢谢你!

0 个答案:

没有答案