【发布时间】:2014-12-12 07:56:28
【问题描述】:
我希望当我单击特定行时,应通过意图操作将文本复制并粘贴到另一个活动。我已经实现了代码,但有一件事导致空指针异常。请帮助我。
//@Override
// listening to single list item on click
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// selected item
TextView text = (TextView) view.findViewById(R.id.title);
String lst_txt = text.getText().toString().trim();
System.out.println("Display text"+lst_txt );
// Launching new Activity on selecting single List Item
Intent i = new Intent(MainActivity.this, SingleListItem.class);
// sending data to new activity
i.putExtra("product",lst_txt );
startActivity(i);
}
});
//这里TextView text = (TextView) view.findViewById(R.id.title);导致空指针异常
日志猫
12-12 07:41:25.459: E/AndroidRuntime(2326): FATAL EXCEPTION: main
12-12 07:41:25.459: E/AndroidRuntime(2326): java.lang.NullPointerException
12-12 07:41:25.459: E/AndroidRuntime(2326): at com.example.TwitterTutorial.MainActivity$1.onItemClick(MainActivity.java:70)
12-12 07:41:25.459: E/AndroidRuntime(2326): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
12-12 07:41:25.459: E/AndroidRuntime(2326): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
12-12 07:41:25.459: E/AndroidRuntime(2326): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
12-12 07:41:25.459: E/AndroidRuntime(2326): at android.widget.AbsListView$1.run(AbsListView.java:3423)
12-12 07:41:25.459: E/AndroidRuntime(2326): at android.os.Handler.handleCallback(Handler.java:725)
12-12 07:41:25.459: E/AndroidRuntime(2326): at android.os.Handler.dispatchMessage(Handler.java:92)
12-12 07:41:25.459: E/AndroidRuntime(2326): at android.os.Looper.loop(Looper.java:137)
12-12 07:41:25.459: E/AndroidRuntime(2326): at android.app.ActivityThread.main(ActivityThread.java:5039)
12-12 07:41:25.459: E/AndroidRuntime(2326): at java.lang.reflect.Method.invokeNative(Native Method)
12-12 07:41:25.459: E/AndroidRuntime(2326): at java.lang.reflect.Method.invoke(Method.java:511)
12-12 07:41:25.459: E/AndroidRuntime(2326): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-12 07:41:25.459: E/AndroidRuntime(2326): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-12 07:41:25.459: E/AndroidRuntime(2326): at dalvik.system.NativeStart.main(Native Method)
主要活动
public class MainActivity extends ListActivity {
private ListActivity activity;
final static String ScreenName = "bane";
final static String LOG_TAG = "rnc";
ListView listview;
TextView text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.twit_list);
// listView.setTextFilterEnabled(true);
activity = this;
listview = this.getListView();
downloadTweets();
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if(view != null && view.getContext() != null){
// selected item
//text = (TextView) view.findViewById(R.id.title);
// String lst_txt = text.getText().toString().trim();
String product = ((TextView) view.findViewById(R.id.targetmonths)).getText().toString();
//System.out.println("Text"+lst_txt );
// Launching new Activity on selecting single List Item
Intent i = new Intent(MainActivity.this, SingleListItem.class);
// sending data to new activity
i.putExtra("product",product );
startActivity(i);
}
}
// download twitter timeline after first checking to see if there is a network connection
public void downloadTweets() {
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
new DownloadTwitterTask().execute(ScreenName);
} else {
Log.v(LOG_TAG, "No network connection available.");
}
}
// Uses an AsyncTask to download a Twitter user's timeline
private class DownloadTwitterTask extends AsyncTask<String, Void, String> {
final static String CONSUMER_KEY = "3GsPNkJacZedXIwoajycHzkkU";
final static String CONSUMER_SECRET = "kCsPxxjsfrwba4cSZWW0tmXvaIcWT6r5Gb2HD5VX3RDYoDGRfXG";
final static String TwitterTokenURL = "https://api.twitter.com/oauth2/token";
final static String TwitterStreamURL = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=";
@Override
protected String doInBackground(String... screenNames) {
String result = null;
if (screenNames.length > 0) {
result = getTwitterStream(screenNames[0]);
}
return result;
}
// onPostExecute convert the JSON results into a Twitter object (which is an Array list of tweets
@Override
protected void onPostExecute(String result) {
Twitter twits = jsonToTwitter(result);
// lets write the results to the console as well
for (Tweet tweet : twits) {
Log.i(LOG_TAG, tweet.getText());
}
// send the tweets to the adapter for rendering
ArrayAdapter<Tweet> adapter = new ArrayAdapter<Tweet>(activity, android.R.layout.simple_list_item_1, twits);
setListAdapter(adapter);
}
// converts a string of JSON data into a Twitter object
private Twitter jsonToTwitter(String result) {
Twitter twits = null;
if (result != null && result.length() > 0) {
try {
Gson gson = new Gson();
twits = gson.fromJson(result, Twitter.class);
} catch (IllegalStateException ex) {
// just eat the exception
}
}
return twits;
}
// convert a JSON authentication object into an Authenticated object
private Authenticated jsonToAuthenticated(String rawAuthorization) {
Authenticated auth = null;
if (rawAuthorization != null && rawAuthorization.length() > 0) {
try {
Gson gson = new Gson();
auth = gson.fromJson(rawAuthorization, Authenticated.class);
} catch (IllegalStateException ex) {
// just eat the exception
}
}
return auth;
}
private String getResponseBody(HttpRequestBase request) {
StringBuilder sb = new StringBuilder();
try {
DefaultHttpClient httpClient = new DefaultHttpClient(new BasicHttpParams());
HttpResponse response = httpClient.execute(request);
int statusCode = response.getStatusLine().getStatusCode();
String reason = response.getStatusLine().getReasonPhrase();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
String line = null;
while ((line = bReader.readLine()) != null) {
sb.append(line);
}
} else {
sb.append(reason);
}
} catch (UnsupportedEncodingException ex) {
} catch (ClientProtocolException ex1) {
} catch (IOException ex2) {
}
return sb.toString();
}
private String getTwitterStream(String screenName) {
String results = null;
// Step 1: Encode consumer key and secret
try {
// URL encode the consumer key and secret
String urlApiKey = URLEncoder.encode(CONSUMER_KEY, "UTF-8");
String urlApiSecret = URLEncoder.encode(CONSUMER_SECRET, "UTF-8");
// Concatenate the encoded consumer key, a colon character, and the
// encoded consumer secret
String combined = urlApiKey + ":" + urlApiSecret;
// Base64 encode the string
String base64Encoded = Base64.encodeToString(combined.getBytes(), Base64.NO_WRAP);
// Step 2: Obtain a bearer token
HttpPost httpPost = new HttpPost(TwitterTokenURL);
httpPost.setHeader("Authorization", "Basic " + base64Encoded);
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
httpPost.setEntity(new StringEntity("grant_type=client_credentials"));
String rawAuthorization = getResponseBody(httpPost);
Authenticated auth = jsonToAuthenticated(rawAuthorization);
// Applications should verify that the value associated with the
// token_type key of the returned object is bearer
if (auth != null && auth.token_type.equals("bearer")) {
// Step 3: Authenticate API requests with bearer token
HttpGet httpGet = new HttpGet(TwitterStreamURL + screenName);
// construct a normal HTTPS request and include an Authorization
// header with the value of Bearer <>
httpGet.setHeader("Authorization", "Bearer " + auth.access_token);
httpGet.setHeader("Content-Type", "application/json");
// update the results with the body of the response
results = getResponseBody(httpGet);
}
} catch (UnsupportedEncodingException ex) {
} catch (IllegalStateException ex1) {
}
return results;
}
}
}
用于显示列表视图的xml文件
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
数据适配器
public class DataAdapter extends BaseAdapter {
Context mContext;
private LayoutInflater mInflater;
String targetmonths;
//String img;
//String targetamount;
String[] month;
//String[] year;
//String[] amount;
public DataAdapter(Context c, String[] month) {
this.month = month;
//this.year = year;
//this.amount = amount;
mContext = c;
mInflater = LayoutInflater.from(c);
}
public int getCount() {
return month.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.customgrid, parent, false);
holder = new ViewHolder();
holder.month = (TextView) convertView
.findViewById(R.id.targetmonths);
//holder.img = (ImageView) convertView.findViewById(R.id.image_id);
// holder.amount = (TextView) convertView.findViewById(R.id.targetamount);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
try {
holder.month.setText(month[position]);
// holder.img.setImageResource(img[position]);
// holder.amount.setText(amount[position]);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return convertView;
}
static class ViewHolder {
TextView month;
// ImageView img;
// TextView year, amount;
}
}
自定义网格
<?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="vertical" >
<TextView
android:id="@+id/targetmonths"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:layout_weight="1"
android:gravity="left|center"
android:paddingBottom="5sp"
android:paddingLeft="10sp"
android:paddingRight="5sp"
android:paddingTop="5sp"
android:text="hello"
android:textColor="#ffffcc"
android:textSize="16sp">
</TextView>
</LinearLayout>
【问题讨论】:
-
你可以试试 onListItemClick 监听器
-
@sakir 不,它不适合代码
-
它在 Eclipse 中给出红线 OnListItemClick 无法解析为类型
-
您正在尝试覆盖 onListItemClick 方法中的 onCreate 方法
-
如果是这样的话把它放在create方法之外
标签: android listview onitemclicklistener