2011-11-18 84 views
1

可能重複:
Sending and Parsing JSON in Android如何解析JSON數據的Android

我從服務器獲取JSON數據,我已經得到了JSON數據的代碼。但我不明白如何解析它。

這裏是我的服務器我正在獲取從MySQL數據庫的數據,然後發送到Android設備

import java.io.*; 
    import java.util.*; 
    import javax.sql.*; 
    import javax.servlet.*; 
    import javax.servlet.http.*; 
    import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.ResultSet; 
    import java.sql.SQLException; 
    import java.sql.Statement; 
    import net.sf.json.JSONArray; 

    public class DBConnection extends HttpServlet { 
      public void doGet(HttpServletRequest request,HttpServletResponse  response)throws IOException, ServletException{ 

     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 

    // connecting to database 
    Connection con = null;  
    Statement stmt = null; 
    ResultSet rs = null; 

    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     con =DriverManager.getConnection("jdbc:mysql://localhost:3306/emarnew", "root","12345"); 
     stmt = con.createStatement(); 
     rs = stmt.executeQuery("SELECT * FROM allpatientdetails WHERE patientname='Mr Hans Tan'"); 


    // displaying records 
     while(rs.next()){ 
    JSONArray arrayObj=new JSONArray(); 
     String name="patientname"+rs.getObject(1).toString(); 
    arrayObj.add(name); 

     arrayObj.add(rs.getObject(2).toString()); 
     arrayObj.add(rs.getObject(3).toString()); 
     arrayObj.add(rs.getObject(4).toString()); 
     arrayObj.add(rs.getObject(5).toString()); 
     arrayObj.add(rs.getObject(6).toString()); 
     arrayObj.add(rs.getObject(7).toString()); 
     arrayObj.add(rs.getObject(8).toString()); 
     String nik =arrayObj.toString(); 

      // fetch the parameters from client.. 

      final String user = request.getParameter("UID"); 
      // out.print(user); 

      if("patients".equals(user)) 
       out.print(nik); 
      else 
       out.println("fail"); 

     // out.print(nik); 
      // out.print("\t\t\t"); 
      // out.print("<br>"); 

} 
    } catch (SQLException e) { 
     throw new ServletException("Servlet Could not display records.", e); 
     } catch (ClassNotFoundException e) { 
      throw new ServletException("JDBC Driver not found.", e); 
     } finally { 
      try { 
       if(rs != null) { 
        rs.close(); 
        rs = null; 
       } 
       if(stmt != null) { 
        stmt.close(); 
        stmt = null; 
       } 
       if(con != null) { 
        con.close(); 
        con = null; 
       } 
      } catch (SQLException e) {} 
     } 

     out.close(); 
    } 

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException 
{ 
    this.doGet(request, response); 
} 


} 

這裏是我的Android代碼 進口java.util.ArrayList中的代碼; import java.util.List;

 import org.apache.http.HttpEntity; 
     import org.apache.http.HttpResponse; 
     import org.apache.http.NameValuePair; 
     import org.apache.http.client.HttpClient; 
     import org.apache.http.client.entity.UrlEncodedFormEntity; 
      import org.apache.http.client.methods.HttpGet; 
     import org.apache.http.client.methods.HttpPost; 
      import org.apache.http.impl.client.DefaultHttpClient; 
     import org.apache.http.message.BasicNameValuePair; 
     import org.apache.http.protocol.HTTP; 
     import org.apache.http.util.EntityUtils; 

     import android.app.Activity; 
     import android.os.Bundle; 
     import android.util.Log; 
     import android.widget.TextView; 

    public class ClientActivity extends Activity 
     { 
TextView tv; 
public StringBuffer buffer; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    tv= (TextView)findViewById(R.id.tv); 

    try { 
     HttpClient client = new DefaultHttpClient(); 
     String postURL = "http://10.0.2.2:8080/nik/DBConnection?UID=patients"; 
     HttpPost post = new HttpPost(postURL); 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("UID", "patients")); 
      //params.add(new BasicNameValuePair("pass", "xyz")); 
      UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params,HTTP.UTF_8); 
      post.setEntity(ent); 
      HttpResponse responsePOST = client.execute(post); 
      HttpEntity resEntity = responsePOST.getEntity(); 
      if (resEntity != null) {  
       //Log.i("RESPONSE",EntityUtils.toString(resEntity)); 
       buffer = new StringBuffer(""); 
       buffer.append(EntityUtils.toString(resEntity)); 

      } 

      String String1= buffer.toString(); 
      Log.i("string-----",String1); 
      tv.append(String1); 



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

    try { 
     HttpClient client = new DefaultHttpClient(); 
     String getURL = "http://10.0.2.2:8080/nik/DBConnection?UID=patients"; 
     HttpGet get = new HttpGet(getURL); 
     HttpResponse responseGet = client.execute(get); 
     HttpEntity resEntityGet = responseGet.getEntity(); 
     if (resEntityGet != null) { 
        //do something with the response 
        Log.i("GET RESPONSE",EntityUtils.toString(resEntityGet)); 

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

而且這是我收到漢斯先生談的結果 「 」S2234567「, 」75945422「, 」20-11-1971「, 」慢性Hepatatis C「, 」利巴韋林400毫克「,」 8" ,‘Ward3A-1,301’,但我需要解析它,所以請任何幫助將提前瞭解.Thanks

+0

好的我會去做 –

+0

對於同一個主題,SO上已經存在很多問題:[Android JSON解析] –

+0

還有FYI ,這裏有一個詳細的例子:[Android - JSON解析示例](http://www.technotalkative.com/?p=1413) –

回答

2

您將使用的JSONObject和/或JSONArray類來解析在Android JSON數據。

基本用法是這樣的:

JSONObject jsonObject = new JSONObject(myJsonDataString); 

JSONArray jsonArray = new JSONArray(myJsonDataString); 

您可以在Android開發者頁面上使用更多的信息,特別是herehere

小心:格式爲「[{'key':''value'}]」(我正在談論[]')的數據必須用JSONArray解析,否則你會得到一個JSONException異常,說你的數據不是JSONObject。