OnClick事件仅适用于第二次

时间:2016-09-03 16:18:27

标签: java android android-asynctask onclicklistener

我有一个按钮,当用于运行asyntask类时,我使用它来设置textView中的值。当他返回到调用该方法的类时,TextView的值被捕获并放入Toast但是第一次单击Toast时没有出现任何消​​息,在第二个工作中。怎么办?

这是调用按钮的方法

btnDadosPessoais.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String pega = TextAux.getText().toString();
            Toast.makeText(getActivity(), pega, Toast.LENGTH_SHORT).show();
            gravarDadoss(view);
        }
    });

电视是我的TextView,我是一个简单的字符串

 protected void onPostExecute(String resposta) {
    if(resposta.equals("Sem acesso à Internet")&&dialog.isShowing())
    {
        tv.setText(resposta);
        dialog.dismiss();
    }
    else if (dialog.isShowing()) {
        dialog.dismiss();
        valida(resposta);
    }
}

Asyntask here

`public class BackgroudCadPessoa扩展了AsyncTask {

ProgressDialog dialog;
Context ctx;
String pega;
ConnectivityManager connectivityManager;
TextView tv;

BackgroudCadPessoa(Context ctx, View v) {
    this.ctx = ctx;
    dialog = new ProgressDialog(ctx);
    tv = (TextView) v.findViewById(R.id.textAux);
}

@Override
protected void onPreExecute() {
    connectivityManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
    dialog.setMessage("Aguarde...");
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    dialog.setIndeterminate(true);
    dialog.show();
}

@Override
protected String doInBackground(String... params) {
    if (connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isAvailable() && connectivityManager.getActiveNetworkInfo().isConnected()) {
        String urls = "my URL";
        String nome = params[0];
        try {
            URL url = new URL(urls);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            //httpURLConnection.setDoInput(true);
            OutputStream outputStream = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
            String data = URLEncoder.encode("nome", "UTF-8") + "=" + URLEncoder.encode(nome, "UTF-8");
            bufferedWriter.write(data);
            bufferedWriter.flush();
            bufferedWriter.close();
            outputStream.close();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"));
            String response = "";
            String line = "";
            while ((line = bufferedReader.readLine()) != null) {
                response += line;
            }
            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();
            return response;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        return "Sem acesso à Internet";
    }
    return null;
}

@Override
protected void onProgressUpdate(Void... values) {
    super.onProgressUpdate(values);
}

@Override
protected void onPostExecute(String resposta) {
    if(resposta.equals("Sem acesso à Internet")&&dialog.isShowing())
    {
        tv.setText(resposta);
        dialog.dismiss();
    }
    else if (dialog.isShowing()) {
        dialog.dismiss();
        valida(resposta);
    }
}

public void valida(String js)
{
    JSONArray jsonArray;
    if (js.equals(null)) {
        tv.setText("Erro ao Cadastrar");
    } else {
        try {
            JSONObject jo = new JSONObject(js);
            jsonArray = jo.getJSONArray("Resposta");
            int count = 0;
            while (count < jsonArray.length()) {
                JSONObject jsonObject = jsonArray.getJSONObject(count);
                pega = jsonObject.getString("resposta");
                count++;
            }
            if (pega == null)
            {
                tv.setText("Erro ao Cadastrar");
            }
            else if (pega.equals("Dados Cadastrados"))
            {
                tv.setText("Dados Cadastrados");
            }
            else if (pega.equals("Erro ao Cadastrar"))
            {
                tv.setText("Erro ao Cadastrar");
            }
            else
            {
                tv.setText("Dados Cadastrados");
            }
        } catch (JSONException ex) {
            ex.printStackTrace();
        }
    }
}

} `

1 个答案:

答案 0 :(得分:1)

您希望在AsyncTask完成输出到TextAux之后出现Toast吗?

然后你需要把你的烤面包机放在onPostExecute

@Override
protected void onPostExecute(String resposta) {
    if(resposta.equals("Sem acesso à Internet")&&dialog.isShowing())
    {
        tv.setText(resposta);
        dialog.dismiss();
        Toast.makeText(getActivity(), resposta, Toast.LENGTH_SHORT).show();
    }
    else if (dialog.isShowing()) {
        dialog.dismiss();
        valida(resposta);
    }

}