Проблема с использованием httpclient для получения данных - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу использовать httpclient в моем приложении для Android. Я знаю, что эта библиотека давно устарела, но я хочу использовать ее по некоторым причинам. Когда я пишу код для извлечения данных JSON с URL-адреса, эмулятор извлекает меня так: image

это мой код:

public class FirstExampleActivity extends AppCompatActivity {

TextView tv ;
public static final String URL = "http://androidtestapp.gigfa.com/mysite/guitarist.json";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first_example);

    tv = findViewById(R.id.tv);
}

@Override
public boolean onCreateOptionsMenu(final Menu menu) {

    MenuItem item = menu.add("GET");
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {

            Thread thread = new Thread(new Runnable() {

                Handler handler = new Handler(){

                    @Override
                    public void handleMessage(Message msg) {
                        super.handleMessage(msg);
                        String content = msg.getData().getString("content");
                        tv.setText(content);
                    }
                };

                @Override
                public void run() {
                    String content = getData();
                    Message message = new Message();
                    Bundle bundle = new Bundle();
                    bundle.putString("content",content);
                    message.setData(bundle);
                    handler.sendMessage(message);
                }
            });
            thread.start();
            return false;
        }
    });
    return super.onCreateOptionsMenu(menu);
}

private String getData() {

    HttpClient client = new DefaultHttpClient();
    HttpGet method = new HttpGet(URL);
    try{
        HttpResponse response = client.execute(method);
        InputStream stream = response.getEntity().getContent();
        String content = Utils.inputStreamToString(stream);
        return content ;
    }
    catch (Exception ex){
        ex.printStackTrace();
    }
    return null ;
}
}

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Следующий фрагмент должен быть достаточным:

public class FirstExampleActivity extends AppCompatActivity {

   public static final String URL = "http://androidtestapp.gigfa.com/mysite/guitarist.json";
   TextView tv;
   private static final String TAG = FirstExampleActivity.class.getSimpleName();

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       tv = findViewById(R.id.tv);
   }
   @Override
   public boolean onCreateOptionsMenu(final Menu menu) {

       MenuItem item = menu.add("GET");
       item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
       item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
           @Override
           public boolean onMenuItemClick(MenuItem item) {

               Thread thread = new Thread(new Runnable() {

                  Handler handler = new Handler() {

                       @Override
                       public void handleMessage(Message msg) {
                           super.handleMessage(msg);
                           final String content = msg.getData().getString("content");
                           tv.setText(content);
                       }
                   };

                   @Override
                   public void run() {
                       String content = getData();
                       Message message = new Message();
                       Bundle bundle = new Bundle();
                       bundle.putString("content", content);
                       message.setData(bundle);
                       handler.sendMessage(message);
                   }
               });
               thread.start();
               return false;
           }
       });
       return super.onCreateOptionsMenu(menu);
  }

  private String getData() {

      URL client;
      HttpURLConnection urlConnection = null;
      try {
          client = new URL(URL);
          urlConnection = (HttpURLConnection) client.openConnection();
          urlConnection.setRequestMethod("GET");
          int responseCode = urlConnection.getResponseCode();

          if (responseCode == HttpURLConnection.HTTP_OK) { // connection ok
              BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
              String inputLine;
              StringBuilder response = new StringBuilder();
              while ((inputLine = in.readLine()) != null) {
                  response.append(inputLine);
              }
              in.close();
              return response.toString();
          }
      } catch (IOException exc) {
          Log.e(TAG, "exception:" + exc);
      } finally {
          if(urlConnection!=null){
              urlConnection.disconnect();
          }
      }
      return null;
  }
}
0 голосов
/ 06 ноября 2019

Я верю, что ответ может помочь вам. Проблема заключается в том, что некоторые сайты сначала возвращают некоторый JavaScript, например, для проверки, но httpclient не поддерживает JavaScript.

...