2016-07-11 4 views
-1

В следующем коде мой тост не отображается. Однако я получаю сообщение об ошибке: «RuntimeException: невозможно создать обработчик внутри потока, который не вызвал Looper.prepare()». Я попытался Add_City.this и getApplicationContextПочему мой тост не отображается

try { 
       BufferedReader reader = new BufferedReader(
         new InputStreamReader(is, "iso-8859-1"), 8); 
       StringBuilder sb = new StringBuilder(); 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       is.close(); 
       result = sb.toString(); 

       JSONObject json_data = new JSONObject(result); 
       code=(json_data.getInt("code")); 
       System.out.println(code); 
       if(code==1) 
       { 
        Toast.makeText(Add_City.this, "Inserted Successfully",Toast.LENGTH_SHORT).show(); 
       } 
       else 
       { 
        Toast.makeText(Add_City.this, "Sorry, City Already Available",Toast.LENGTH_LONG).show(); 
       } 
       Log.i("TAG", "Result Retrieved"); 
      } catch (Exception e) { 
       Log.i("TAG", e.toString()); 
      } 
+1

Может быть есть исключение при открытии потока или парсер JSON – phongvan

+1

Является System.out.println (код); печататься на консоли. Если это не так, ваше исполнение никогда не достигает этого фрагмента кода. Убедитесь, что Log.i («TAG», e.toString()); запускается в консоли. Если это так, у вас есть исключение. Исключите исключение, и вы должны получить свой тост. – Tony

+0

как я могу исправить? – AndroidBoy

ответ

0

Если вы получаете,

Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Я считаю, что вы вызываете свой тост внутри рабочего потока. Например, doInBackground() для AsyncTask. Тост должен быть вызван только в потоке пользовательского интерфейса.

Попробуйте это,

new AsyncTask<Integer, Void, Integer>() { 
     @Override 
     protected Integer doInBackground(Integer[] params) { 
      int code = 1; //your logic here. 
      return code; 
     } 

     @Override 
     protected void onPostExecute(Integer code) { 
      super.onPostExecute(code); 
      if(code==1) 
      { 
       Toast.makeText(Add_City.this, "Inserted Successfully",Toast.LENGTH_SHORT).show(); 
      } 
      else 
      { 
       Toast.makeText(Add_City.this, "Sorry, City Already Available",Toast.LENGTH_LONG).show(); 
      } 

     } 
    }.execute(); 
+0

да, тогда я получаю результат, поэтому – AndroidBoy

+0

@AndroidBoy, пожалуйста, подтвердите приведенный выше ответ, если найдете его удовлетворительным. – Tony

0

Моя догадка Либо вы получаете некоторое исключение или код для показа тост не является выполнение в основном потоке.

Попробуйте использовать этот

runOnUiThread(new Runnable() { 
      public void run() { 
      //Your toast here 
Toast.makeText(Add_City.this, "Sorry, City Already Available",Toast.LENGTH_LONG).show(); 
     } 
    }); 
+0

okay я могу отлаживать мое приложение, получая этот результат {"code": "0"} – AndroidBoy

+0

, тогда ваш код не выполняется в основном потоке – Nitesh

+0

как я могу предотвратить? – AndroidBoy

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

  • Нет связанных вопросов^_^