public class WishlistAdapter extends BaseAdapter {
private ProgressDialog progressDialog;
private LayoutInflater inflater;
private Context mContext;
private List<Response.UserinfoEntity> userinfo;
private static final String SERVER_ADDRESS = "http://www.bruhnancel.xyz/" ;
public interface OnItemClickListener {
public void onItemClicked(int position);
}
private OnItemClickListener listener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
public WishlistAdapter(Context mContext, List<Response.UserinfoEntity> userinfo) {
this.mContext = mContext;
this.userinfo = userinfo;
}
@Override
public int getCount() {
return userinfo.size();
}
@Override
public Object getItem(int position) {
return userinfo.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.wishlist_row_item, parent, false);
Response.UserinfoEntity item = (Response.UserinfoEntity) getItem(position);
TextView feedback_name_voted = (TextView)rowView.findViewById(R.id.feedback_name_voted);
// TextView title = (TextView)rowView.findViewById(R.id.title);
TextView comment_posted= (TextView)rowView.findViewById(R.id.comment_posted);
//TextView id = (TextView)rowView.findViewById(R.id.id);
final TextView like_total_number= (TextView)rowView.findViewById(R.id.like_total_number);
ImageView pic = (ImageView)rowView.findViewById(R.id.latest_promotion_pic);
Button delete_wishlist = (Button)rowView.findViewById(R.id.delete_wishlist);
delete_wishlist.setTag(position);
feedback_name_voted.setText("Name = " +item.getAd_title());
comment_posted.setText(item.getCom_name());
like_total_number.setText(item.getAd_id());
Picasso.with(mContext)
.load(item.getImg_link())
.into(pic);delete_wishlist.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new DeleteWishlist(like_total_number.getText().toString()).execute();
// for the better performance remove auto-boxing
listener.onItemClicked((Integer)v.getTag());
}
});
return rowView;
}private class DeleteWishlist extends AsyncTask<Void, Void, Void> {String delete;public DeleteWishlist( String delete )
{
this.delete = delete;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
//showProgressDialog("Please wait...", "Your message");
}
@Override
protected Void doInBackground(Void... params) {ArrayList<NameValuePair> dataToSend = new ArrayList<>();dataToSend.add(new BasicNameValuePair("ad_id", delete));try{
HttpParams httpRequestParams = getHttpRequestParams();
HttpClient client = new DefaultHttpClient(httpRequestParams);
HttpPost post = new HttpPost(SERVER_ADDRESS + "delete_wishlst.php");post.setEntity(new UrlEncodedFormEntity(dataToSend));
client.execute(post);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if(progressDialog != null && progressDialog.isShowing())
{
//progressDialog.dismiss();
Toast.makeText(mContext, "Ads successfully deleted", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext, MainActivity.class);
mContext.startActivity(intent);
}
}
}
private HttpParams getHttpRequestParams(){
HttpParams httpRequestParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpRequestParams, 1000 * 30);
HttpConnectionParams.setSoTimeout(httpRequestParams, 1000*30);
return httpRequestParams;
}
private void showProgressDialog(String title, String message)
{
progressDialog = new ProgressDialog(mContext);
progressDialog.setTitle("Please wait"); //title
progressDialog.setMessage("Uploading"); // message
progressDialog.setCancelable(false);
progressDialog.show();
}
}
а это мой php код
<?php
$con=mysqli_connect("localhost","xx","xx","xx");$ad_id = $_POST["ad_id"];$statement = mysqli_prepare($con, "DELETE FROM wish_list WHERE ad_id= ?");
mysqli_stmt_bind_param($statement, "s", $ad_id);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
mysqli_close($con);
?>
ошибка
01-22 16:23:46.435 18618-18618/com.example.user.mfpv2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.mfpv2, PID: 18618
java.lang.NullPointerException
at com.example.user.mfpv2.WishlistAdapter$1.onClick(WishlistAdapter.java:105)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18439)
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:5034)
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:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
at dalvik.system.NativeStart.main(Native Method)
Итак, что я делаю теперь, я пытаюсь отправить запрос в мою базу данных, отправив строку с помощью файла php.
Но это не похоже на работу. Это первый раз, когда я реализую это внутри класса адаптера.
Прежде всего, попробуйте использовать клиент MySQL, используя те же учетные данные, и выполните запрос как есть и проверьте, работает ли он или нет.
Во-вторых, измените «S» в mysqli_stmt_bind_param($statement, "s", $ad_id);
в «i», поскольку столбец идентификатора должен иметь тип integer, а не string, если ваша база данных не отличается.
Ознакомьтесь с руководством по PHP для более, http://php.net/manual/en/mysqli-stmt.bind-param.php
Если он все еще не работает, убедитесь, что PHP-скрипт действительно вызывается, проверьте журналы доступа вашего веб-сервера, а также журналы ошибок PHP на наличие подсказок.
Вы должны предоставить внешний интерфейс в лучшем случае.
public interface OnItemClickListener {
public void onItemClicked(int position);
}
и установить его на адаптер.
public class WishlistAdapter extends BaseAdapter {
// code
private OnItemClickListener listener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
}
И использовать в методе getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// your code
Button delete_wishlist = (Button)rowView.findViewById(R.id.delete_wishlist);
delete_wishlist.setTag(position);
// your code
delete_wishlist.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// for the better performance remove auto-boxing
listener.onItemClicked((Integer)v.getTag());
}
});
return rowView;
}
Вам нужно установить обратный вызов для адаптера.
// in activity or where you create an adapter
WishlistAdapter adapter = new WishlistAdapter(...);
adapter.setOnItemClickListener(new OnItemClickListener(
public void onItemClicked(int posisiton) {
// handle click
}
));