安卓java的提示错误怎么办_java – Android,如何从try的错误中显示一个对话框?...

在我的应用程序中,我连接到一个网站,在开始时收集一些AsyncTask的信息,使用try catch,从这里我可以在我的catlog中显示错误,如果有任何连接,但我一直试图运气好显示一个对话框显示连接失败以及重新连接或退出的选项,请检查我的代码并告诉我我做错了什么或者想知道如何实现这一点

//this is our download file asynctask

class DownloadFileAsync extends AsyncTask {

@Override

protected void onPreExecute() {

super.onPreExecute();

showDialog(DIALOG_DOWNLOAD_PROGRESS);

}

@Override

protected String doInBackground(String... aurl) {

try {

String result = "";

try {

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost("http://mywebsiteaddress");

// httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httppost);

HttpEntity entity = response.getEntity();

InputStream webs = entity.getContent();

// convert response to string

try {

BufferedReader reader = new BufferedReader(

new InputStreamReader(webs, "iso-8859-1"), 8);

StringBuilder sb = new StringBuilder();

String line = null;

while ((line = reader.readLine()) != null) {

sb.append(line + "\n");

}

webs.close();

result = sb.toString();

} catch (Exception e) {

Log.e("log_tag", "Error converting result " + e.toString());

}

} catch (Exception e) {

Log.e("log_tag", "Error in http connection " + e.toString());

}

// parse json data

try {

JSONArray jArray = new JSONArray(result);

for (int i = 0; i < jArray.length(); i++) {

JSONObject json_data = jArray.getJSONObject(i);

webResult resultRow = new webResult();

//infotodownload

arrayOfWebData.add(resultRow);

}

} catch (JSONException e) {

Log.e("log_tag", "Error parsing data " + e.toString());

}

} catch (Exception e) {

// this is the line of code that sends a real error message to the

// log

Log.e("ERROR", "ERROR IN CODE: " + e.toString());

// this is the line that prints out the location in

// the code where the error occurred.

e.printStackTrace();

}

return null;

}

protected void onProgressUpdate(String... progress) {

Log.d(LOG_TAG,progress[0]);

mProgressDialog.setProgress(Integer.parseInt(progress[0]));

}

@Override

protected void onPostExecute(String unused) {

//dismiss the dialog after the file was downloaded

dismissDialog(DIALOG_DOWNLOAD_PROGRESS);

}

}

//our progress bar settings

@Override

protected Dialog onCreateDialog(int id) {

switch (id) {

case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0

mProgressDialog = new ProgressDialog(this);

mProgressDialog.setTitle("Conectando al Servidor");

mProgressDialog.setMessage("Cargando informacion...");

mProgressDialog.setIndeterminate(false);

mProgressDialog.setMax(100);

mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

mProgressDialog.setCancelable(true);

mProgressDialog.show();

return mProgressDialog;

default:

return null;

}

}

编辑:

然后我尝试添加Arun建议的下一个代码

catch (Exception e) {

// this is the line of code that sends a real error message to the

// log

Log.e("ERROR", "ERROR IN CODE: " + e.toString());

// this is the line that prints out the location in

// the code where the error occurred.

e.printStackTrace();

return "ERROR_IN_CODE";

}

return null; // if I place here return "ERROR_IN_CODE" it calls the dialog but it gets always called so I don't need it here

}

@Override

protected void onPostExecute(String unused) {

//dismiss the dialog after the file was downloaded

dismissDialog(DIALOG_DOWNLOAD_PROGRESS);

if(unused.equals("ERROR_IN_CODE")){ //I get a system crash here!

errornote();

}

}

}

public void errornote() {

AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);

alt_bld.setMessage("No se a podido descargar la informacion de los medios, deseas reintentarlo, o salir?").setCancelable(false)

.setPositiveButton("Conectar de Nuevo", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

new DownloadFileAsync().execute();

}

})

.setNegativeButton("Salir", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

// Action for 'NO' Button

finish();

}

});

AlertDialog alert = alt_bld.create();

// Title for AlertDialog

alert.setTitle("Error en la Conexion!");

// Icon for AlertDialog

alert.setIcon(android.R.drawable.ic_dialog_alert);

alert.show();

}

但是也没有工作,我的应用程序崩溃在onPostExecute的if语句行中.我还需要帮助.

解决方法:

因为从受保护的字符串doInBackground(String … aurl)返回一个String对象,所以从catch块返回一些自定义错误字符串,并在protected void onPostExecute(String unused)中访问它.检查返回的String对象是否为自定义错误字符串,并在protected void onPostExecute(String unused)中显示该对话框,但仅在解除progressDialog之后,即在此行dismissDialog之后(DIALOG_DOWNLOAD_PROGRESS);显示错误对话框.

编辑

当控件进入Catch块时,返回一些简单的String,就像你使用的那个“ERROR_IN_CODE”一样.

catch (Exception e) {

// this is the line of code that sends a real error message to the

// log

Log.e("ERROR", "ERROR IN CODE: " + e.toString());

// this is the line that prints out the location in

// the code where the error occurred.

e.printStackTrace();

return "ERROR_IN_CODE";

}

并在onPostExecute(String unused)中检查以下内容

protected void onPostExecute(String unused) {

//dismiss the dialog after the file was downloaded

dismissDialog(DIALOG_DOWNLOAD_PROGRESS);

if(unused != null && unused.equals("ERROR_IN_CODE")){

showDialog(SOME_DIALOG_TO_SHOW_ERROR);

}

}

标签:java,android,eclipse,try-catch

来源: https://codeday.me/bug/20190630/1333262.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值