如何检查json字符串值,我有2个json,我想检查标志等于“P”或“M”
{"page_menu":{"flag":"M"},"menu":[{"pid":"0","name":"Home","refid":"1","ord_field":"1"},{"pid":"0","name":"About Us","refid":"2","ord_field":"2"},{"pid":"0","name":"Services","refid":"3","ord_field":"3"},{"pid":"0","name":"Products","refid":"4","ord_field":"4"}]}
{"page_menu":{"flag":"P"},"page":[{"name":"Home"}]}
我的代码是here.am创建关于webservice.here的动态按钮,否则只是部分工作。如果点击按钮,其中包含其工作的子元素,但其他部分标志为p,页面json无法工作.. < / p>
public class MainActivity extends Activity {
String url = "http://10.0.2.2:80/android_connect/home.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new LongOperation().execute(url);
}
private class LongOperation extends AsyncTask<String, Void, Void> {
private final HttpClient Client = new DefaultHttpClient();
private String Content;
private String Error = null;
private ProgressDialog Dialog = new ProgressDialog(MainActivity.this);
String data ="";
TextView text=(TextView) findViewById(R.id.textView1);
int sizeData = 0;
private View addButton;
protected void onPreExecute() {
Dialog.setMessage("Please wait..");
Dialog.show();
}
// Call after onPreExecute method
protected Void doInBackground(String... urls) {
/************ Make Post Call To Web Server ***********/
BufferedReader reader=null;
// Send data
try
{
// Defined URL where to send data
URL url = new URL(urls[0]);
// Send POST data request
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write( data );
wr.flush();
// Get the server response
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while((line = reader.readLine()) != null)
{
// Append server response in string
sb.append(line + "");
}
// Append Server Response To Content String
Content = sb.toString();
}
catch(Exception ex)
{
Error = ex.getMessage();
}
finally
{
try
{
reader.close();
}
catch(Exception ex) {}
}
return null;
}
protected void onPostExecute(Void unused) {
Dialog.dismiss();
if (Error != null) {
text.setText("Output : "+Error);
} else {
String OutputData = " ";
JSONObject jsonResponse;
//String Data = " ";
try {
jsonResponse = new JSONObject(Content);
JSONObject jsonMainNode = jsonResponse.optJSONObject("page_menu");
String Data = jsonMainNode.getString("flag");
if(Data.equalsIgnoreCase("P"))
{
Toast.makeText(getApplicationContext(),"flag"+Data+"selected", Toast.LENGTH_SHORT).show();
JSONArray jsonMainNode1 = jsonResponse.optJSONArray("page");
TextView text=(TextView) findViewById(R.id.textView1);
String strName=text.getText().toString();
Intent in = new Intent(getApplicationContext(),second.class);
in.putExtra("NAME", strName);
startActivity(in);
String Name =jsonMainNode1.toString();
OutputData = Name;
text.setText(OutputData);
}
else if (Data.equalsIgnoreCase("M"))
{
JSONArray jsonMainNode1 = jsonResponse.getJSONArray("menu");
int lengthJsonArr = jsonMainNode1.length();
for(int i=0; i <lengthJsonArr; i++)
{
JSONObject jsonChildNode = jsonMainNode1.getJSONObject(i);
String Pid = jsonChildNode.optString("pid".toString());
String Name = jsonChildNode.optString("name").toString();
String Refid=jsonChildNode.optString("refid".toString());
OutputData = Name;
LinearLayout buttonContainer=(LinearLayout)findViewById(R.id.btn_container);
Button button = new Button(buttonContainer.getContext());
button.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
button.setText(OutputData);
button.setTag(Refid);
buttonContainer.addView(button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
LinearLayout buttonContainer = (LinearLayout)findViewById(R.id.btn_container);
buttonContainer.removeAllViews();
Toast.makeText(getApplicationContext(),
"button" +v.getTag()+ "is clicked", Toast.LENGTH_SHORT).show();
new LongOperation().execute("http://10.0.2.2:80/android_connect/home.php?pid="+v.getTag()); }
}
);
}
}
}
//if closing bracket
catch (JSONException e) {
e.printStackTrace();
}
}
}
}
logCat就在这里
01-28 04:23:53.522: D/AndroidRuntime(4112): Shutting down VM
01-28 04:23:53.522: W/dalvikvm(4112): threadid=1: thread exiting with uncaught exception (group=0x41465700)
01-28 04:23:53.552: E/AndroidRuntime(4112): FATAL EXCEPTION: main
01-28 04:23:53.552: E/AndroidRuntime(4112): java.lang.NullPointerException
01-28 04:23:53.552: E/AndroidRuntime(4112): at com.example.proj2.MainActivity$LongOperation.onPostExecute(MainActivity.java:161)
01-28 04:23:53.552: E/AndroidRuntime(4112): at com.example.proj2.MainActivity$LongOperation.onPostExecute(MainActivity.java:1)
01-28 04:23:53.552: E/AndroidRuntime(4112): at android.os.AsyncTask.finish(AsyncTask.java:631)
01-28 04:23:53.552: E/AndroidRuntime(4112): at android.os.AsyncTask.access$600(AsyncTask.java:177)
01-28 04:23:53.552: E/AndroidRuntime(4112): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
01-28 04:23:53.552: E/AndroidRuntime(4112): at android.os.Handler.dispatchMessage(Handler.java:99)
01-28 04:23:53.552: E/AndroidRuntime(4112): at android.os.Looper.loop(Looper.java:137)
01-28 04:23:53.552: E/AndroidRuntime(4112): at android.app.ActivityThread.main(ActivityThread.java:5103)
01-28 04:23:53.552: E/AndroidRuntime(4112): at java.lang.reflect.Method.invokeNative(Native Method)
01-28 04:23:53.552: E/AndroidRuntime(4112): at java.lang.reflect.Method.invoke(Method.java:525)
01-28 04:23:53.552: E/AndroidRuntime(4112): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-28 04:23:53.552: E/AndroidRuntime(4112): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-28 04:23:53.552: E/AndroidRuntime(4112): at dalvik.system.NativeStart.main(Native Method)
更新后也出现错误..
01-28 05:56:33.512: W/dalvikvm(4763): threadid=1: thread exiting with uncaught exception (group=0x41465700)
01-28 05:56:33.532: E/AndroidRuntime(4763): FATAL EXCEPTION: main
01-28 05:56:33.532: E/AndroidRuntime(4763): java.lang.NullPointerException
01-28 05:56:33.532: E/AndroidRuntime(4763): at com.example.proj2.MainActivity$LongOperation.onPostExecute(MainActivity.java:162)
01-28 05:56:33.532: E/AndroidRuntime(4763): at com.example.proj2.MainActivity$LongOperation.onPostExecute(MainActivity.java:1)
01-28 05:56:33.532: E/AndroidRuntime(4763): at android.os.AsyncTask.finish(AsyncTask.java:631)
01-28 05:56:33.532: E/AndroidRuntime(4763): at android.os.AsyncTask.access$600(AsyncTask.java:177)
01-28 05:56:33.532: E/AndroidRuntime(4763): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
01-28 05:56:33.532: E/AndroidRuntime(4763): at android.os.Handler.dispatchMessage(Handler.java:99)
01-28 05:56:33.532: E/AndroidRuntime(4763): at android.os.Looper.loop(Looper.java:137)
01-28 05:56:33.532: E/AndroidRuntime(4763): at android.app.ActivityThread.main(ActivityThread.java:5103)
01-28 05:56:33.532: E/AndroidRuntime(4763): at java.lang.reflect.Method.invokeNative(Native Method)
01-28 05:56:33.532: E/AndroidRuntime(4763): at java.lang.reflect.Method.invoke(Method.java:525)
01-28 05:56:33.532: E/AndroidRuntime(4763): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
01-28 05:56:33.532: E/AndroidRuntime(4763): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-28 05:56:33.532: E/AndroidRuntime(4763): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
JSONObject jo = new JSONObject("page_menu");
String flag= jo.optJSONObject("flag");
if(flag.equalsIgnoreCase("P"))
{
JSONArray resultarr = jo.getJSONArray("page");
for (int i = 0; i < resultarr.length(); i++)
{
String namevalue= resultarr.getJSONObject(i).getString("name");
}
}
else if if(flag.equalsIgnoreCase("M"))
{
JSONArray results = jo.getJSONArray("menu");
for (int i = 0; i < results.length(); i++)
{
String Idvalue= results.getJSONObject(i).getString("pid");
}
}