使用异步任务之前我的代码是可行的。所以我在我的代码中做了一些更改,现在进度条显示出来但是出现了以下错误。
Log cat:
08-07 06:43:15.875: E/AndroidRuntime(1734): FATAL EXCEPTION: AsyncTask #1
08-07 06:43:15.875: E/AndroidRuntime(1734): java.lang.RuntimeException: An error occured while executing doInBackground()
08-07 06:43:15.875: E/AndroidRuntime(1734): at android.os.AsyncTask$3.done(AsyncTask.java:299)
08-07 06:43:15.875: E/AndroidRuntime(1734): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
08-07 06:43:15.875: E/AndroidRuntime(1734): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
08-07 06:43:15.875: E/AndroidRuntime(1734): ... 18 more
mycode的:
protected String doInBackground(String... args) {
final EditText eKey = (EditText) findViewById(R.id.edtxt_key);
inputs = eKey.getText().toString();
if (inputs.matches("")) {
} else {
keys = url + inputs;
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(keys);
try {
satu = json.getJSONObject(TAG_1);
String two = satu.getString(TAG_2);
String three = satu.getString(TAG_3);
if (two.matches("") | three.matches("")) {
AlertDialog.Builder builder = new AertDialog.Builder(MainActivity.this);
builder.setMessage("not found!").setCancelable(false).setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
eKey.setText("");
status.setText("Key not found!");
}
});
AlertDialog alert = builder.create();
alert.show();
} else {
Intent x = new Intent(MainActivity.this, result.class);
x.putExtra("bac", two);
x.putExtra("cab", three);
startActivity(x);
eKey.setText("");
keys = "";
inputs = "";
}
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
出了什么问题?提前谢谢。
答案 0 :(得分:7)
alert.show();
和
eKey.setText("");
无法在后台任务中执行。传递来自
的返回值doInBackground()
到
onPostExecute()
方法并在那里执行UI任务。
答案 1 :(得分:2)
您不应在doInBackground()
例如,
如果您从网络下载任何员工,那时您想要更新UI,您可以使用onProgressUpdate()
更新UI并实施publishProgress() @doInBackground().
否则,
AsynTask在单独的工作线程中运行,使用doInBackground()
方法在UI后面执行人员(当Asyntask在后台运行时,我们可以显示加载对话框)。完成工作后,我们可以使用onPostExecute()
更新用户界面。
如果您需要更多关于AsynTask的说明,请务必拍摄您的问题......
快乐编码:)
答案 2 :(得分:1)
AsynTask类提供了三种主要方法:
两个方法 onPreExecute(), onPostExecute()在包含UI的类的同一个线程中执行。
方法 doInBackground()在不同的线程上执行。由于我们无法从在不同线程上运行的进程引用UI,因此我们可以:
再见:)