2017-01-03 3 views
0

Я пытаюсь закрыть приложение, если нет доступного интернет-соединения. Я знаю, что есть вопрос, который у меня уже есть, но я сделал то же самое, и кажется, что мое приложение отлично работает до регистрации, но после того, как я отредактировал текст в поле nickname, он выдает ошибку с нулевым указателем, если я это сделаю после открытия после редактирования текста. посмотрите:Закрытие приложения Если нет подключения к Интернету

Я зарегистрировался в моем приложении, и в ящике у меня есть ник, который редактируется, поэтому я сделал так:

pname = (EditText) findViewById(R.id.pname); 

     profimg.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       show(); 
      } 
     }); 

     pname.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       pname.setInputType(0x0000006); 
       pname.setCursorVisible(true); 

      } 
     }); 
     pname.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if(hasFocus){ 
        pname.setCursorVisible(false); 
       } 
       else{ 
        pname.setCursorVisible(false); 
       } 
      } 
     }); 

     pname.setOnEditorActionListener(new EditText.OnEditorActionListener() { 
      @Override 
      public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
       if (event!=null && event.getKeyCode() != KeyEvent.KEYCODE_ENTER || actionId != EditorInfo.IME_ACTION_DONE) { 
        return false; 
       } 
       else if(actionId==EditorInfo.IME_ACTION_DONE || event==null || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){ 

        pname.setCursorVisible(false); 
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(pname.getWindowToken(), 0); 
        return false; 
       } 
       return false; 
      } 
     }); 

pname.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       sp.edit().remove("personName").apply(); 
       name= s.toString(); 
       sp.edit().putString("personName",name).apply(); 
       try { 
        List<NameValuePair> params = new ArrayList<NameValuePair>(); 
        params.add(new BasicNameValuePair("nickname", name)); 
        params.add(new BasicNameValuePair("mobile", callNo)); 
        JSONObject json = jsonParser.makeHttpRequest(Config.URL_Info, "POST", 
          params); 
        int success = json.getInt(TAG_SUCCESS); 
        if (success == 1) { 
         Log.d("Status Updated", json.getString(TAG_MESSAGE)); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } 
     }); 
     if(path1) { 
      String value = sp.getString("personName", name); 
      pname.setText(value); 
     } 

ошибка находится где я устанавливаю текст. Я проверяю наличие соединения при запуске после setcontentview (макет), и функция сразу после метода onCreate.

Error Log:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONObject.getInt(java.lang.String)' on a null object reference                    
                      at .afterTextChanged(PlaceCallActivity.java:206) 
                      at android.widget.TextView.sendAfterTextChanged(TextView.java:7942) 
                      at android.widget.TextView.setText(TextView.java:4079) 
                      at android.widget.TextView.setText(TextView.java:3928) 
                      at 
+0

этот параметр текста выполняется с использованием общих предпочтений – SamH67

+1

так, где ваш журнал ошибок? – rafsanahmad007

+0

@ rafsanahmad007 посмотреть, что я знаю, что происходит, но не могу понять, как его решить :( – SamH67

ответ

1

вам нужно проверьте, является ли json переменной null или не

только если json переменная не нулевой продолжить дальнейшие шаги

@Override 
     public void afterTextChanged(Editable s) { 
      sp.edit().remove("personName").apply(); 
      name= s.toString(); 
      sp.edit().putString("personName",name).apply(); 
      try { 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("nickname", name)); 
       params.add(new BasicNameValuePair("mobile", callNo)); 
       JSONObject json = jsonParser.makeHttpRequest(Config.URL_Info, "POST", 
         params); 
       if(json!=null){ 
       int success = json.getInt(TAG_SUCCESS); 
       if (success == 1) { 
        Log.d("Status Updated", json.getString(TAG_MESSAGE)); 
       } 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    }); 
+0

безупречный Я не знаю, но Vygintas B сначала дал правильный ответ, ваш i Справа тоже, вот почему я поддерживаю Спасибо BTW :) – SamH67

+0

счастлив, если это вам помогло :) – Jayanth

+0

Извините. Ваш ответ был на 1 минуту раньше, его ответ был минут назад.Я соглашусь с твоей плохой:/ – SamH67

2

Это происходит потому, что jsonParser.makeHttpRequest(Config.URL_Info, "POST",params); возвращается нуль!

, следовательно,

int success = json.getInt(TAG_SUCCESS); 

дает java.lang.NullPointerException:

+0

Больше кода добавлено посмотреть и да, но как его решить :( – SamH67

+0

Если он дает вам null, это означает, что нет подключения к Интернету, поэтому вы можете закрыть приложение, но не json.getInt (TAG_SUCCESS), поскольку json равно null! – Tulsi

1

Похоже, ваш объект JSON является пустым

Проверьте, если оно не равно нулю, прежде чем использовать его

if(json != null){ 
    int success = json.getInt(TAG_SUCCESS); 
} 
else{ 
    Log.d("JSON", "NULL"); 
} 
+0

Спасибо, меня раздражает, я соглашусь на ваш ответ через 3 минуты :) – SamH67

+0

Спасибо за помощь :) – SamH67

+0

Happy to help :) Проверьте это, чтобы получить более полное представление об этой проблеме [Что такое исключение NullPointerException и как его исправить?] (http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –

1

вы должны проверить, имеется ли сеть, прежде чем сделать вызов httprequest

попробовать это;

public static boolean isNetworkAvailable(Activity activity) { 
    int[] networkTypes = {ConnectivityManager.TYPE_MOBILE, 
      ConnectivityManager.TYPE_WIFI}; 
    try { 
     ConnectivityManager connectivityManager = 
       (ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE); 
     for (int networkType : networkTypes) { 
      NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
      if (activeNetworkInfo != null && 
        activeNetworkInfo.getType() == networkType) 
       return true; 
     } 
    } catch (Exception e) { 
     return false; 
    } 
    return false; 
} 

проверка Интернет перед:

if(isNetworkAvailable(Mainactivity.this) 
    JSONObject json = jParser.makeHttpRequest(Config.URL_Info, "POST", 
         params); 

       try { 
        // Checking for SUCCESS TAG 
        if(json!=null){ 
        Log.d("RESPONSE ", json.toString()); 
        int success = json.getInt(TAG_SUCCESS); 

        if (success == 1) { 

        } else { 

        } 
       }else{ 


       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
+0

Да, это тоже правильно, но проверка json будет работать. Спасибо всем, кто отправил правильный ответ:) o – SamH67

+0

, если нет сетевого подключения ... нет смысла звонить httprequest..though – rafsanahmad007

+0

Да, я знаю, но нет интернет-соединения, поэтому звонок не будет выполнен, хотя ваш ответ выглядит более я буду использовать ваш, но я уже принял ответ. Спасибо большое за лучший подход :) – SamH67

Смежные вопросы