【发布时间】:2014-11-27 21:41:35
【问题描述】:
我是初学者,所以请清楚地解释你的答案。谢谢
编辑 2 我现在有
public class MainActivity extends Activity {
//other declarations
public ReadTask readTask;
protected void onCreate(Bundle savedInstanceState){
readTask = new ReadTask();
private OnClickListener test = new OnClickListener()
{
@Override
public void onClick (View V)
{
readTask.execute();
//new ReadTask().execute();
}
};
private OnClickListener cancel = new OnClickListener()
{
@Override
public void onClick (View V)
{
readTask.cancel(true);
results1.setText("");
}
检查 EDIT 1 以了解上述代码 (Edit 2) 引发的错误; 谢谢
我在应用中有一个取消按钮。点击这个,就是这个 发生;
public void onClick (View V)
{
InputMethodManager inputManager = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
new ReadTask().onCancelled();
new ReadTask().cancel(true);
results1.setText("Cancelled");
}
ReadTask 像这样扩展 AsyncTask;
public class ReadTask extends AsyncTask<Void, String, Void>
{
BufferedReader reader = null;
public volatile boolean isCancelled=false;
//other declarations
protected void onCancelled() {
super.onCancelled();
isCancelled = true;
new ReadTask().cancel(true);
}
@Override
protected Void doInBackground(Void... params)
{
// isCancelled=false;
try {
for(int k=x1[3];k<=x2[3];k++)
{
//bunch of code
Log.w("5.newString", newString);
String isC1 = String.valueOf(isCancelled);
Log.w("5.Is cancelled?", isC1); // at this point, VALUE IS ALWAYS FALSE !
if (isCancelled() || isCancelled == true) {Log.d("Entered","WHY");break;}
//bunch of code
} //bunch of catches
这里尝试了两种方法,一种是布尔变量 isCancelled,另一种是 ReadTask().cancel(true); - 两者都不起作用。为什么?
我是新人,所以请把你的答案解释清楚。谢谢
************** EDIT 1 - Logcat 输出********
11-27 17:18:56.626: W/dalvikvm(28775): threadid=1: thread exiting with uncaught exception (group=0x41bcee48)
11-27 17:18:56.636: E/AndroidRuntime(28775): FATAL EXCEPTION: main
11-27 17:18:56.636: E/AndroidRuntime(28775): Process: com.example.pingtest, PID: 28775
11-27 17:18:56.636: E/AndroidRuntime(28775): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pingtest/com.example.pingtest.MainActivity}: java.lang.NullPointerException
11-27 17:18:56.636: E/AndroidRuntime(28775): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2202)
11-27 17:18:56.636: E/AndroidRuntime(28775): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2252)
11-27 17:18:56.636: E/AndroidRuntime(28775): at android.app.ActivityThread.access$800(ActivityThread.java:139)
11-27 17:18:56.636: E/AndroidRuntime(28775): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
11-27 17:18:56.636: E/AndroidRuntime(28775): at android.os.Handler.dispatchMessage(Handler.java:102)
11-27 17:18:56.636: E/AndroidRuntime(28775): at android.os.Looper.loop(Looper.java:136)
11-27 17:18:56.636: E/AndroidRuntime(28775): at android.app.ActivityThread.main(ActivityThread.java:5103)
11-27 17:18:56.636: E/AndroidRuntime(28775): at java.lang.reflect.Method.invokeNative(Native Method)
11-27 17:18:56.636: E/AndroidRuntime(28775): at java.lang.reflect.Method.invoke(Method.java:515)
11-27 17:18:56.636: E/AndroidRuntime(28775): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
11-27 17:18:56.636: E/AndroidRuntime(28775): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
11-27 17:18:56.636: E/AndroidRuntime(28775): at dalvik.system.NativeStart.main(Native Method)
11-27 17:18:56.636: E/AndroidRuntime(28775): Caused by: java.lang.NullPointerException
11-27 17:18:56.636: E/AndroidRuntime(28775): at com.example.pingtest.MainActivity$ReadTask.<init>(MainActivity.java:120)
11-27 17:18:56.636: E/AndroidRuntime(28775): at com.example.pingtest.MainActivity.onCreate(MainActivity.java:39)
11-27 17:18:56.636: E/AndroidRuntime(28775): at android.app.Activity.performCreate(Activity.java:5275)
11-27 17:18:56.636: E/AndroidRuntime(28775): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-27 17:18:56.636: E/AndroidRuntime(28775): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2166)
11-27 17:18:56.636: E/AndroidRuntime(28775): ... 11 more
11-27 17:19:05.665: I/Process(28775): Sending signal. PID: 28775 SIG: 9
【问题讨论】:
-
你想要发生什么?
-
另外,您是否先测试了按钮?以确保您的取消呼叫甚至被执行?
-
我希望布尔值 (isCancelled) 在单击按钮后更改为 True。请同时阅读代码中的 cmets。谢谢。
-
是的,按钮有效,但值保持不变。我想在单击取消按钮后停止正在运行的 AsynTask。
标签: android android-asynctask boolean