简单的JSON解析android问题与输出

时间:2016-01-20 19:04:25

标签: java android json parsing

我正在学习JSON,并且相当远。我得到了正确的解析信息。我调试了它并查看了值,它们是正确的。问题是输出变量是否为Null Node。我只是不明白为什么会这样。我在这里有点迷失。任何帮助将不胜感激。

所以我的主要活动类是这个

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;



public class MainActivity extends AppCompatActivity {

    String TAG = "Test ME";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button bparsejson      = (Button) findViewById(R.id.bparsejson);
        final TextView output = (TextView) findViewById(R.id.output);
        final String strJson = "{ \"Android\" :[{\"song_name\":\"Gimme Dat\",\"song_id\":\"1932\",\"artist_name\":\"Sidney Samson (Feat. Pitbull & Akon)\"},{\"song_name\":\"F-k The Money (Remix)\",\"song_id\":\"73\",\"artist_name\":\"B.o.B. (Feat. Wiz Khalifa)\"}] }";
        final String outputData = null;
        Log.d(TAG, "I have started");
        /******** Listener for button click ********/
        bparsejson.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "Button Pushed");
                JSONParser jp = new JSONParser();
                jp.parsesData(strJson, outputData);
                output.setText(outputData);
            }
        });


    }


}

我的JSON解析器就是这个。

    import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;



/**
 * Created by MMILLAR on 1/20/2016.
 * JSON Parser Class
 * USe this to parse all data which is JSON
 */
public class JSONParser {
    JSONObject jsonResponse;
    //String OutputData = "";
    //String jsonData = null;
    String TAG = "JSON Output: ";
    String TAG1 = "Value for JSON";

    //Consturctor
    public JSONParser()
    {
        //this.jsonData = jsonData;
       // this.OutputData = outPutData;
    }

    public String parsesData(String jsonData, String outputData)
    {
        try
        {
            //Creaate a new JSONObject ith the name/value mapping from the JSON string
            jsonResponse = new JSONObject(jsonData);
            //Returns the value mapped by the name if it exists and is a JSONArry
            JSONArray jsonMainNode = jsonResponse.optJSONArray("Android");

            //Proccess the JSON node
            int lenghtJsonArrar = jsonMainNode.length();
            for (int i = 0; i<lenghtJsonArrar; i++)
            {
                //Get object for each json node
                JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
                //Get the node values
                int song_id = Integer.parseInt(jsonChildNode.optString("song_id").toString());
                String song_name = jsonChildNode.optString("song_name").toString();
                String artist_name = jsonChildNode.optString("artist_name").toString();
                //Debug Testing code
                String songID = jsonChildNode.getString("song_id").toString();
                Log.d(TAG1,songID );
                String songName = jsonChildNode.getString("song_name").toString();
                Log.d(TAG1,songName );
                String artName = jsonChildNode.getString("artist_name").toString();
                Log.d(TAG1,artName );


                //create the output
                outputData += "Node: \n\n " + song_id + " | "
                                            + song_name + " | "
                                            + artist_name + " \n\n ";

                Log.d(TAG, outputData);
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return  outputData;
    }

}

我的xml活动层就是这个

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ParseXmlAndroidExample" >

<Button
    android:id="@+id/bparsejson"
    android:text="Parse JSON Data Android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
</Button>

<TextView
    android:id="@+id/output"
    android:paddingTop="10px"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="" />

   </LinearLayout>

2 个答案:

答案 0 :(得分:1)

问题似乎在这里

+= operator

您正在使用outputData = outputData + "Node: \n\n " + song_id + " | " + song_name + " | " + artist_name + " \n\n "; ,这意味着

 String outputData = "";

但outputData的初始值为null,因此为null结果。您所要做的就是用空字符串而不是空值初始化outputData变量。

setOnClickListener()

并将 /******** Listener for button click ********/ bparsejson.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "Button Pushed"); JSONParser jp = new JSONParser(); output.setText(jp.parsesData(strJson, outputData)); } }); 更改为此

rounded_division_test1()

希望它会有所帮助.. !!

答案 1 :(得分:1)

您需要使用方法返回的值:

outputData = jp.parsesData(strJson, outputData);

目前你忽略了它。

此外,outputData不得为最终版,否则您无法更改。