我目前正在研究一個應用程序,其中包含登錄時的朋友列表和用戶配置文件。當用戶點擊朋友列表中的朋友時,我希望他們被引導至該朋友的個人資料頁面。爲此,我一直試圖從列表視圖中單擊的用戶提取特定對象ID,然後將其傳遞到下一個活動,我使用它來運行所有用戶的查詢其他屬性(名稱,電子郵件,家鄉等)。我已經想出瞭如何通過意圖傳遞數據,但我從點擊列表項獲取用戶標識時遇到各種麻煩。我的onItemCLick代碼如下。從onListItemClick獲取分析對象ID
```
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
ParseObject item = (ParseObject) l.getAdapter().getItem(position);
String objectID = item.getObjectId().toString();
Intent intent = new Intent(getActivity(), FriendsProfileActivity.class);
intent.putExtra("ID", objectID);
startActivity(intent);
```
我也嘗試過這種東西沒有用的。
```
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
ParseObject item = (ParseObject) l.getAdapter().getItem(position);
item.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if(e == null) {
String objectID = item.getObjectId();
Log.e(TAG, objectID);
Intent intent = new Intent(getActivity(), FriendsProfileActivity.class);
intent.putExtra("ID", objectID);
startActivity(intent);
}
else {
Log.e(TAG, e.getMessage());
}
}
});
}
```
在這兩種情況下,應用程序崩潰,當我點擊列表視圖中的用戶。我怎樣才能成功地從用戶點擊的對象ID,並將其傳遞?
編輯:這是logcat錯誤。
Process: com.richluick.ribbit, PID: 2194 java.lang.ClassCastException: java.lang.String cannot be cast to com.parse.ParseObject at com.richluick.ribbit.FriendsFragment.onListItemClick(FriendsFragment.java:83) at android.support.v4.app.ListFragment$2.onItemClick(ListFragment.java:58) at android.widget.AdapterView.performItemClick(AdapterView.java:299) at android.widget.AbsListView.performItemClick(AbsListView.java:1113) at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904) at android.widget.AbsListView$3.run(AbsListView.java:3638) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method)
編輯:這是包括查詢和列表適配器活動的完整代碼。 package com.richluick.ribbit;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.parse.FindCallback;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.parse.ParseRelation;
import com.parse.ParseUser;
import com.parse.SaveCallback;
import java.util.List;
public class FriendsFragment extends android.support.v4.app.ListFragment {
public static final String TAG = FriendsFragment.class.getSimpleName();
protected List<ParseUser> mFriends;
protected ParseRelation<ParseUser> mFriendsRelation;
protected ParseUser mCurrentUser;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_friends, container, false);
return rootView;
}
@Override
public void onResume() {
super.onResume();
mCurrentUser = ParseUser.getCurrentUser();
mFriendsRelation = mCurrentUser.getRelation(ParseConstants.KEY_FRIENDS_RELATION);
getActivity().setProgressBarIndeterminateVisibility(true);
ParseQuery<ParseUser> query = mFriendsRelation.getQuery();
query.addAscendingOrder(ParseConstants.KEY_USERNAME);
query.findInBackground(new FindCallback<ParseUser>() {
@Override
public void done(List<ParseUser> friends, ParseException e) {
getActivity().setProgressBarIndeterminateVisibility(false);
if (e == null) {
mFriends = friends;
String[] usernames = new String[mFriends.size()];
int i = 0;
for (ParseUser user : mFriends) {
usernames[i] = user.getUsername();
i++;
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getListView().getContext(),
android.R.layout.simple_list_item_1, usernames);
setListAdapter(adapter);
}
else {
Log.e(TAG, e.getMessage());
AlertDialog.Builder builder = new AlertDialog.Builder(getListView().getContext());
builder.setTitle(R.string.error_title)
.setMessage(e.getMessage())
.setPositiveButton(android.R.string.ok, null);
AlertDialog dialog = builder.create();
dialog.show();
}
}
});
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
final ParseObject item = (ParseObject) l.getAdapter().getItem(position);
item.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if(e == null) {
String objectID = item.getObjectId();
Log.e(TAG, objectID);
Intent intent = new Intent(getActivity(), FriendsProfileActivity.class);
intent.putExtra("ID", objectID);
startActivity(intent);
}
else {
Log.e(TAG, e.getMessage());
}
}
});
}
}
請發佈您的logcat – MrEngineer13 2014-08-29 18:38:24
後Yout LogCat看到的exeption或錯誤。 – 2014-08-29 19:21:41
請在活動中發佈其餘代碼 - 即,查詢並加載列表視圖的代碼。這有助於理解你的問題 - logcat錯誤似乎意味着適配器中的內容是以字符串開始的,而不是ParseObjects – user2163298 2014-08-29 21:50:19