Android ListView上的位置始终为空

Android ListView上的位置始终为空,android,listview,position,Android,Listview,Position,我正在玩我在网上找到的一段代码,我正在尝试向listview添加一个单击侦听器,并获取项目的位置。然而,由于某些原因,该位置总是空的。这是我的密码: listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Log

我正在玩我在网上找到的一段代码,我正在尝试向listview添加一个单击侦听器,并获取项目的位置。然而,由于某些原因,该位置总是空的。这是我的密码:

    listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {


            Log.v("position", position); //POSITION IS ALWAYS EMPTY

            Intent i = new Intent(Example.this, ShowReleases.class);
            i.putExtra("id", position);
            startActivityForResult(i, ACTIVITY_CREATE);
        }
    });
listView.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
Log.v(“位置”,位置);//位置始终为空
意图i=新意图(例如.this,ShowReleases.class);
i、 putExtra(“id”,位置);
startActivityForResult(i,活动\创建);
}
});
我还添加了完整的代码,以防万一:

package com.example;

import java.util.ArrayList;

import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;

public class Example extends Activity {

    private static final int ACTIVITY_CREATE = 0;
    public Bitmap placeholder;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ArrayList<Tweet> tweets = getTweets("android", 1);

        ListView listView = (ListView) findViewById(R.id.ListViewId);
        listView.setAdapter(new TweetItemAdapter(this, R.layout.listitem, tweets));         

        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {


                Log.v("position", position); //POSITION IS ALWAYS EMPTY

                Intent i = new Intent(Example.this, ShowReleases.class);
                i.putExtra("id", position);
                startActivityForResult(i, ACTIVITY_CREATE);
            }
        });
    }


    public ArrayList<Tweet> getTweets(String searchTerm, int page) {
        String searchUrl = "http://search.twitter.com/search.json?q=@" + searchTerm;
        Log.v("searchUrl", searchUrl);

        ArrayList<Tweet> tweets = new ArrayList<Tweet>();

        HttpClient client = new  DefaultHttpClient();
        HttpGet get = new HttpGet(searchUrl);

        ResponseHandler<String> responseHandler = new BasicResponseHandler();

        String responseBody = null;
        try{
            responseBody = client.execute(get, responseHandler);
        }catch(Exception ex) {
            ex.printStackTrace();
        }

        JSONObject jsonObject = null;
        JSONParser parser=new JSONParser();

        try {
            Object obj = parser.parse(responseBody);
            jsonObject=(JSONObject)obj;

        }catch(Exception ex){
            Log.v("TEST","Exception1: " + ex.getMessage());
        }

        JSONArray arr = null;

        try {
            Object j = jsonObject.get("results");
            arr = (JSONArray)j;
        }catch(Exception ex){
            Toast.makeText(this, "JSON Error", Toast.LENGTH_LONG);
            Log.v("TEST","Exception2: " + ex.getMessage());
        }

        for(Object t : arr) {
            Tweet tweet = new Tweet(
                    ((JSONObject)t).get("from_user").toString(),
                    ((JSONObject)t).get("text").toString(),
                    ((JSONObject)t).get("profile_image_url").toString(),
                    ((JSONObject)t).get("id").toString()
                    );
            tweets.add(tweet);
        }

        return tweets;
    }   

    /** Classes **/

    public class Tweet {
        public String username;
        public String message;
        public String image_url;
        public String post_id;
        public Boolean usernameSet = false;
        public Boolean messageSet = false;
        public Boolean imageSet = false;
        public Bitmap avatar;

        public Tweet(String username, String message, String url, String post_id) {
            this.username = username;
            this.message = message;
            this.image_url = url;
            this.post_id = post_id;
        }
    }
}
package.com.example;
导入java.util.ArrayList;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.ResponseHandler;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.BasicResponseHandler;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.json.simple.JSONArray;
导入org.json.simple.JSONObject;
导入org.json.simple.parser.JSONParser;
导入android.app.Activity;
导入android.content.Intent;
导入android.graphics.Bitmap;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ListView;
导入android.widget.Toast;
公共类示例扩展了活动{
私有静态最终整数活动_CREATE=0;
公共位图占位符;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList tweets=getTweets(“android”,1);
ListView ListView=(ListView)findViewById(R.id.ListViewId);
setAdapter(新的TweetItemAdapter(this,R.layout.listitem,tweets));
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
Log.v(“位置”,位置);//位置始终为空
意图i=新意图(例如.this,ShowReleases.class);
i、 putExtra(“id”,位置);
startActivityForResult(i,活动\创建);
}
});
}
公共ArrayList getTweets(字符串搜索词,int页){
字符串搜索URL=”http://search.twitter.com/search.json?q=@“+搜索条件;
Log.v(“searchUrl”,searchUrl);
ArrayList tweets=新建ArrayList();
HttpClient=new DefaultHttpClient();
HttpGet=newhttpget(searchUrl);
ResponseHandler ResponseHandler=新BasicResponseHandler();
字符串responseBody=null;
试一试{
responseBody=client.execute(get,responseHandler);
}捕获(例外情况除外){
例如printStackTrace();
}
JSONObject JSONObject=null;
JSONParser=新的JSONParser();
试一试{
objectobj=parser.parse(responseBody);
jsonObject=(jsonObject)obj;
}捕获(例外情况除外){
Log.v(“测试”,“异常1:+ex.getMessage());
}
JSONArray arr=null;
试一试{
objectj=jsonObject.get(“结果”);
arr=(JSONArray)j;
}捕获(例外情况除外){
makeText(这是“JSON错误”,Toast.LENGTH_LONG);
Log.v(“测试”,“异常2:+ex.getMessage());
}
用于(对象t:arr){
Tweet=新Tweet(
((JSONObject)t).get(“来自用户”).toString(),
((JSONObject)t.get(“text”).toString(),
((JSONObject)t).get(“profile\u image\u url”).toString(),
((JSONObject)t.get(“id”).toString()
);
添加(tweet);
}
返回推文;
}   
/**班级**/
公共类推文{
公共字符串用户名;
公共字符串消息;
公共字符串图像的url;
公共字符串post_id;
公共布尔usernameSet=false;
公共布尔messageSet=false;
公共布尔图像集=false;
公共位图化身;
公共推文(字符串用户名、字符串消息、字符串url、字符串帖子id){
this.username=用户名;
this.message=消息;
this.image_url=url;
this.post\u id=post\u id;
}
}
}
提前谢谢
robert

首先检查列表大小,我在我的应用程序中使用了相同的东西,它工作正常。 在第一次活动中,我就这样通过了

 in.putExtra(id, position);
在第二次活动中,我这样写是为了得到数据

Bundle extras = getIntent().getExtras();
arg=extras.getInt(id);
System.out.println("Position:"+arg);

您可以看到构造函数AdapterView(上下文),所以使用get application Context。 或访问此链接


希望这能对你有所帮助

好的,我知道出了什么问题。我必须使用string.valueOf(position)将position变量转换为字符串; 以下是完整的代码:

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        Log.v("position", String.valueOf(position));
        Intent i = new Intent(Example.this, ShowReleases.class);
        i.putExtra("id", String.valueOf(position));
        startActivityForResult(i, ACTIVITY_CREATE);
    }
});
listView.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
Log.v(“位置”,String.valueOf(位置));
意图i=新意图(例如.this,ShowReleases.class);
i、 putExtra(“id”,String.valueOf(position));
startActivityForResult(i,活动\创建);
}
});

在listView.setAdapter中尝试“getApplicationContext()”而不是此选项。我认为它的适配器类的问题是它没有返回任何东西,我在logcat中看到的只是一个空字段,而不是一个数字。你真的收到了数组列表中的任何东西吗?你试过记录这些东西吗?你好,谢谢你的回复。我不熟悉安卓系统。你能再解释一下吗?如果你能发布一些代码让我理解那就太好了你好,你能再解释一下吗?我刚接触安卓系统,对它了解不多。你能给我一个电话吗