安卓JSON解析

2024-02-20

我需要有关我的代码的建议。

我正在尝试解析 PHP 函数生成的 JSON 数组json_encode().

My json:

{"data": [{"streamer":"froggen","yt_length":"25078"},{"streamer":"wingsofdeath","yt_length":"8979"},{"streamer":"guardsmanbob","yt_length":"4790"},{"streamer":"kaostv","yt_length":"4626"},{"streamer":"kungentv","yt_length":"3883"},{"streamer":"destiny","yt_length":"3715"},{"streamer":"zekent","yt_length":"3428"},{"streamer":"athenelive","yt_length":"1673"},{"streamer":"frommaplestreet","yt_length":"1614"},{"streamer":"keyorikeys","yt_length":"1410"},{"streamer":"riotgamesturkish","yt_length":"1397"},{"streamer":"vman7","yt_length":"1022"},{"streamer":"tiensinoakuma","yt_length":"967"},{"streamer":"affenklappe","yt_length":"748"},{"streamer":"teamkeyd","yt_length":"747"},{"streamer":"lagtvmaximusblack","yt_length":"683"},{"streamer":"lolgameru","yt_length":"665"},{"streamer":"gruntartv","yt_length":"585"},{"streamer":"entenzwerg","yt_length":"579"},{"streamer":"lolgameru_cauthonpro","yt_length":"506"},{"streamer":"basickz","yt_length":"488"},{"streamer":"ilysuiteheart","yt_length":"491"},{"streamer":"kireiautumn","yt_length":"485"},{"streamer":"ultimavv","yt_length":"471"}]}

Java类:

public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
String response = "";

// constructor
public JSONParser() {
}

public JSONObject getJSONFromUrl(String url) {
    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpPost = new HttpGet(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;
}
}

还有我的活动:

public class AndroidJSONParsingActivity extends ListActivity {
// url to make request
private static String url = "http://ololo.tv/vasa";

// JSON Node names
private static final String TAG_DATA = "data";
private static final String TAG_STREAMER = "streamer";
private static final String TAG_VIEWERS = "yt_length";

// contacts JSONArray
JSONArray data = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Hashmap for ListView
    ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();

    // Creating JSON Parser instance
    JSONParser Parser = new JSONParser();

    // getting JSON string from URL
    JSONObject json = null;

        json = Parser.getJSONFromUrl(url);


    try {
        // Getting Array of Contacts
        data = json.getJSONArray(TAG_DATA);

        // looping through All Contacts
        for(int i = 0; i < data.length(); i++){
            JSONObject c = data.getJSONObject(i);

            // Storing each json item in variable
            String streamer = c.getString(TAG_STREAMER);
            String viewers = c.getString(TAG_VIEWERS);
            //String link = c.getString();

            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();

            // adding each child node to HashMap key => value
            map.put(TAG_STREAMER, streamer);
            map.put(TAG_VIEWERS, viewers);
            //map.put(TAG_URL, link);

            // adding HashList to ArrayList
            dataList.add(map);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }


    /**
     * Updating parsed JSON data into ListView
     * */
    ListAdapter adapter = new SimpleAdapter(this, dataList,
            R.layout.list_item,
            new String[] { TAG_STREAMER, TAG_VIEWERS /*TAG_URL*/ }, new int[] {
                    R.id.streamer, R.id.viewers /*R.id.url*/ });

    setListAdapter(adapter);

    // selecting single ListView item
    ListView lv = getListView();

    // Launching new screen on Selecting Single ListItem
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem
            String name = ((TextView) view.findViewById(R.id.streamer)).getText().toString();
            String viewers_count = ((TextView) view.findViewById(R.id.viewers)).getText().toString();
            //String url = ((TextView) view.findViewById(R.id.url)).getText().toString();

            // Starting new intent
            Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
            in.putExtra(TAG_STREAMER, name);
            in.putExtra(TAG_VIEWERS, viewers_count);
            //in.putExtra(TAG_PHONE_MOBILE, url);
            startActivity(in);
        }
    });
}
}

我尝试使用断点,当我在之后放置断点时看到GetEntity,程序无法到达那里,因为它提前崩溃了,或者其他原因。

这是我的异步任务。

