2016-01-28 64 views
0

我想刪除一個從ListView中點擊的解析對象。我想要刪除的對象是selectedPost。如何從Parse Cloud中刪除解析對象?

錯誤: 顯示java.lang.NullPointerException:嘗試上的空對象引用

MyPostsFragment調用虛擬方法bolts.Task rang.afterflight.Post.deleteInBackground()':

public class MyPostsFragment extends Fragment { 

ListView lv; 
ArrayAdapter adapter; 
ArrayList<Post> postArrayList; 
Post selectedPost; 
DeleteCallback callback; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_myposts, container, false); 

    lv = (ListView) rootView.findViewById(R.id.mypost_listview); 
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // clicked on item show post 
      selectedPost = postArrayList.get(position); 
      Bundle bundle = new Bundle(); 
      bundle.putParcelable("data", (Parcelable) selectedPost); 
      FragmentManager fm = getActivity().getFragmentManager(); 
      Fragment fragment = new rang.afterflight.fragments.SelectedPostFragment(); 
      fragment.setArguments(bundle); 
      fm.beginTransaction().replace(R.id.content_main, fragment).commit(); 
     } 

    }); 

    lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      showDialog(); 
      return true; 
     } 
    }); 

    return rootView; 
} 




@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ownPost(); 

    callback = new DeleteCallback() { 
     @Override 
     public void done(ParseException e) { 
      selectedPost.saveInBackground(); 
     } 
    }; 


    setHasOptionsMenu(true); 


} 

public void ownPost(){ 
    ParseQuery<ParseObject> query = ParseQuery.getQuery("Post"); 

    ParseUser currentUser = ParseUser.getCurrentUser(); 
    String user = currentUser.getUsername(); 

    postArrayList = new ArrayList<Post>(); 

    query.whereEqualTo("username", user); 

    query.findInBackground(new FindCallback<ParseObject>() { 
     public void done(List<ParseObject> postList, ParseException e) { 
      if (e == null) { 
       for (ParseObject object : postList) { 
        Post newPost = new Post(); 
        newPost.setAirportParse((String) object.get("airport")); 
        newPost.setDateParse((String) object.get("date")); 
        newPost.setTimeParse((String) object.get("time")); 
        newPost.setPersonsParse((String) object.get("persons")); 
        newPost.setAddressParse((String) object.get("address")); 
        newPost.setFlightnrParse((String) object.get("flightnr")); 
        newPost.setUsername((String) object.get("username")); 
        newPost.setImageFile((ParseFile) object.get("profilepic")); 
        newPost.setContactParse((String) object.get("contact")); 

        postArrayList.add(newPost); 
       } 

       adapter = new ListViewAdapter(getActivity(), R.layout.item_cardview, postArrayList); 
       lv.setAdapter(adapter); 
      } 
     } 
    }); 
} 

private void showDialog() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater factory = LayoutInflater.from(getActivity()); 
    final View view = factory.inflate(R.layout.dialog_deletepost, null); 

    builder.setView(view); 
    builder.setCancelable(false); 
    builder.setTitle("Are you sure you want to delete?"); 
    builder.setPositiveButton("GO BACK", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      dialog.dismiss(); 
     } 
    }); 

    builder.setNeutralButton("DELETE POST", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      selectedPost.deleteInBackground(); 
      dialog.dismiss(); 
     } 
    }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 

}

回答

1

好像selectedPost爲空。

當你長時間點擊一個單元格時,你應該得到selectedPost就像你通常點擊它時一樣。

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      selectedPost = postArrayList.get(position); 
      showDialog(); 
      return true; 
     } 
    }); 
+0

無法解析符號「位置」 – Rang92

+0

這是行不通的@ Claud25 – Rang92

+0

@ Rang92什麼錯誤?位置來自'onItemLongClick(AdapterView parent,View view,int position,long id)'所以我不明白 – Claud