ошибка json в файле logcat в задаче aysnc

#android #json

#Android #json

Вопрос:

 public class MainActivity extends AppCompatActivity {
    public TextView textView;public Button clickMe;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        clickMe = (Button)findViewById(R.id.clickMe);
        clickMe.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            new JsonClass().execute("www.webbanknepal.com/app/services.php");
        }});
    }



    class JsonClass extends AsyncTask<String,Void,String> {
        @Override
        protected String doInBackground(String... params) {
            HttpURLConnection connection=null;
            BufferedReader reader=null;
            try {
                URL url= new URL(params[0]);
                connection=(HttpURLConnection)url.openConnection();
                connection.connect();
                InputStream stream=connection.getInputStream();
                InputStreamReader isr= new InputStreamReader(stream);
                reader =new BufferedReader(isr);
                StringBuffer buffer=new StringBuffer();
                String line="";
                while((line=reader.readLine())!=null)
                {
                    buffer.append(line);

                }
                return buffer.toString();



            } catch (MalformedURLException e) {
               e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();

            } finally {
                if(connection!=null){ connection.disconnect();}
                try {
                    if(reader!=null){ reader.close();};
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            textView= (TextView)findViewById(R.id.textView);
            textView.setText(s.toString());
        }

    }
  

Это МОЙ ВОПРОС

я получаю приложение, к сожалению, близко, вот мой файл журнала cat ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ

Произошла ошибка при выполнении doInBackground() в.done(AsyncTask.java:300) в java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) в java.util.concurrent.Исключение FutureTask.setException(FutureTask.java:222) в java.util.concurrent.FutureTask.run(FutureTask.java:242) на android.os.AsyncTask$SerialExecutor$ 1.запустите(AsyncTask.java:231) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1112) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) на java.lang.Thread.run(Thread.java:841) Вызвано: java.lang.Исключение NullPointerException в com.example.shailendra.fulljson.MainActivity $ JsonClass.doInBackground(MainActivity.java:81) в com.example.shailendra.fulljson.MainActivity $ JsonClass.doInBackground(MainActivity.java: 47) в android.os.AsyncTask $ 2.вызов (AsyncTask.java:288) в java.util.concurrent.FutureTask.run(FutureTask.java:237) на android.os.AsyncTask$SerialExecutor$ 1.запустите(AsyncTask.java:231) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1112) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) на java.lang.Thread.run(Thread.java:841)

Комментарии:

1. Попробуйте вернуть значение null; чтобы вернуть «»;

2. нет, он выдает ошибку

3. попробуйте отладить код и убедитесь, что вы получаете успешный ответ от сервера, а «буфер» содержит данные

4. какая 81-я строка в MainActivity?

Ответ №1:

Я немного изменил ваш код, и он работает нормально. Проверьте код….

     public class MainActivity extends AppCompatActivity { public    TextView textView;public Button clickMe;@Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
             clickMe= (Button)findViewById(R.id.clickMe);clickMe.setOnClickListener(
             new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                    new JsonClass().execute("http://www.webbanknepal.com/app/services.php");
                   }
             });
    }


   class JsonClass extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {
        HttpURLConnection connection = null;
        BufferedReader reader = null;
        try {
            URL url = new URL(params[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream stream = connection.getInputStream();
            InputStreamReader isr = new InputStreamReader(stream);
            reader = new BufferedReader(isr);
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);

            }
            return buffer.toString();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            if (connection != null) {
                connection.disconnect();
            }
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(s.toString());
    }

   }
  

}

Комментарии:

1. хорошо, ваш код работает нормально, но можете ли вы сказать мне, где вы изменились и в чем причина изменения

2. if(reader!=null){ reader.close();}; reader.close(); вот в чем проблема

Ответ №2:

Вы передаете нулевую строку для onPostExecute (строки).

Сделайте это:

 public class MainActivity extends AppCompatActivity             
 {           
   public TextView textView;          
   public Button clickMe;         
   public static String s;        
   @Override    
   protected void onCreate(Bundle savedInstanceState) 
   {      
    super.onCreate(savedInstanceState);      
    ...                                 
    ...  
    new JsonClass().execute("www.webbanknepal.com/app/services.php",null,s);      
    }});       
   }
   class JsonClass extends AsyncTask<String,Void,String>
   {  @Override
     protected String doInBackground(String... params) {
     ...
     ...
     String line="";
            while((line=reader.readLine())!=null)
            {
                buffer.append(line);

            }
            s=buffer.toString();
            return s;
  

Комментарии:

1. та же проблема java.lang.RuntimeException: произошла ошибка при выполнении doInBackground()