0
I have an api made in Laravel that returns a json, but I have problems reading in Android Studio. If I put another test url as for example String urlApi = "https://blockchain.info/ticker"; I can read.
package com.example.projeto_pet;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private Button botaoRecuperar;
private TextView textoResultado;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    botaoRecuperar = findViewById(R.id.buttonRecuperar);
    textoResultado = findViewById(R.id.textResultado);
    botaoRecuperar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            MyTask task = new MyTask();
            //String urlApi = "https://blockchain.info/ticker";
            String urlApi = "http://localhost:8080/projeto-pet/api/public/api/v1/pets";
            //String cep = "01310100";
            //String urlCep = "https://viacep.com.br/ws/" + cep + "/json/";
            task.execute(urlApi);
        }
    });
}
class MyTask extends AsyncTask<String, Void, String>{
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected String doInBackground(String... strings) {
        String stringUrl = strings[0];
        InputStream inputStream = null;
        InputStreamReader inputStreamReader = null;
        StringBuffer buffer = null;
        try {
            URL url = new URL(stringUrl);
            HttpURLConnection conexao = (HttpURLConnection) url.openConnection();
            //recupera os dados do json em bytes
            inputStream = conexao.getInputStream(); //Logcat indica erro nesta linha 70
            //lê os dados em bytes e decodifica para caracteres
            inputStreamReader = new InputStreamReader(inputStream);
            //faz a leitura dos caracteres
            BufferedReader reader = new BufferedReader(inputStreamReader);
            buffer = new StringBuffer();
            //ler linha a linha
            String linha = "";
            //só vai rodar enquanto tiver linhas
            while ((linha = reader.readLine()) != null){
                buffer.append(linha);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return buffer.toString();
    }
    @Override
    protected void onPostExecute(String resultado) {
        super.onPostExecute(resultado);
        //String objetoValor = null;
        //String valorMoeda = null;
        String nomePet = null;
        try {
            //Teste moeda
            //JSONObject jsonObject = new JSONObject(resultado);
            //objetoValor = jsonObject.getString("BRL");
            //JSONObject jsonObjectReal = new JSONObject(objetoValor);
            //valorMoeda = jsonObjectReal.getString("last");
            //Teste pets
            JSONObject jsonObject = new JSONObject(resultado);
            nomePet = jsonObject.getString("nome_pet");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        textoResultado.setText(nomePet);
    }
}
}
Logcat:
2020-05-28 19:30:29.487 29978-29978/? I/ple.projeto_pe: Late-enabling -Xcheck:jni
2020-05-28 19:30:29.865 29978-29978/com.example.projeto_pet W/ple.projeto_pe: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection)
2020-05-28 19:30:29.867 29978-29978/com.example.projeto_pet W/ple.projeto_pe: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
2020-05-28 19:30:29.915 29978-29978/com.example.projeto_pet D/OpenGLRenderer: Skia GL Pipeline
2020-05-28 19:30:29.968 29978-30005/com.example.projeto_pet I/Adreno: QUALCOMM build                   : 94a5458, I21281c58c8
    Build Date                       : 12/18/18
    OpenGL ES Shader Compiler Version: EV031.25.03.02
    Local Branch                     : 
    Remote Branch                    : refs/tags/AU_LINUX_ANDROID_LA.UM.7.6.2.R1.09.00.00.463.046
    Remote Branch                    : NONE
    Reconstruct Branch               : NOTHING
2020-05-28 19:30:29.968 29978-30005/com.example.projeto_pet I/Adreno: Build Config                     : S L 6.0.7 AArch64
2020-05-28 19:30:29.972 29978-30005/com.example.projeto_pet I/Adreno: PFP: 0x005ff112, ME: 0x005ff066
2020-05-28 19:30:29.977 29978-30005/com.example.projeto_pet I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
2020-05-28 19:30:29.977 29978-30005/com.example.projeto_pet I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasHDRDisplay retrieved: 0
2020-05-28 19:30:29.977 29978-30005/com.example.projeto_pet I/OpenGLRenderer: Initialized EGL, version 1.4
2020-05-28 19:30:29.978 29978-30005/com.example.projeto_pet D/OpenGLRenderer: Swap behavior 2
2020-05-28 19:30:33.024 29978-30014/com.example.projeto_pet D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2020-05-28 19:30:33.032 29978-30014/com.example.projeto_pet W/System.err: java.io.IOException: Cleartext HTTP traffic to localhost not permitted
2020-05-28 19:30:33.033 29978-30014/com.example.projeto_pet W/System.err:     at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
2020-05-28 19:30:33.033 29978-30014/com.example.projeto_pet W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
2020-05-28 19:30:33.034 29978-30014/com.example.projeto_pet W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
2020-05-28 19:30:33.034 29978-30014/com.example.projeto_pet W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:244)
2020-05-28 19:30:33.034 29978-30014/com.example.projeto_pet W/System.err:     at com.example.projeto_pet.MainActivity$MyTask.doInBackground(MainActivity.java:70)
2020-05-28 19:30:33.035 29978-30014/com.example.projeto_pet W/System.err:     at com.example.projeto_pet.MainActivity$MyTask.doInBackground(MainActivity.java:51)
2020-05-28 19:30:33.035 29978-30014/com.example.projeto_pet W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:333)
2020-05-28 19:30:33.035 29978-30014/com.example.projeto_pet W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2020-05-28 19:30:33.035 29978-30014/com.example.projeto_pet W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
2020-05-28 19:30:33.035 29978-30014/com.example.projeto_pet W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2020-05-28 19:30:33.036 29978-30014/com.example.projeto_pet W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2020-05-28 19:30:33.036 29978-30014/com.example.projeto_pet W/System.err:     at java.lang.Thread.run(Thread.java:764)
2020-05-28 19:30:33.042 29978-30014/com.example.projeto_pet E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: com.example.projeto_pet, PID: 29978
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:354)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.StringBuffer.toString()' on a null object reference
        at com.example.projeto_pet.MainActivity$MyTask.doInBackground(MainActivity.java:90)
        at com.example.projeto_pet.MainActivity$MyTask.doInBackground(MainActivity.java:51)
        at android.os.AsyncTask$2.call(AsyncTask.java:333)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:764) 
