Обновление 2
Logcat:
03-02 19:03:47.616: E/AndroidRuntime(881): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{TheTask}: java.lang.InstantiationException: .TheTask
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.os.Looper.loop(Looper.java:123)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-02 19:03:47.616: E/AndroidRuntime(881): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 19:03:47.616: E/AndroidRuntime(881): at java.lang.reflect.Method.invoke(Method.java:507)
03-02 19:03:47.616: E/AndroidRuntime(881): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-02 19:03:47.616: E/AndroidRuntime(881): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-02 19:03:47.616: E/AndroidRuntime(881): at dalvik.system.NativeStart.main(Native Method)
03-02 19:03:47.616: E/AndroidRuntime(881): Caused by: java.lang.InstantiationException: TheTask
03-02 19:03:47.616: E/AndroidRuntime(881): at java.lang.Class.newInstanceImpl(Native Method)
03-02 19:03:47.616: E/AndroidRuntime(881): at java.lang.Class.newInstance(Class.java:1409)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
макет
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<ProgressBar
android:id="@+id/the_progress"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.63" />
</LinearLayout>
TestingAsyncTask
//The class that starts the task
public class TestingAsyncTask extends ListActivity {
private ProgressBar bar = null;
private ArrayList<String> data = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.thetask);
bar = (ProgressBar) findViewById(R.id.the_progress);
data.add("1");
data.add("2");
data.add("3");
Log.d("create", ""+ data.size());
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data));
new TheTask(this).execute((Void) null);
}
public ArrayList<String> getData() {
return data;
}
}
thetask.Асинхронный файл Java
//The AsyncTask class
public class TheTask extends AsyncTask<Void, Void, List<String>> {
Context c;
public TheTask(Context c) {
this.c = c;
}
@Override
protected void onPreExecute() {
((TestingAsyncTask) c).findViewById(R.id.the_progress).setVisibility(View.VISIBLE);
}
@Override
protected List<String> doInBackground(Void... params) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<String> res= new ArrayList<String>();
res.add("a");
res.add("b");
res.add("c");
Log.d("doinbacground", ""+ res.size());
return res;
}
@Override
protected void onPostExecute(List<String> result) {
TestingAsyncTask activity = ((TestingAsyncTask) c);
activity.getData().clear();
activity.getData().addAll(result);
((ArrayAdapter)activity.getListAdapter()).notifyDataSetChanged();
((TestingAsyncTask) c).findViewById(R.id.the_progress).setVisibility(View.GONE);
}
}
Конец обновления 2
Обновление 1:
Description Resource Path Location Type
m_ProgressDialog cannot be resolved GrabUrlAsyncTask.java
line 81 Java Problem
The field Main.m_orders is not visible GrabUrlAsyncTask.javaline 79
Java Problem
The field Main.m_ProgressDialogis not visible GrabUrlAsyncTask.javaline
80 Java Problem
The method notifyDataSetChanged() is undefined for the type ListAdapter GrabUrlAsyncTask.java
line 82 Java Problem
Обновление:
@Override
protected void onPostExecute(List<Employee> result)
{
//showToast("You have to be connected to the internet for this application to work");
m_orders.clear();
m_orders.addAll(result);
progress.dismiss();
mContext.m_adapter.notifyDataSetChanged();
}
IЯ работал над приложением, и мне удалось заставить AsyncTask нормально работать, когда он является внутренним классом, что означает тот же main.java class
, и когда я посмотрел на код, и в него было так трудно попасть, и яЯ планирую провести рефакторинг кода, чтобы у AsyncTask был отдельный отдельный класс.
Я начал это делать, но потом возникло несколько вопросов, например, как мне показать ProgressDialog box or toastText
anbydoy может дать мне направление, пожалуйста?
вот мой код:
public class Main extends ListActivity{
@Override
public void onCreate(Bundle savedInstanceState)
{
............
.............
new taskDoSomething().execute();
} //
private class taskDoSomething extends AsyncTask<Void, Void, List<Employee>>
{
@Override
protected List<Surah> doInBackground(Void... params)
{
//do some stuffs...
try {
///
catch (Exception e)
{
//
}
}
protected void onProgressUpdate(Void... values)
{
super.onProgressUpdate(values);
m_ProgressDialog.dismiss();
}
protected void onPostExecute(List<Employee> result)
{
m_orders.clear();
m_orders.addAll(result);
m_ProgressDialog.dismiss();
m_adapter.notifyDataSetChanged();
}
}
}