Android 如何使asynctask赢得';如果json没有';你没变吗?

Android 如何使asynctask赢得';如果json没有';你没变吗?,android,json,android-asynctask,Android,Json,Android Asynctask,下面是调用asynctask并生成通知的代码 package apps.skripsi.petvac.navigationmenu; import android.app.Activity; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.ProgressDialog; import android.content.Context; import andr

下面是调用asynctask并生成通知的代码

package apps.skripsi.petvac.navigationmenu;


import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.app.NotificationCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.client.ClientProtocolException;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import apps.skripsi.petvac.MainMenu.MainMenuAdapter;
import apps.skripsi.petvac.R;
import apps.skripsi.petvac.Services.RegisterUserClass;
import apps.skripsi.petvac.addpetdata.MainAddPetDataActivity;
import apps.skripsi.petvac.notification.NotificationButtonReceiver;
import apps.skripsi.petvac.parser.JSONParser;
import apps.skripsi.petvac.petinformation.MainPetInformation;
import apps.skripsi.petvac.preference.PreferencesHelper;

/**
 * Created by widi on 9/9/2015.
 */
public class MainMenu extends Fragment {

    FloatingActionButton FAB;
    JSONObject json;
    JSONObject jsonObject;
    PreferencesHelper pref;
    ProgressDialog loading;
    ImageView iv;
    ProgressDialog progress;
    NotificationManager mNotificationManager;
    SwipeRefreshLayout mSwipeRefreshLayout = null;
    ListView list;
    TextView tv;
    int days;
    String result, result2;
    String sisaWaktu, sisa_hari;
    String ID_USER, ID_BINATANG, NAMA_BINATANG, JENIS_BINATANG, FOTO_BINATANG, RAS_BINATANG, TANGGAL_VAKSIN, NAMA_VAKSIN, STATUS_VAKSIN, ID_DATA_WAKTU_VAKSINASI;

    ArrayList<HashMap<String, String>> listBinatang = new ArrayList<HashMap<String, String>>();

    public static String id_user = "id_user";
    public static String id_binatang = "id_binatang";
    public static String nama_binatang = "nama_binatang";
    public static String jenis_binatang = "jenis_binatang";
    public static String foto_binatang = "foto_binatang";
    public static String ras_binatang = "ras_binatang";
    public static String tanggal_vaksin = "tanggal_vaksin";
    public static String nama_vaksin = "nama_vaksin";
    public static String jumlah_hari;
    public static String status_vaksin = "status_vaksin";
    public static String id_data_waktu_vaksinasi = "id_data_waktu_vaksinasi";

    private Context context;

    private static String url = "http://petvaccination.hol.es/api/data_menu_utama_vaksinasi.php";

    private static String urlgambar = "http://petvaccination.hol.es/imgupload/uploadedimages/";

    private static String delete_url = "http://petvaccination.hol.es/UserRegistration/delete_binatang.php";


    public MainMenu() {
    }

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

        FAB = (FloatingActionButton) v.findViewById(R.id.buttonTambahData);

        mSwipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.activity_main_swipe_refresh_layout);


        pref = new PreferencesHelper(getActivity().getBaseContext());

        tv = (TextView) v.findViewById(R.id.textView);

        list = (ListView) v.findViewById(R.id.list_hewan);

        FAB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent a = new Intent(getActivity(), MainAddPetDataActivity.class);
                startActivity(a);
            }
        });


        try {
            new DataBinatangOperation().execute(url).get(20000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }


        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                    new DataBinatangOperation().execute(url);
                    updateList();
            }
        });


        return v;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        context = activity;
    }

    private void updateList() {

        if (mSwipeRefreshLayout.isRefreshing()) {
            mSwipeRefreshLayout.setRefreshing(false);
        }
    }


    private class DataBinatangOperation extends AsyncTask<String, Void, String> {

        MainMenuAdapter adapter = new MainMenuAdapter(MainMenu.this,
                listBinatang);

        @Override
        protected String doInBackground(String... params) {

            JSONArray json;
            try {
                result = JSONParser.getPage(url);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return result;

        }


        @Override
        protected void onPostExecute(String result) {

            tv.setVisibility(View.GONE);
            result2 = pref.getPreferences("json");

            try {
                System.out.print("result = " + result);
                json = new JSONObject(result);
                progress.dismiss();

                JSONArray objek = json.getJSONArray("data_vaksinasi_menu");

                for (int i = 0; i < objek.length(); i++) {

                    JSONObject jo = objek.getJSONObject(i);

                    ID_USER = jo.getString(id_user);
                    ID_BINATANG = jo.getString(id_binatang);
                    NAMA_BINATANG = jo.getString(nama_binatang);
                    JENIS_BINATANG = jo.getString(jenis_binatang);
                    FOTO_BINATANG = jo.getString(foto_binatang);
                    RAS_BINATANG = jo.getString(ras_binatang);
                    ID_DATA_WAKTU_VAKSINASI = jo.getString(id_data_waktu_vaksinasi);
                    TANGGAL_VAKSIN = jo.getString(tanggal_vaksin);
                    NAMA_VAKSIN = jo.getString(nama_vaksin);
                    STATUS_VAKSIN = jo.getString(status_vaksin);

                    if (pref.getPreferences("ID").equals(ID_USER)) {

                        if (jo.isNull(id_data_waktu_vaksinasi) && jo.isNull(tanggal_vaksin) && jo.isNull(nama_vaksin) && jo.isNull(status_vaksin)) {
                            NAMA_VAKSIN = "belum ada data";
                            sisaWaktu = "";
                        } else {

                            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());

                            Calendar waktuSekarang = Calendar.getInstance();

                            Date date1 = waktuSekarang.getTime();
                            Date date2 = new Date();

                            date2 = formatter.parse(TANGGAL_VAKSIN);

                            if (date2.after(date1)) {
                                days = Days.daysBetween(new DateTime(date1), new DateTime(date2)).getDays();
                                if (days > 7 && days <= 30) {
                                    int weeks = days / 7;
                                    sisa_hari = String.valueOf(days);
                                    sisaWaktu = String.valueOf(weeks) + " minggu";
                                } else if (days > 30 && days <= 365) {
                                    int months = days / 30;
                                    sisa_hari = String.valueOf(days);
                                    sisaWaktu = String.valueOf(months) + " bulan";
                                } else if (days > 365) {
                                    int years = days / 365;
                                    sisa_hari = String.valueOf(days);
                                    sisaWaktu = String.valueOf(years) + " tahun";
                                } else {
                                    sisaWaktu = String.valueOf(days) + " hari";
                                    if (days <= 5) {
                                        sisa_hari = String.valueOf(days);
                                        Log.d("result = ", result);
                                        Log.d("result 2 = ", result2);
                                        createSimpleNotification(context, NAMA_BINATANG, sisa_hari, ID_BINATANG);
                                    }
                                }
                            } else if (date2.before(date1)) {
                                days = Days.daysBetween(new DateTime(date2), new DateTime(date1)).getDays();
                                if (days == 0) {
                                    sisaWaktu = "sekarang";
                                    sisa_hari = String.valueOf(days);
                                    if (STATUS_VAKSIN.equals("belum")) {
                                            createButtonNotification(context, NAMA_BINATANG, sisaWaktu, sisa_hari, ID_BINATANG, ID_DATA_WAKTU_VAKSINASI);
                                    }/*else{
                                        return;
                                    }*/
                                } else {
                                    sisaWaktu = "lewat " + String.valueOf(days) + " hari";
                                    sisa_hari = String.valueOf(days);
                                    if (STATUS_VAKSIN.equals("belum")) {
                                            createButtonNotification(context, NAMA_BINATANG, sisaWaktu, sisa_hari, ID_BINATANG, ID_DATA_WAKTU_VAKSINASI);
                                    }
                                }
                            }

                        }

                    }

                    HashMap<String, String> map = new HashMap<String, String>();

                    map.put(id_binatang, ID_BINATANG);
                    map.put(nama_binatang, NAMA_BINATANG);
                    map.put(jenis_binatang, JENIS_BINATANG);
                    map.put(foto_binatang, urlgambar + FOTO_BINATANG);
                    map.put(ras_binatang, RAS_BINATANG);
                    map.put(tanggal_vaksin, sisaWaktu);
                    map.put(jumlah_hari, sisa_hari);
                    map.put(nama_vaksin, NAMA_VAKSIN);


                    if (pref.getPreferences("ID").equals(ID_USER)) {
                        listBinatang.add(map);

                        System.out.println("hasil list : " + String.valueOf(listBinatang));
                    }


                }

                if (String.valueOf(listBinatang).equals("[]")) {
                    tv.setVisibility(View.VISIBLE);
                }


                System.out.println("adapter : " + String.valueOf(adapter));
                list.setAdapter(adapter);


                list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                                            int position, long idx) {

                        HashMap<String, String> ambilid = new HashMap<String, String>();
                        ambilid = listBinatang.get(position);

                        Toast.makeText(getActivity(), "pindah halaman", Toast.LENGTH_SHORT).show();

                        Intent a = new Intent(getActivity(), MainPetInformation.class);

                        Log.d("sisa ", ambilid.get(MainMenu.jumlah_hari));

                        a.putExtra("IDB", ambilid.get(MainMenu.id_binatang));
                        a.putExtra("IDVAK", ambilid.get(MainMenu.id_data_waktu_vaksinasi));
                        a.putExtra("SW", ambilid.get(MainMenu.jumlah_hari));

                        startActivity(a);
                    }

                });

                list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                    @Override
                    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

                        HashMap<String, String> ambilid = new HashMap<String, String>();
                        ambilid = listBinatang.get(position);
                        final String idbin = ambilid.get(MainMenu.id_binatang);
                        Log.d("idb ", idbin);

                        AlertDialog.Builder ab = new AlertDialog.Builder(getActivity());
                        ab.setTitle("Delete Binatang");
                        ab.setMessage("Anda Yakin?");
                        ab.setPositiveButton("Ya", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                delete(idbin);
                                new DataBinatangOperation().execute(url);
                            }
                        });
                        ab.setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        });
                        ab.show();


                        return true;
                    }
                });

            } catch (JSONException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (ParseException e) {
                e.printStackTrace();
            }

        }

        @Override
        protected void onPreExecute() {
            listBinatang.clear();
            adapter.notifyDataSetChanged();
            pref.savePreferences("json", result);
            progress = ProgressDialog.show(getActivity(), "Please Wait",
                    "Loading Data", true);

        }

        @Override
        protected void onProgressUpdate(Void... values) {
        }
    }

    public void createSimpleNotification(Context context, String nama_binatang, String sisa_hari, String id) {

        Intent resultIntent = new Intent(context, MainPetInformation.class);
        resultIntent.putExtra("IDB", id);
        resultIntent.putExtra("SW", sisa_hari);
        resultIntent.putExtra("IDVAK", "");

        mNotificationManager = (NotificationManager) context.getSystemService(getActivity().NOTIFICATION_SERVICE);

        int IntID = Integer.valueOf(id);

        Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        PendingIntent resultPending = PendingIntent.getActivity(context, IntID, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.logo)
                .setContentTitle(nama_binatang)
                .setContentText(sisa_hari + " hari lagi")
                .setSound(uri)
                .setContentIntent(resultPending);

        mNotificationManager.notify(IntID, mBuilder.build());
    }

    public void createButtonNotification(Context context, String nama_binatang, String sisa_waktu, String sisa_hari, String idb, String idv) {

        Log.d("idb", idb);

        int IntID = Integer.valueOf(idb);
        int sisaHari = Integer.valueOf(sisa_hari);
        String sisa_hari2;

        Intent intent = new Intent(getActivity(), MainPetInformation.class);

        intent.putExtra("IDB", idb);
        intent.putExtra("IDVAK", idv);
        if (sisaHari > 0) {
            sisa_hari2 = "-" + sisa_hari;
            intent.putExtra("SW", sisa_hari2);
        } else if (sisaHari == 0) {
            intent.putExtra("SW", sisa_hari);
        }

        Intent cancelIntent = new Intent(getActivity(), NotificationButtonReceiver.class);
        cancelIntent.putExtra("notifID", IntID);

        mNotificationManager = (NotificationManager) context.getSystemService(getActivity().NOTIFICATION_SERVICE);

        Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);


        PendingIntent IntentAccept = PendingIntent.getActivity(getActivity(), IntID, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        PendingIntent IntentCancel = PendingIntent.getActivity(getActivity(), IntID, cancelIntent, 0);

        // Building the notifcation
        NotificationCompat.Builder nBuilder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.logo)
                .setContentTitle(nama_binatang)
                .setContentText(sisa_waktu)
                .setSound(uri)
                .addAction(R.drawable.accept, "Accept", IntentAccept)
                .addAction(R.drawable.cancel, "Cancel", IntentCancel);

        nBuilder.setAutoCancel(true);
        mNotificationManager.notify(IntID, nBuilder.build());


    }

    private void delete(String idbinatang) {
        class RegisterUser extends AsyncTask<String, Void, String> {
            RegisterUserClass ruc = new RegisterUserClass();


            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(getActivity(), "Please Wait", null, true, true);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
            }

            @Override
            protected String doInBackground(String... params) {

                HashMap<String, String> data = new HashMap<String, String>();
                data.put("id_binatang", params[0]);

                String result = ruc.sendPostRequest(delete_url, data);

                Log.d("result ", result);
                return result;
            }
        }

        RegisterUser ru = new RegisterUser();
        ru.execute(idbinatang);

    }

}
package apps.skripsi.petvac.navigationmenu;
导入android.app.Activity;
导入android.app.NotificationManager;
导入android.app.pendingent;
导入android.app.ProgressDialog;
导入android.content.Context;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.media.ringtonemager;
导入android.net.Uri;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.annotation.Nullable;
导入android.support.design.widget.FloatingActionButton;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.NotificationCompat;
导入android.support.v4.widget.swiperFreshLayout;
导入android.support.v7.app.AlertDialog;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入org.apache.http.client.ClientProtocolException;
导入org.joda.time.DateTime;
导入org.joda.time.Days;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.IOException;
导入java.text.DateFormat;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Calendar;
导入java.util.Date;
导入java.util.HashMap;
导入java.util.Locale;
导入java.util.concurrent.ExecutionException;
导入java.util.concurrent.TimeUnit;
导入java.util.concurrent.TimeoutException;
导入apps.skripsi.petvac.MainMenu.MainMenuAdapter;
导入apps.skripsi.petvac.R;
导入apps.skripsi.petvac.Services.RegisterUserClass;
导入apps.skripsi.petvac.addpetdata.MainAddPetDataActivity;
导入apps.skripsi.petvac.notification.NotificationButtonReceiver;
导入apps.skripsi.petvac.parser.JSONParser;
导入apps.skripsi.petvac.petinfo.MainPetInformation;
导入apps.skripsi.petvac.preference.PreferencesHelper;
/**
*widi于2015年9月9日创建。
*/
公共类主菜单扩展了片段{
浮动操作按钮;
JSONObject json;
JSONObject JSONObject;
优先权;优先权;
对话加载;
ImageView iv;
进程对话进程;
通知经理通知经理;
SwipeRefreshLayout mSwipeRefreshLayout=null;
列表视图列表;
文本视图电视;
国际日;
字符串结果,result2;
串sisaWaktu,sisa_hari;
字符串ID_USER、ID_BINATANG、NAMA_BINATANG、JENIS_BINATANG、FOTO_BINATANG、RAS_BINATANG、TANGGAL_VAKSIN、NAMA_VAKSIN、STATUS_VAKSIN、ID_DATA_WAKTU VAKSINASI;
ArrayList listBinatang=新的ArrayList();
公共静态字符串id\u user=“id\u user”;
公共静态字符串id\u binatang=“id\u binatang”;
公共静态字符串nama_binatang=“nama_binatang”;
公共静态字符串jenis_binatang=“jenis_binatang”;
公共静态字符串foto_binatang=“foto_binatang”;
公共静态字符串ras_binatang=“ras_binatang”;
公共静态字符串tanggal\u vaksin=“tanggal\u vaksin”;
公共静态字符串nama_vaksin=“nama_vaksin”;
公共静态字符串jumlah_hari;
公共静态字符串status\u vaksin=“status\u vaksin”;
公共静态字符串id\u data\u waktu\u vaksinasi=“id\u data\u waktu\u vaksinasi”;
私人语境;
专用静态字符串url=”http://petvaccination.hol.es/api/data_menu_utama_vaksinasi.php";
私有静态字符串urlgambar=”http://petvaccination.hol.es/imgupload/uploadedimages/";
私有静态字符串delete_url=”http://petvaccination.hol.es/UserRegistration/delete_binatang.php";
公共主菜单(){
}
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.main\u菜单\u碎片,容器,错误);
FAB=(浮动操作按钮)v.findViewById(R.id.buttonTambahData);
mSwipeRefreshLayout=(SwipeRefreshLayout)v.findViewById(R.id.activity\u main\u swipe\u refresh\u layout);
pref=新首选项Shelper(getActivity().getBaseContext());
tv=(TextView)v.findViewById(R.id.TextView);
list=(ListView)v.findViewById(R.id.list_-hewan);
FAB.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意图a=新意图(getActivity(),MainAddPetDataActivity.class);
星触觉(a);
}
});
试一试{
新建DataBinatangOperation().execute(url).get(20000,TimeUnit.millizes);
}捕捉(中断异常e){
e、 printStackTrace();
}捕获(执行例外){
e、 printStackTrace();
}捕获(超时异常e){
e、 printStackTrace();
}
mSwipeRefreshLayout.setOnRefreshListener(新的SwipeRefreshLayout.OnRefreshListener()){
@凌驾
公共void onRefresh(){
新建DataBinatangOperation().execute(url);
updateList();
}
});
返回v;
}
@凌驾
公共事务主任(活动){
超级转速计(活动);
上下文=活动;
}
私有void updateList(){
if(mSwipeRefreshLayout.isRefreshing()){
mSwipeRefreshLayout.setRefresh(false);
}
}
私有类DataBinatangOperation扩展了AsyncTask{
MainMenuAdapter=新的MainMenuAdapter(MainMenu.this,
(汤显明),;
@凌驾
受保护的字符串doInBackground(字符串…参数){
JSONArray-json;
试一试{
result=JSONParser.getPage(url);
}捕获(客户端协议例外e)