【发布时间】:2014-02-23 10:56:29
【问题描述】:
我试图在列表视图上的“OnClick”事件中取回一个对象(在我的情况下它是一个墙纸对象),我试图通过两种方式来管理它,但每次我得到:“@987654322 @"。
第一个解决方案:Wallpaper obj = (Wallpaper) listV.getItemAtPosition(position);
第二个解决方案:Wallpaper obj = (Wallpaper ) adapter.getItem(position);
我在 MainActivity 中的代码:
ListView listV = null;
LazyAdapter adapter;
public final static String EXTRA_MESSAGE = "com.project.samplelist.MESSAGE";
public String message = null;
public Wallpaper wallpaperMessage = null;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final JsonDownloaderTask task = new JsonDownloaderTask(this);
task.execute(url); //download json data and set to wallpaper object and set Lazyadapter
listV = (ListView) findViewById(R.id.list);
/*adapter = new LazyAdapter(this, wallpList);
listV.setAdapter(adapter);*/
listV.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Wallpaper obj = (Wallpaper) listV.getItemAtPosition(position); // get wallpaper object on click
message = obj.getFullscreen(); // create message
wallpaperMessage = obj;
Intent wallpaperFullScreenActivity = new Intent(MainActivity.this, FullscreenActivity.class);
wallpaperFullScreenActivity.putExtra(EXTRA_MESSAGE, message);
wallpaperFullScreenActivity.putExtra("id", obj.getId());
startActivity(wallpaperFullScreenActivity);
}
});
}
在我的其他一个项目中,我使用了第一个解决方案,并且效果很好。我看不出有什么区别。。
编辑:
我的任务中设置的适配器已完成:
public void jsonTaskComplete(JSONArray data)
{
ArrayList<Wallpaper> wallpapersList = new ArrayList<Wallpaper>();
Wallpaper w = null;
String id = "";
String preview = "";
String fullscreen = "";
String tags = "";
String size = "";
try {
for(int indexData = 0; indexData < data.length(); indexData++)
{
w = new Wallpaper();
// Fetching data
id = data.getJSONObject(indexData).getString("id");
preview = data.getJSONObject(indexData).getString("preview");
fullscreen = data.getJSONObject(indexData).getString("fullscreen");
tags = data.getJSONObject(indexData).getString("tags");
size = data.getJSONObject(indexData).getString("size");
// Setting data
w.setId(id);
w.setPreview(preview);
w.setFullscreen(fullscreen);
w.setSize(size);
w.setTags(tags);
// Adding result as a wallpaper object in the list
wallpapersList.add(w);
}
} catch (JSONException e) {
e.printStackTrace();
}
listV.setAdapter(new LazyAdapter(this, wallpapersList));
}
编辑:
我没有任何堆栈跟踪.. 只是我在同一行在调试模式下按了 F6 两次:Wallpaper obj = (Wallpaper) listV.getItemAtPosition(position);
我得到了 InvocationTargetException.class(找不到源)和这个:
//Compiled from InvocationTargetException.java (version 1.5 : 49.0, super bit)
public class java.lang.reflect.InvocationTargetException extends java.lang.ReflectiveOperationException {
// Method descriptor #8 ()V
// Stack: 3, Locals: 1
protected InvocationTargetException();
0 aload_0 [this]
1 invokespecial java.lang.ReflectiveOperationException() [1]
4 new java.lang.RuntimeException [2]
7 dup
8 ldc <String "Stub!"> [3]
10 invokespecial java.lang.RuntimeException(java.lang.String) [4]
13 athrow
Line numbers:
[pc: 0, line: 5]
Local variable table:
[pc: 0, pc: 14] local: this index: 0 type: java.lang.reflect.InvocationTargetException
// Method descriptor #14 (Ljava/lang/Throwable;)V
// Stack: 3, Locals: 2
public InvocationTargetException(java.lang.Throwable exception);
0 aload_0 [this]
1 invokespecial java.lang.ReflectiveOperationException() [1]
4 new java.lang.RuntimeException [2]
7 dup
8 ldc <String "Stub!"> [3]
10 invokespecial java.lang.RuntimeException(java.lang.String) [4]
13 athrow
Line numbers:
[pc: 0, line: 6]
Local variable table:
[pc: 0, pc: 14] local: this index: 0 type: java.lang.reflect.InvocationTargetException
[pc: 0, pc: 14] local: exception index: 1 type: java.lang.Throwable
// Method descriptor #17 (Ljava/lang/Throwable;Ljava/lang/String;)V
// Stack: 3, Locals: 3
public InvocationTargetException(java.lang.Throwable exception, java.lang.String detailMessage);
0 aload_0 [this]
1 invokespecial java.lang.ReflectiveOperationException() [1]
4 new java.lang.RuntimeException [2]
7 dup
8 ldc <String "Stub!"> [3]
10 invokespecial java.lang.RuntimeException(java.lang.String) [4]
13 athrow
Line numbers:
[pc: 0, line: 7]
Local variable table:
[pc: 0, pc: 14] local: this index: 0 type: java.lang.reflect.InvocationTargetException
[pc: 0, pc: 14] local: exception index: 1 type: java.lang.Throwable
[pc: 0, pc: 14] local: detailMessage index: 2 type: java.lang.String
// Method descriptor #21 ()Ljava/lang/Throwable;
// Stack: 3, Locals: 1
public java.lang.Throwable getTargetException();
0 new java.lang.RuntimeException [2]
3 dup
4 ldc <String "Stub!"> [3]
6 invokespecial java.lang.RuntimeException(java.lang.String) [4]
9 athrow
Line numbers:
[pc: 0, line: 8]
Local variable table:
[pc: 0, pc: 10] local: this index: 0 type: java.lang.reflect.InvocationTargetException
// Method descriptor #21 ()Ljava/lang/Throwable;
// Stack: 3, Locals: 1
public java.lang.Throwable getCause();
0 new java.lang.RuntimeException [2]
3 dup
4 ldc <String "Stub!"> [3]
6 invokespecial java.lang.RuntimeException(java.lang.String) [4]
9 athrow
Line numbers:
[pc: 0, line: 9]
Local variable table:
[pc: 0, pc: 10] local: this index: 0 type: java.lang.reflect.InvocationTargetException
}
【问题讨论】:
-
您没有设置任何适配器。显然 getItemAtPosition 在这里不起作用。
-
我在我的 task.execut(url) 中管理这个,正如我在这一行的评论中所说的那样。最后完成我的任务:listV.setAdapter(new LazyAdapter(this, wallpapersList));
-
发布完整的堆栈跟踪
-
你的 Logcat 说你的 AndroidHttpClient 有问题。见链接解决:stackoverflow.com/questions/9393426/…
-
@aegean 是的,对不起,我刚刚在您回答之前修复了它,现在我没有错误..