JSON Android 列表视图 [英] JSON Android ListView

查看:28
本文介绍了JSON Android 列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 netbeans 上构建这个网络服务,

I build this webservice on netbeans,

package in.figures.on.mobile;

import db.koneksi.dbKoneksi;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import org.json.simple.JSONValue;

/**
 *
 * @author Setyadi
 */
@WebService()
public class AksesData {

    /**
     * Web service operation
     */
    @WebMethod(operationName = "Kategori")
    public String Kategori() {
        //TODO write your implementation code here:

        dbKoneksi con = new dbKoneksi();
        Statement statement;
        Properties properties;
        List list = new ArrayList();
        String sql = "SELECT idPrimary_key, kategori FROM kategori ";
        ResultSet hasil;
        String kategori = null;

        try{
            statement = con.getConnection().createStatement();
            hasil = statement.executeQuery(sql);
            while (hasil.next()) {
                properties = new Properties();
                properties.put("idPrimary_key", hasil.getString(1));
                properties.put("kategori", hasil.getString(2));
                list.add(properties);
            }
            kategori = JSONValue.toJSONString(list);
        }
        catch(Exception e){
        }

        return kategori;
    }


}

并返回这样的 JSON

And return a JSON like this

[{"idPrimary_key":"21ye21","kategori":"FirstCategory"},
{"idPrimary_key":"89oy89","kategori":"SecondCategory"},
{"idPrimary_key":"34ew34","kategori":"ThirdCategory"}]

我尝试像这样在 Android ListView 中使用,但仍然出错,

And I try to consume in Android ListView like this, but still got errors,

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);  

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(request);

        HttpTransportSE transportSE = new HttpTransportSE(URL);

        try {
            transportSE.call(SOAP_ACTION, envelope);
            SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
            result = response.toString();

        } catch (Exception e) {
            e.printStackTrace();

        }

        String jsonAN = "{"kat":"+result+"}"; //try to build to be like this {"kat":[{blablablaJSON}]}
        String kategoriJSONList[][] = new String[99][2];
        String katList[] = new String[99]; //tobe shown on listview, derived from two dimensional array above.
        try {
            jsonObject = new JSONObject(jsonAN);
            jsonArray = jsonObject.getJSONArray("kat");

            for(int i=0; i < jsonArray.length() ; i++){
                kategoriJSONList[i][0] = jsonArray.getJSONObject(i).getString("idPrimary_key").toString();
                kategoriJSONList[i][1] = jsonArray.getJSONObject(i).getString("kategori").toString();
            }

            for(int i=0; i < jsonArray.length(); i++){
                katList[i] = kategoriJSONList[i][1];
            }

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        ListView list  = (ListView) findViewById(R.id.listKategori);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                WebServiceActivity.this, android.R.layout.simple_list_item_1,katList
                );

        list.setAdapter(adapter);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {
                final String kategori = (String) ((TextView)arg1).getText();
                Toast.makeText(WebServiceActivity.this, kategori,
                        Toast.LENGTH_LONG).show();
            }
        });

需要帮助如何使用如上所示返回的 JSONValue 以显示为 ListView.这几天我有压力.提前致谢.

Need help how to consume the JSONValue that return as shown above to be shown as ListView. I got stress in this days. Thanks in advance.

推荐答案

好的.试试这个波纹管代码.它对我来说是全功能的.您应该在注释行中实现 HttpRequest.注意JSON数组是硬编码的.

Ok. Try this bellow code. It is full functional to me. You should implement the HttpRequest in the commented line. Pay atention to that the JSON array is hard-coded.

// the Adapter
public class ListViewAdapter extends BaseAdapter {

    private Context context = null;
    private List<String> fields = null;

    public ListViewAdapter(Context context, JSONArray arr) {
        this.context = context;
        this.fields = new ArrayList<String>();
        for (int i=0; i<arr.length(); ++i) {
            try {
                fields.add(arr.getJSONObject(i).toString());
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public int getCount() {
        return fields.size();
    }

    @Override
    public Object getItem(int position) {
        return fields.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.itemlist, null);
        TextView txt = (TextView) convertView.findViewById(R.id.ItemList_txt);
        txt.setText(fields.get(position));
        return convertView;
    }

}

// the activity
public class ListViewActivity extends Activity {

    public final String result = "[{"idPrimary_key":"21ye21","kategori":"FirstCategory"},{"idPrimary_key":"89oy89","kategori":"SecondCategory"},{"idPrimary_key":"34ew34","kategori":"ThirdCategory"}]";
    public final String obj = "{"kat":"+result+"}";

    private ListViewAdapter adapter = null;
    private ListView myList = null;
    private JSONArray items = new JSONArray();

    final Handler handler = new Handler() {
        @Override
        public void handleMessage(android.os.Message msg) {
            if (msg.what == 0) { // server returned null, try again
                loadFields();
            } else if(msg.what == 1) { // error in json
                // do something to treat it
            } else if (msg.what == 2) { // ready to roll the list
                adapter = new ListViewAdapter(ListViewActivity.this, items);
                myList.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }
        }
    };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    myList = (ListView) findViewById(R.id.Lists_notificationsListview);
    loadFields();
}

private void loadFields() {
    new Thread() {
        @Override
        public void run() {
            Looper.prepare();
            StringBuilder builder = new StringBuilder(obj);
            if (builder != null) {
                try {
                    // HERE, you should implement the HTTP request...
                    items = new JSONObject(obj).getJSONArray("kat");
                    handler.sendEmptyMessage(2);
                } catch (JSONException e) {
                    handler.sendEmptyMessage(1);
                }
            } else {
                handler.sendEmptyMessage(0);
            }
            Looper.loop();
        }
    }.start();
}

和 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:orientation="vertical"
        android:isScrollContainer="true">
        <ListView
            android:id="@+id/Lists_notificationsListview"
            android:layout_width="fill_parent" android:layout_height="match_parent">
        </ListView>
    </RelativeLayout>
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <TextView
        android:id="@+id/ItemList_txt"
        android:layout_width="fill_parent" android:layout_height="wrap_content"/>
</LinearLayout>

结果,它生成了以下视图:

As result, it generates the following view:

当然,你可以自定义创建你想要的列表,只需解析jsons!希望我在某种程度上有所帮助...

Of course, you can customize it to create lists that you want, just parsing the jsons! Hope that I've helped in some way...

这篇关于JSON Android 列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