Android:自定义ArrayList不';行不通
我从三天以来一直在研究这个问题。求求你,救命 我试图在AsynTask内部定制ArrayList,但不在乎,因为它在AsynTask外部也不起作用 首先,我使用了setListAdapter,但它对于我的类是未定义的,甚至我的类也扩展了ListActivity。然后,我尝试使用ListView setAdapter,但它总是返回nullpointerexception 这是我的第一个代码:Android:自定义ArrayList不';行不通,android,listview,Android,Listview,我从三天以来一直在研究这个问题。求求你,救命 我试图在AsynTask内部定制ArrayList,但不在乎,因为它在AsynTask外部也不起作用 首先,我使用了setListAdapter,但它对于我的类是未定义的,甚至我的类也扩展了ListActivity。然后,我尝试使用ListView setAdapter,但它总是返回nullpointerexception 这是我的第一个代码: package Comments; import java.util.ArrayList; import
package Comments;
import java.util.ArrayList;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ListView;
import android.widget.Toast;
import com.example.helloandroid.R;
import com.example.podcastq.ListActivity;
public class PrepareComments extends ListActivity {
static String titulo;
static String parentid;
static Context contexto;
static ArrayList<String> resultado;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.buscar_listview);
}
public PrepareComments(Context contexto) {
super();
PrepareComments.contexto=contexto;
}
public void SetParams(String titulo, String parentid) {
PrepareComments.titulo = titulo;
PrepareComments.parentid = parentid;
}
public void ShowComments() {
new AsyncTaskSearchName().execute(titulo, parentid);
}
private class AsyncTaskSearchName
extends
AsyncTask<String, String, SubmitResponseResult> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
try {
dialog = new ProgressDialog(PrepareComments.contexto);
dialog.setTitle(R.string.cargando);
dialog.setMessage(PrepareComments.contexto.getString(R.string.obtInfoServer));
dialog.setCancelable(false);
dialog.show();
} catch (final Exception e) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(PrepareComments.contexto, e.getMessage(),Toast.LENGTH_SHORT).show();
Log.e("ERROR", e.getStackTrace().toString());
}
});
}
}
@Override
protected SubmitResponseResult doInBackground(String... strings) {
JoomlaServices oc = new JoomlaServices();
try {
SubmitResponseResult sr = oc.getComments(PrepareComments.titulo);
PrepareComments.resultado = sr.getResult();
PrepareComments.parentid = sr.getId();
} catch (final Exception e) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(PrepareComments.contexto,PrepareComments.contexto.getString(R.string.connectionError), Toast.LENGTH_SHORT).show();
Log.e("ERROR", e.getCause().toString());
}
});
}
return null;
}
@Override
protected void onProgressUpdate(String... responses) {
runOnUiThread(new Runnable() {
public void run() {
try {
ListView lv = (ListView) findViewById(android.R.id.list); //NULLPOINTEREXCEPTION IN THIS LINE!!
ListViewSuggestionAdapter lvSuggestionAdapt = new ListViewSuggestionAdapter(
PrepareComments.contexto, R.layout.listview_item_left, PrepareComments.resultado);
lv.setAdapter(lvSuggestionAdapt);
} catch (Exception e) {
Log.i("MI_ERROR", e.getMessage());
}
}
});
}
@Override
protected void onPostExecute(final SubmitResponseResult result) {
runOnUiThread(new Runnable() {
public void run() {
try {
dialog.dismiss();
} catch (Exception e) {
Log.i("MI_ERROR", e.getMessage());
}
}
});
}
}
}
这是我的第二个代码:
package Comments;
import java.util.ArrayList;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ListView;
import android.widget.Toast;
import com.example.helloandroid.R;
import com.example.podcastq.ListActivity;
public class PrepareComments extends ListActivity {
static String titulo;
static String parentid;
static Context contexto;
static ArrayList<String> resultado;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.buscar_listview);
}
public PrepareComments(Context contexto) {
super();
PrepareComments.contexto=contexto;
}
public void SetParams(String titulo, String parentid) {
PrepareComments.titulo = titulo;
PrepareComments.parentid = parentid;
}
public void ShowComments() {
new AsyncTaskSearchName().execute(titulo, parentid);
}
private class AsyncTaskSearchName
extends
AsyncTask<String, String, SubmitResponseResult> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
try {
dialog = new ProgressDialog(PrepareComments.contexto);
dialog.setTitle(R.string.cargando);
dialog.setMessage(PrepareComments.contexto.getString(R.string.obtInfoServer));
dialog.setCancelable(false);
dialog.show();
} catch (final Exception e) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(PrepareComments.contexto, e.getMessage(),Toast.LENGTH_SHORT).show();
Log.e("ERROR", e.getStackTrace().toString());
}
});
}
}
@Override
protected SubmitResponseResult doInBackground(String... strings) {
JoomlaServices oc = new JoomlaServices();
try {
SubmitResponseResult sr = oc.getComments(PrepareComments.titulo);
PrepareComments.resultado = sr.getResult();
PrepareComments.parentid = sr.getId();
} catch (final Exception e) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(PrepareComments.contexto,PrepareComments.contexto.getString(R.string.connectionError), Toast.LENGTH_SHORT).show();
Log.e("ERROR", e.getCause().toString());
}
});
}
return null;
}
@Override
protected void onProgressUpdate(String... responses) {
runOnUiThread(new Runnable() {
public void run() {
try {
ListViewSuggestionAdapter lvSuggestionAdapt = new ListViewSuggestionAdapter(
PrepareComments.contexto, R.layout.listview_item_left, PrepareComments.resultado);
PrepareComments.setListAdapter(lvSuggestionAdapt); //UNDEFINED FUNCTION FOR PREPARECOMMENTS IN THIS LINE
} catch (Exception e) {
Log.i("MI_ERROR", e.getMessage());
}
}
});
}
@Override
protected void onPostExecute(final SubmitResponseResult result) {
runOnUiThread(new Runnable() {
public void run() {
try {
dialog.dismiss();
} catch (Exception e) {
Log.i("MI_ERROR", e.getMessage());
}
}
});
}
}
}
我对ListView的xml定义是:
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:clickable="false"
android:longClickable="false" >
</ListView>
使用
而不是
ListView lv = (ListView) findViewById(android.R.id.list);
使用onProgressUpdate中的ListView初始化lv
注意:无需在
onPreExecute
和onPostExecute
中使用runOnUiThread
因为这些方法在UI线程上调用,所以我们可以访问或更新UI元素,而无需使用runOnUiThread为什么要引用列表视图,因为您已经扩展了ListActivity,您可以使用getListView()设置适配器。setAdapter();我不知道为什么,但即使我扩展了ListActivity,我也不能使用ListActivity方法。使用getListView()时,它也会显示“undefined method:(它也会显示nullpointerexception。当我对这一行进行注释时,该异常会消失,因为我知道问题出在这一行:(@user1870231:在这一行中,u发出了以下问题:ListView lv=(ListView)PrepareComments.this.findViewById(android.id.list);您在这一行遇到了什么问题,因为这种语法在我的end@user1870231:其中是PrepareComments.java:141行代码
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:clickable="false"
android:longClickable="false" >
</ListView>
01-31 22:10:08.995: E/AndroidRuntime(283): FATAL EXCEPTION: main
01-31 22:10:08.995: E/AndroidRuntime(283): java.lang.NullPointerException
01-31 22:10:08.995: E/AndroidRuntime(283): at Comments.PrepareComments$AsyncTaskSearchName$3.run(PrepareComments.java:141)
01-31 22:10:08.995: E/AndroidRuntime(283): at android.os.Handler.handleCallback(Handler.java:587)
01-31 22:10:08.995: E/AndroidRuntime(283): at android.os.Handler.dispatchMessage(Handler.java:92)
01-31 22:10:08.995: E/AndroidRuntime(283): at android.os.Looper.loop(Looper.java:123)
01-31 22:10:08.995: E/AndroidRuntime(283): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-31 22:10:08.995: E/AndroidRuntime(283): at java.lang.reflect.Method.invokeNative(Native Method)
01-31 22:10:08.995: E/AndroidRuntime(283): at java.lang.reflect.Method.invoke(Method.java:521)
01-31 22:10:08.995: E/AndroidRuntime(283): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-31 22:10:08.995: E/AndroidRuntime(283): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-31 22:10:08.995: E/AndroidRuntime(283): at dalvik.system.NativeStart.main(Native Method)
ListView lv = (ListView)PrepareComments.this.findViewById(android.R.id.list);
ListView lv = (ListView) findViewById(android.R.id.list);