【问题标题】:How to JSON Parse in Android Studio如何在 Android Studio 中解析 JSON
【发布时间】:2015-10-24 01:55:35
【问题描述】:

我想使用 Android Studio 解析 JSON 数据,但我不能。它说 HTTP 已被弃用。如何使用 Android Studio 解析这些数据。

HTTPClient、HTTPPost、HTTPResponse、HTTPEntity 已弃用。所以我无法解析。

我的 MainActivity 类;

import android.content.Entity;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
import android.widget.TextView;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ListView list;
    CountryAdapter adapter;
    ArrayList<Country> countryList;

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

        list = (ListView)findViewById(R.id.list);
        countryList = new ArrayList<Country>();

        new CountryAsynTask().execute("https://restcountries.eu/rest/v1/all");

    }

    public class CountryAsynTask extends AsyncTask<String, Void, Boolean>{

        @Override
        protected Boolean doInBackground(String... params) {

            try {



                HttpClient client = new DefaultHttpClient();
                HttpPost post = new HttpPost(params[0]);
                HttpResponse response = client.execute(post);
                int status = response.getStatusLine().getStatusCode();

                if(status == 200){
                    HttpEntity entity = response.getEntity();
                    String data = EntityUtils.toString(entity);

                    try{
                        JSONArray jsonArray = new JSONArray(data);

                        for (int i=0; i<jsonArray.length();i++){

                            Country country = new Country();

                            JSONObject jRealObject = jsonArray.getJSONObject(i);

                            country.setName(jRealObject.getString("name"));
                            country.setPopulation(jRealObject.getString("population"));
                            country.setCapital(jRealObject.getString("capital"));
                            country.setRegion(jRealObject.getString("region"));
                            country.setBorders(jRealObject.getString("borders"));
                            country.setLblBorders("Borders");
                            country.setFlag("http://www.geonames.org/flags/x/" + jRealObject.getString("name").toLowerCase().substring(0, 1) + ".gif");

                            countryList.add(country);

                        }

                    }catch (JSONException e){
                        throw new RuntimeException();

                    }


                    return true;
                }

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

            return false;
        }

        @Override
        protected void onPostExecute(Boolean result) {
            super.onPostExecute(result);

            if(result == false){
                //data was not parse
            }else{
                CountryAdapter adapter = new CountryAdapter(getApplicationContext(),R.layout.row,countryList);
                list.setAdapter(adapter);
            }
        }

    }


}

【问题讨论】:

标签: android json


【解决方案1】:

已弃用并不意味着它不起作用,但您应该考虑更改它。

有很多很棒的网络库:

  1. OkHttp
  2. ION
  3. Volley
  4. Retrofit

还有更多。更多精彩内容请关注https://android-arsenal.com

【讨论】:

    【解决方案2】:

    我确定这是一个重复的问题,但没关系。

    使用 Volley (https://github.com/mcxiaoke/android-volley),它是一个非常强大的 API,它可以在一行中替换您使用 HttpClient 尝试的所有内容。

    你可以在这里看到一个简单的例子:https://developer.android.com/training/volley/simple.html

    【讨论】:

      【解决方案3】:
                  // take Info from web
                  public class Omri extends AsyncTask<String, Void, String> {
      
                      @Override
                      protected String doInBackground(String... params) {
                          // ///////////////////////////////////////////////////////////////////
                          BufferedReader input = null;
                          HttpURLConnection connection = null;
                          StringBuilder response = new StringBuilder();
                          try {
                              // replace THE_ADDRESS_YOU_WANT with the url you want to
                              // comsume.
                              URL url = new URL(params[0]);
      
                              connection = (HttpURLConnection) url.openConnection();
                              if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
                                  return null;
                              }
      
                              input = new BufferedReader(new InputStreamReader(
                                      connection.getInputStream()));
                              String line = "";
                              while ((line = input.readLine()) != null) {
                                  response.append(line + "\t");
                              }
                          } catch (MalformedURLException e) {
                              e.printStackTrace();
                              return null;
                          } catch (IOException e) {
                              e.printStackTrace();
                              return "IEO";
                          } finally {
                              if (input != null) {
                                  try {
                                      input.close();
                                  } catch (IOException e) {
                                      e.printStackTrace();
                                  }
                              }
                              if (connection != null) {
                                  connection.disconnect();
                              }
                          }
                          return response.toString();
                      }
      
                      ProgressDialog dialog;
      
                      @Override
                      protected void onPreExecute() {
                          // show a dialog
      
                          try {
                              progressDialog = new ProgressDialog(Serch.this);
                              progressDialog.setMessage("Searching"+", Please wait...");
                              progressDialog.show();
                          } catch (Exception e) {
                              post("לא יכול לחפש אנא נסה שנית");
                          }
      
                      }
      
                      @Override
                      protected void onPostExecute(String result) {
                          if (result == null || result.length() == 0) {
                              // no result:
                              post("לא מוצא.... ");
                              progressDialog.dismiss();
                          } else {
      
                              try {
                                  JSONObject responseObject = new JSONObject(result);
                                  JSONArray searchArray = responseObject
                                          .getJSONArray("Search");
                                  for (i = 0; i < searchArray.length(); i++) {
                                      JSONObject searchObject =searchArray.getJSONObject(i);
      
                                      String title = searchObject.getString("Title");
      
          Log.d("Omri make my day" , title );
      
      
                                  }
      
      
      
                              } catch (JSONException e) {
                                  progressDialog.dismiss();
                                  Toast.makeText(Serch.this, "לא מוצא", Toast.LENGTH_SHORT)
                                          .show();
                              }
                          }
      
                      }
      
                  }
      
      
      
      public void post(String str){
                      Toast.makeText(Serch.this, str, Toast.LENGTH_SHORT)
                                          .show();
      }
      

      并启动异步任务

      new Omri().execute("http://www.omdbapi.com/?s=rocky");
      

      【讨论】:

        猜你喜欢
        • 2015-07-23
        • 2016-02-17
        • 1970-01-01
        • 2016-04-01
        • 1970-01-01
        • 2020-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多