黑莓从URL中读取JSON字符串 [英] BlackBerry read json string from an URL

查看:770
本文介绍了黑莓从URL中读取JSON字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图读取从网址 JSON字符串加载,但我找不到完成code样品。任何一个可以提供或指向我一个完整的客户端code。我是新来的BB的发展。

I tried to read a json string loading from an URL, but I could not find complete code sample. Can any one provide or point me to a complete client code. I'm newer to BB development.

是我做了什么,但仍然无法得到它的工作,请帮助我。

this is what I have done but still can't get it work please help me.

谢谢!

推荐答案

要读取和你需要实现两个程序的URL解析的数据。他们中的第一个将处理从通过HTTP连接指定URL读取数据,和第二个将解析数据

To read and parse data from an URL you need to implement two routines. First one of them will handle reading data from the specified URL over HTTP connection, and the second one will parse the data.

检查以下应用程序的 HttpUrlReaderDemoApp 后,将首先从指定的URL读取数据,然后解析检索到的数据。

Check the following application HttpUrlReaderDemoApp, which will first read the data from specified URL and then parse the retrieved data.

  • URL used to retrieve data: http://codeincloud.tk/json_android_example.php
  • Sample data format: {"name":"Froyo", "version":"Android 2.2"}

  • HttpUrlReaderDemoApp 的 - 例如的UIApplication

  • 的Htt presponseListener 的 - 接口用来通知有关HTTP请求状态,其他类

  • HttpUrlReader 的 - 读取从指定网址数据

  • AppMainScreen 的 - 比如MainScreen

  • DataParser 的 - 解析数据

  • 的DataModel 的 - 数据定义

  • HttpUrlReaderDemoApp - UiApplication instance
  • HttpResponseListener - Interface used to notify other classes about HTTP request status
  • HttpUrlReader - Reads the data from given url
  • AppMainScreen - MainScreen instance
  • DataParser - Parse data
  • DataModel - Data definition

  • 请求数据

  • Request for data

在数据检索成功

解析的数据

HttpUrlReaderDemoApp

public class HttpUrlReaderDemoApp extends UiApplication {
    public static void main(String[] args) {
        HttpUrlReaderDemoApp theApp = new HttpUrlReaderDemoApp();
        theApp.enterEventDispatcher();
    }

    public HttpUrlReaderDemoApp() {
        pushScreen(new AppMainScreen("HTTP Url Reader Demo Application"));
    }
}

的Htt presponseListener

public interface HttpResponseListener {
    public void onHttpResponseFail(String message, String url);

    public void onHttpResponseSuccess(byte bytes[], String url);
}

HttpUrlReader

public class HttpUrlReader implements Runnable {
    private String url;
    private HttpResponseListener listener;

    public HttpUrlReader(String url, HttpResponseListener listener) {
        this.url = url;
        this.listener = listener;
    }

    private String getConncetionDependentUrlSuffix() {
        // Not implemented
        return "";
    }

    private void notifySuccess(byte bytes[], String url) {
        if (listener != null) {
            listener.onHttpResponseSuccess(bytes, url);
        }
    }

    private void notifyFailure(String message, String url) {
        if (listener != null) {
            listener.onHttpResponseFail(message, url);
        }
    }

    private boolean isValidUrl(String url) {
        return (url != null && url.length() > 0);
    }

    public void run() {
        if (!isValidUrl(url) || listener == null) {
            String message = "Invalid parameters.";
            message += !isValidUrl(url) ? " Invalid url." : "";
            message += (listener == null) ? " Invalid HttpResponseListerner instance."
                    : "";
            notifyFailure(message, url);
            return;
        }

        // update URL depending on connection type
        url += DeviceInfo.isSimulator() ? ";deviceside=true"
                : getConncetionDependentUrlSuffix();

        // Open the connection and retrieve the data
        try {
            HttpConnection httpConn = (HttpConnection) Connector.open(url);
            int status = httpConn.getResponseCode();
            if (status == HttpConnection.HTTP_OK) {
                InputStream input = httpConn.openInputStream();
                byte[] bytes = IOUtilities.streamToBytes(input);
                input.close();
                notifySuccess(bytes, url);
            } else {
                notifyFailure("Failed to retrieve data, HTTP response code: "
                        + status, url);
                return;
            }
            httpConn.close();
        } catch (Exception e) {
            notifyFailure("Failed to retrieve data, Exception: ", e.toString());
            return;
        }
    }
}

AppMainScreen

public class AppMainScreen extends MainScreen implements HttpResponseListener {
    private final String URL = "http://codeincloud.tk/json_android_example.php";

    public AppMainScreen(String title) {
        setTitle(title);
    }

    private MenuItem miReadData = new MenuItem("Read data", 0, 0) {
        public void run() {
            requestData();
        }
    };

    protected void makeMenu(Menu menu, int instance) {
        menu.add(miReadData);
        super.makeMenu(menu, instance);
    }

    public void close() {
        super.close();
    }

    public void showDialog(final String message) {
        UiApplication.getUiApplication().invokeLater(new Runnable() {
            public void run() {
                Dialog.alert(message);
            }
        });
    }

    private void requestData() {
        Thread urlReader = new Thread(new HttpUrlReader(URL, this));
        urlReader.start();
        showDialog("Request for data from\n \"" + URL + "\"\n started.");
    }

    public void onHttpResponseFail(String message, String url) {
        showDialog("Failure Mesage:\n" + message + "\n\nUrl:\n" + url);
    }

    public void onHttpResponseSuccess(byte bytes[], String url) {
        showDialog("Data retrived from:\n" + url + "\n\nData:\n"
                + new String(bytes));

        // now parse response
        DataModel dataModel = DataParser.getData(bytes);
        if (dataModel == null) {
            showDialog("Failed to parse data: " + new String(bytes));
        } else {
            showDialog("Parsed Data:\nName: " + dataModel.getName()
                    + "\nVersion: " + dataModel.getVersion());
        }
    }
}

DataParser

public class DataParser {
    private static final String NAME = "name";
    private static final String VERSION = "version";

    public static DataModel getData(byte data[]) {
        String rawData = new String(data);
        DataModel dataModel = new DataModel();

        try {
            JSONObject jsonObj = new JSONObject(rawData);
            if (jsonObj.has(NAME)) {
                dataModel.setName(jsonObj.getString(NAME));
            }
            if (jsonObj.has(VERSION)) {
                dataModel.setVersion(jsonObj.getString(VERSION));
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

        return dataModel;
    }
}

的DataModel

public class DataModel {
    private String name;
    private String version;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String model) {
        this.version = model;
    }
}

这篇关于黑莓从URL中读取JSON字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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