0

我在我的 android 应用程序中添加通知属性并在 google play 中更新。我的手机(Nexus 4)工作正常。但是有些手机会出现这个错误

java.lang.NullPointerException
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
at org.json.JSONTokener.nextValue(JSONTokener.java:94)
at org.json.JSONObject.<init>(JSONObject.java:154)
at org.json.JSONObject.<init>(JSONObject.java:171)
at com.medyasef.dernek.tjod.GetJson.json_to_last_id(GetJson.java:66)
at com.medyasef.dernek.tjod.PostService.onHandleIntent(PostService.java:42)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.os.HandlerThread.run(HandlerThread.java:60)

我不明白为什么?

PostService.java

public class PostService extends IntentService {

    private List<Categoryicerikler> get_last_id;
    private final String SON_ID_NUMARASI    = "son_id_numarasi";
    private final String UYARI              = "preferences_sonucu";
    private Context mContext                = this;

    public PostService() {
        super("PostService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.i(UYARI, "Service Başladı");

        if(checkInternetConnection()){
            InternetConnection internetcon  = new InternetConnection(34);
            String json_result              = internetcon.get_json_data();
            try {
                get_last_id = GetJson.json_to_last_id(json_result);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            /*
            Telefona kaydedilen son id numarasını kontrol ediyoruz.
            Eğer daha önce internete bir veri kaydedilmediyse boş veri döner.
             */
            SharedPreferences preferences   = getSharedPreferences("last_id_int", MODE_PRIVATE);
            int last_shared_id              = preferences.getInt(SON_ID_NUMARASI, 0);

            if(last_shared_id == 0) {
                SharedPreferences.Editor editor = preferences.edit();
                editor.putInt(SON_ID_NUMARASI,get_last_id.get(0).getCategory_post_ID());
                editor.apply();
                Log.i(UYARI,"Sonuc Bos Dondu Preferences kaydetti");
            }
            else if(last_shared_id != get_last_id.get(0).getCategory_post_ID()){
                Log.i(UYARI,"Sonuçlar Eşit Değil Notification Gosterilecek");

                notification_show(get_last_id.get(0).getCategory_posttitle(), get_last_id.get(0).getCategory_post_content());

                SharedPreferences.Editor editor = preferences.edit();
                editor.putInt(SON_ID_NUMARASI, get_last_id.get(0).getCategory_post_ID());
                editor.apply();
            }
            else {
                Log.i(UYARI,"Sonuclar Eşit Hiç Birşey Yapılmadı.");
            }

        }
    }

    private boolean checkInternetConnection() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        if (cm.getActiveNetworkInfo() != null
                && cm.getActiveNetworkInfo().isAvailable()
                && cm.getActiveNetworkInfo().isConnected()) {
            return true;
        }
        else {
            Log.v("Internet", "Internet Connection Not Present");
            return false;
        } }

    private void notification_show(String post_title,String post_content){

        int requestID = (int) System.currentTimeMillis();
        Intent reminder_intent = new Intent(mContext, SinglePage.class);
        reminder_intent.putExtra(Categories.EXTRA_CODE,post_content);
        PendingIntent intent_single = PendingIntent.getActivity(this,requestID,reminder_intent,0);

        /*
        Setticker bildirim ilk geldiğinde üstte gözükecek yazıdır.
        SetContentTitle Bildirim penceresi aşağı kaydırıldığında gösterilecek başlıktır.
        setContentText Bildirim penceresi aşağı kaydırıldığında gösterilecek başlığın altında ki içeriktir.
        setSmallIcon Gösterilecek resimdir.
         */
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Notification noti = new Notification.Builder(this)
                .setTicker("TJOD Yeni Duyuru")
                .setContentTitle(post_title)
                .setContentText("Duyuruyu Görmek İçin Tıklayınız.")
                .setSmallIcon(R.drawable.ic_launcher)
                .setShowWhen(false)
                .setContentIntent(intent_single)
                .build();
        noti.flags |= Notification.FLAG_AUTO_CANCEL;
        notificationManager.notify(0, noti);
    }
}

json_to_last_id 函数(在 GetJson.java 中)

public static List<Categoryicerikler> json_to_last_id(String data) throws JSONException {

        content_list = new ArrayList<Categoryicerikler>();

        /*
        Gelen String veriyi çekiyoruz ve dizilere girmeye başlıyoruz.
         */
        JSONObject jObj     = new JSONObject(data);
        JSONArray posts     = jObj.getJSONArray("posts");

        JSONObject post_id  = posts.getJSONObject(0);
        JSONObject title    = posts.getJSONObject(0);
        JSONObject content  = posts.getJSONObject(0);

        content_list.add(new Categoryicerikler(
                title.getString("title"),
                content.getString("content"),
                post_id.getInt("ID")
        ));
        return content_list;
    }
4

1 回答 1

1

JSONTokener.nextCleanInternal当 json 输入字符串为空时会抛出。检查 的空data参数json_to_last_id

于 2013-11-05T15:33:51.610 回答