public class  ParsingTask extends AsyncTask<String, Void, Void>{


JSONParser Parser = new JSONParser();

protected Void doInBackground(String... urls) {

    ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
    JSONObject json = Parser.getJSONFromUrl(url);

    try {
        // Getting Array of Contacts
        data = json.getJSONArray(TAG_DATA);

        // looping through All Contacts
        for(int i = 0; i < data.length(); i++){
            JSONObject c = data.getJSONObject(i);

            // Storing each json item in variable
            String streamer = c.getString(TAG_STREAMER);
            String viewers = c.getString(TAG_VIEWERS);
            //String link = c.getString();

            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();

            // adding each child node to HashMap key => value
            map.put(TAG_STREAMER, streamer);
            map.put(TAG_VIEWERS, viewers);
            //map.put(TAG_URL, link);

            // adding HashList to ArrayList
            dataList.add(map);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

    /**
     * Updating parsed JSON data into ListView
     * */
    ListAdapter adapter = new SimpleAdapter(this, dataList,
            R.layout.list_item,
            new String[] { TAG_STREAMER, TAG_VIEWERS /*TAG_URL*/ }, new int[] {
            R.id.streamer, R.id.viewers /*R.id.url*/ });

    setListAdapter(adapter);

    return null;
}
protected void onProgressUpdate() {

}
protected void onPostExecute() {

}

}

ListAdapter 错误,似乎“this”出了问题。这是我的版本如何切断代码,在哪里停止返回变量。抱歉英语不好,但我希望你能理解我:)

添加我的 php json 生成器。 MB有问题吗?!

<?php
mysql_connect("localhost","root","");
 if (!mysql_select_db("ololo")) {
    echo "Unable to select ololo: " . mysql_error();
    }
$sql=mysql_query("select streamer, yt_length from pm_videos where category='1'");
if(!$sql) exit("Error - ".mysql_error().", ".$tmp_q);
while($row=mysql_fetch_assoc($sql)){
$output[]=$row;
}
$json = json_encode($output);
header('Content-Type: application/json');
print "{\"data\": ${json}}";
mysql_close();
?>

你的程序崩溃是因为你正在运行

json = Parser.getJSONFromUrl(url);

在 UI 线程上下文中。你必须使用一个异步任务 http://android-developers.blogspot.it/2009/05/painless-threading.html

代码看起来不错。唯一的问题是

 public class  ParsingTask extends AsyncTask<String, Void, ArrayList<HashMap<String, String>>>{


 JSONParser Parser = new JSONParser();

 protected Void doInBackground(String... urls) {

ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
JSONObject json = Parser.getJSONFromUrl(url);

try {
    // Getting Array of Contacts
    data = json.getJSONArray(TAG_DATA);

    // looping through All Contacts
    for(int i = 0; i < data.length(); i++){
        JSONObject c = data.getJSONObject(i);

        // Storing each json item in variable
        String streamer = c.getString(TAG_STREAMER);
        String viewers = c.getString(TAG_VIEWERS);
        //String link = c.getString();

        // creating new HashMap
        HashMap<String, String> map = new HashMap<String, String>();

        // adding each child node to HashMap key => value
        map.put(TAG_STREAMER, streamer);
        map.put(TAG_VIEWERS, viewers);
        //map.put(TAG_URL, link);

        // adding HashList to ArrayList
        dataList.add(map);
    }
} catch (JSONException e) {
    e.printStackTrace();
}

/**
 * Updating parsed JSON data into ListView
 * */


return dataList;
  }