2020-05-28 19:30:33.082 29978-30014/com.example.projeto_pet I/Process: Sending signal. PID: 29978 SIG: 9
json:
// 20200528165139
// http://localhost:8080/projeto-pet/api/public/api/v1/pets
[
  {
    "current_page": 1,
    "data": [
      {
        "id": 20,
        "nome_pet": "Jubileu",
        "descricao_pet": "Vira lata, marrom, com coleira vermelha",
        "user_id": 1,
        "created_at": "2020-05-26 04:27:37",
        "updated_at": "2020-05-26 04:27:37",
        "fotos": [
          {
            "id": 9,
            "caminho_foto": "C:\\xampp\\tmp\\php7C41.tmp",
            "thumb": 0,
            "pet_id": 20,
            "created_at": "2020-05-26 04:27:38",
            "updated_at": "2020-05-26 04:27:38"
          }
        ]
      },
      {
        "id": 21,
        "nome_pet": "Rubito",
        "descricao_pet": "Vira lata, marrom, com coleira vermelha",
        "user_id": 1,
        "created_at": "2020-05-26 04:34:29",
        "updated_at": "2020-05-26 04:34:29",
        "fotos": [
          {
            "id": 10,
            "caminho_foto": "imagens/ide2o77DsH3cSWZHBfh2Ttgqm2lbHwp83qetnbgL.jpeg",
            "thumb": 0,
            "pet_id": 21,
            "created_at": "2020-05-26 04:34:29",
            "updated_at": "2020-05-26 04:34:29"
          }
        ]
      },
      {
        "id": 22,
        "nome_pet": "Juca",
        "descricao_pet": "Vira lata, marrom, com coleira vermelha",
        "user_id": 1,
        "created_at": "2020-05-26 04:40:38",
        "updated_at": "2020-05-26 04:40:38",
        "fotos": [
          {
            "id": 11,
            "caminho_foto": "imagens/HeWwHaLdyD86Q8gDOQu6caMupuZT8C1Qkz3CMeiA.jpeg",
            "thumb": 0,
            "pet_id": 22,
            "created_at": "2020-05-26 04:40:38",
            "updated_at": "2020-05-26 04:40:38"
          }
        ]
      },
      {
        "id": 23,
        "nome_pet": "Curuca",
        "descricao_pet": "Vira lata, marrom, com coleira vermelha",
        "user_id": 1,
        "created_at": "2020-05-26 14:13:45",
        "updated_at": "2020-05-26 14:13:45",
        "fotos": [
          {
            "id": 12,
            "caminho_foto": "imagens/NQ9ycBtWEQXLBsQdmFdasV5GRkFfbJeMe4keikIN.jpeg",
            "thumb": 0,
            "pet_id": 23,
            "created_at": "2020-05-26 14:13:46",
            "updated_at": "2020-05-26 14:13:46"
          }
        ]
      },
      {
        "id": 24,
        "nome_pet": "Chiquinho",
        "descricao_pet": "Vira lata, marrom, com coleira vermelha",
        "user_id": 1,
        "created_at": "2020-05-26 14:15:17",
        "updated_at": "2020-05-26 14:15:17",
        "fotos": [
          {
            "id": 13,
            "caminho_foto": "imagens/eouJQ1SFZfmLUrgC2XobwDzXmGmS1atSiYCBEhTG.jpeg",
            "thumb": 0,
            "pet_id": 24,
            "created_at": "2020-05-26 14:15:17",
            "updated_at": "2020-05-26 14:15:17"
          }
        ]
      },
      {
        "id": 25,
        "nome_pet": "Xiriba",
        "descricao_pet": "Macho, amarelo, atende por xibi",
        "user_id": 1,
        "created_at": "2020-05-26 14:20:36",
        "updated_at": "2020-05-26 14:50:32",
        "fotos": [
          {
            "id": 14,
            "caminho_foto": "imagens/buW3oHaQi87ehtbfvx2eWn7PjapOnA1br1aci4ac.jpeg",
            "thumb": 0,
            "pet_id": 25,
            "created_at": "2020-05-26 14:20:36",
            "updated_at": "2020-05-26 14:20:36"
          }
        ]
      }
    ],
    "first_page_url": "http://localhost:8080/projeto-pet/api/public/api/v1/pets?page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "http://localhost:8080/projeto-pet/api/public/api/v1/pets?page=1",
    "next_page_url": null,
    "path": "http://localhost:8080/projeto-pet/api/public/api/v1/pets",
    "per_page": "10",
    "prev_page_url": null,
    "to": 6,
    "total": 6
  }
]
The error does not seem to be in the line you indicated, but rather in
buffer.toString(), trying to use.toString()innull:Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.StringBuffer.toString()' on a null object reference– Rafael Tavares
Place a log inside the loop(while) to check the line value.
– Murillo Comino
2020-05-28 19:30:33.032 29978-30014/com.example.projeto_pet W/System.err: java.io.IOException: Cleartext HTTP traffic to localhost not permittedThe problem. New versions of android does not allow http.– Murillo Comino
@Murillocomino I think the problem might be this, because I did a test using a url https "https://blockchain.info/ticker" and it worked. Then I took the json from that same url and generated a json on my http://localhost for testing, and it didn’t work. I saw that some people managed to solve by adding android:usesCleartextTraffic="true" on Androidmanifest.xml, but it didn’t work for me.
– Barraviera
@Barraviera tries to make the solution 2 that I passed in the answer.
– Murillo Comino