JSON из URL в ListView | Fragment

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Аватара пользователя
BreadPusher
Сообщения: 1
Зарегистрирован: 15 апр 2017, 11:10

JSON из URL в ListView | Fragment

Сообщение BreadPusher » 15 апр 2017, 11:25

Здравствуйте! Есть фрагмент показывающий listView. Также есть локальный сайт (http://stat/api/main/) возвращающий Json-массив. Как парсить этот самый Json и показать его в ListView? (Также при клике надо передать элемент id в другой Fragment или Activity).

http://stat/api/main/
[syntax=javascript]{
"main": [
{
"id": "1",
"rus": "Демографические показатели",
"kaz": "Демографиялық көрсекіштер"
},
{
"id": "2",
"rus": "Социальное обеспечение",
"kaz": "Әлеуметтік қамсыздандыру"
},
{
"id": "3",
"rus": "Уровень жизни",
"kaz": "Тұрмыс деңгейі"
},
{
"id": "4",
"rus": "Занятость населения",
"kaz": "Халықтың жұмыспен қамтылуы"
},
{
"id": "5",
"rus": "Оплата труда",
"kaz": "Еңбекақы төлеу"
},
{
"id": "6",
"rus": "Цены",
"kaz": "Бағалар"
},
{
"id": "7",
"rus": "ВРП",
"kaz": "ЖӨӨ"
},
{
"id": "8",
"rus": "Реальный сектор экономики",
"kaz": "Экономиканың нақты секторы"
},
{
"id": "9",
"rus": "Торговля",
"kaz": "Сауда"
}
]
}[/syntax]
FragmentHome.java
[syntax=java]package loc.stat.statvko.fragments;

import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;

import loc.stat.statvko.R;

public class FragmentHome extends ListFragment {

String data[] = new String[] {"123", "123", "123", "123"};

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

ArrayAdapter<?> adapter = new ArrayAdapter<Object>(getActivity(), android.R.layout.simple_list_item_1, data);
setListAdapter(adapter);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_home, null);
}

}
[/syntax]
fragment_home.xml
[syntax=xml]
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="loc.stat.statvko.fragments.FragmentHome">

<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@android:id/list"/>

</LinearLayout>
[/syntax]

ahouse
Сообщения: 2
Зарегистрирован: 19 апр 2017, 12:57

Re: JSON из URL в ListView | Fragment

Сообщение ahouse » 19 апр 2017, 13:13

Вот так можно распарсить

Код: Выделить всё

import android.os.AsyncTask;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
 
 
public class MyActivity extends ActionBarActivity {
 
    public static String LOG_TAG = "my_log";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new JSONParseTask().execute();
    }
 
    private class JSONParseTask extends AsyncTask<Void, Void, String> {
 
        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;
        String resultJson = "";
 
        @Override
        protected String doInBackground(Void... params) {
            // получаем данные с внешнего сайта
            try {
                URL url = new URL("http://site.ru/output.json");
 
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();
 
                InputStream inputStream = urlConnection.getInputStream();
                StringBuffer buffer = new StringBuffer();
 
                reader = new BufferedReader(new InputStreamReader(inputStream));
 
                String line;
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }
 
                resultJson = buffer.toString();
 
            } catch (Exception e) {
                e.printStackTrace();
            }
            return resultJson;
        }
 
        @Override
        protected void onPostExecute(String strJson) {
            super.onPostExecute(strJson);
            
            JSONObject dataJsonObj = null;
            String secondName = "";
 
            try {
                dataJsonObj = new JSONObject(strJson);
                JSONArray jsonObjects = dataJsonObj.getJSONArray("JSONData-TAG");
 
 

                for (int i = 0; i < jsonObjects.length(); i++) {
                    JSONObject jsonObject = jsonObjects.getJSONObject(i);
 

                    String user_name = jsonObject.getString("user_name");
 
                    Log.d(LOG_TAG, "user_name: " + user_name);
                }
 
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}
А полученый массив данных "обворачиваешь" в ArrayAdapter и его уже стыкуешь с ListView

Ответить