 protected void onPostExecute(ArrayList<HashMap<String, String>> dataList) {
  ListAdapter adapter = new SimpleAdapter(AndroidJSONParsingActivity.this, dataList,
        R.layout.list_item,
        new String[] { TAG_STREAMER, TAG_VIEWERS /*TAG_URL*/ }, new int[] {
        R.id.streamer, R.id.viewers /*R.id.url*/ });

setListAdapter(adapter);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安卓JSON解析 的相关文章

随机推荐

  • 如何使用 Erlang/OTP 25 编译器重新编译 rebar3?运行灵药 1.13.4

    我正在关注免费的截屏视频 教程凤凰城 LiveView 启动器 https online pragmaticstudio com courses liveview starter modules 2但我什至无法开始 因为mix setup失
  • 逐行过滤输入流

    我正在从 Amazon S3 检索大型 gzip 压缩文件 我希望能够即时转换这些文件的每一行并将输出上传到另一个 S3 存储桶 上传 API 需要一个InputStream https docs aws amazon com AWSJav
  • 用鼠标拖动无边框窗口形式[重复]

    这个问题在这里已经有答案了 可能的重复 C 使无边框表单可移动 https stackoverflow com questions 1592876 c sharp make a borderless form movable 我通过设置在
  • IE11通过javascript检测兼容性视图是否打开

    有谁知道当我通过 javascript 访问网站时如何检查 IE 11 兼容模式是否打开 我将 url 添加到列表兼容性视图设置中 但当我这样做时 navigator userAgent 在开发者工具中 它返回 Mozilla 5 0 Wi
  • 如何建立 FTP 连接?

    我正在尝试使用 iPhone iPad 模拟器 Xcode 设置 FTP 连接 到目前为止 我发现我需要使用 CFFTP API 但我没有成功 我浏览了网络 最终遵循了我认为最清楚的内容 即 http developer apple com
  • MySQL服务器“正在读取初始通信数据包”,系统错误:111 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我将我的网站移至戈达迪服务器 但是即使进行了足够的更改 SQL 连接也无法工作 而之前工作得很好
  • FormsAuthenticationTicket.expiration v web.config 值超时

    这是一个 MVC2 网站 我在 FormsAuthentication 票证方面遇到问题 用户超时30分钟后无法重新登录 在测试期间 DateTime Now AddMinutes 30 值设置为 5000 一切正常 但现在已更改为 30
  • 如何为 Swagger UI 定义 [FromQuery] 参数的默认值?

    我有一个行动 HttpGet Route foo public ActionResult Foo FromQuery MyClass request var image ToImage WidgetType MedianSalesPrice
  • 什么是以及如何从我的数据库中删除表空间错误? [复制]

    这个问题在这里已经有答案了 由于负载脱落问题 我的数据库中的一张表已损坏 我删除了该表 现在我想再次创建该表 我明白了error 错误 1813 表 的表空间zorkif sys user accounts 存在 请在导入之前丢弃表空间 S
  • 如何/在哪里定义 Xcode 中的 App ID 前缀?

    作为一名新的 iOS 开发人员 我尝试为我的应用程序定义 Bundle Seed ID 应用程序 ID 前缀 Xcode 中如何 在哪里定义 Bundle Seed ID 应用程序 ID 前缀 请提供详细步骤 链接在这里 https dev
  • 在设计模式下显示带有自定义控件的 WinForm 时出错

    我有一个属于类库一部分的用户控件 我从我的解决方案中引用了这个项目 这会将引用项目中的控件添加到我的工具箱中 我将控件添加到表单中 一切看起来都不错 我编译并运行 完美的 但是当我关闭带有控件的 frm 并重新打开它时 出现此错误 代码继续
  • nsdictionary 中的块?

    因此 我将块操作存储到 nsmutabledictionary 中 然后在 Websocket 上返回响应时调用它们 这会将异步请求转换为块语法 这是精简的代码 void sendMessage NSString message respo
  • Gradle compileKotlin includeRuntime 未将运行时添加到 jar

    我有一个 Kotlin Gradle 项目 我想在 jar 文件中包含 Kotlin 的运行时和 stdlib 我目前正在使用它 但当我使用 build gradle 配置构建项目时 它不包括运行时或 stdlib compileKotli
  • 不循环C++计算数字的位数

    我必须计算一个数字的位数 我将数字除以 10 直到得到 0 每次迭代都会递增计数器 int num cin gt gt num while num gt 0 counter num num 10 挑战不在于使用任何循环或递归 而只是使用if
  • Spring Boot - 创建泛型存储库

    我的 Web 应用程序中有许多服务执行经典的 CRUD 操作 这些是参数部分 为了避免为每个实体类创建一个存储库接口 我想创建一个通用存储库 我尝试了下面的代码 但只有当我有一个控制器时才有效 public class BaseContro
  • python 中的公平信号量

    python 中是否有可能有一个公平的信号量 它可以保证阻塞线程按照它们调用的顺序解除阻塞acquire 您可能必须用其他活动部件来构建一个 例如 创建一个Queue Queue 每个听众都会发布一个全新的Event 然后它会等待 当需要唤
  • delphi 中打印到非默认打印机

    我想使用 Delphi 将打印作业发送到打印机 理想情况下 我希望能够在不让用户从打印对话框中选择打印机的情况下执行此操作 我希望能够使用 Windows 默认打印机以外的打印机 我尝试通过打印机名称设置打印机 Vcl Printers P
  • 如何处理尺寸未知的二维数组?

    我正在编写一个用于矩阵乘法的 C 函数 它需要两个二维整数数组 如果我知道输入数组的尺寸 我就可以做到这一点 但我想创建一个更通用的函数 如何找到它们的尺寸 以及当我在编译时不知道产品的尺寸时如何返回数组 如果您只有指向数组开头的指针 则无
  • 来自 C# 的多个 CMD 命令?

    所以我想知道 如何使用 C 在 CMD 中执行多个命令 我的意思是 我有一个 exe 文件 它依赖于通过 cmd 变量 VAMP PATH 查找文件 是的 我正在使用 VAMP 插件 所以我在 CMD 中使用它的方式是 set VAMP P
  • 安卓JSON解析

    我需要有关我的代码的建议 我正在尝试解析 PHP 函数生成的 JSON 数组json encode My json data streamer froggen yt length 25078 streamer wingsofdeath yt