0

サーバーデータベースからAndroidのローカルSQLiteデータベーステーブルにデータをコピーする必要があるアプリケーションを開発しています。テーブルには1000を超えるレコードが含まれています。まず、このためのサーブレットコードを作成しました。私は3つの配列(村の名前、村のコード、部門コード)を使用しています。私のコードは

public class vlgmas extends HttpServlet {
 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        // TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet vlgmas</title>");  
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet vlgmas at " + request.getContextPath () + "</h1>");
        out.println("</body>");
        out.println("</html>");

    } finally {            
        out.close();
    }
}


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
     try {

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet Pickvalue</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet Pick at " + request.getContextPath () + "</h1>");
        doPost(request,response);
        out.println("</body>");
        out.println("</html>");

    } finally
    {
        out.close();
    }
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //processRequest(request, response);
    String vname = null,vcode=null,divsec=null;
    JSONObject obj = new JSONObject();
    List list = new ArrayList();
    JSONObject obj2 = new JSONObject();
    PrintWriter out = response.getWriter();
    String vn[]=new String[2000],vc[]=new String[2000],ds[]=new String[2000];
    int t,r1=0,r2=0,r3=0;
    try
    {
       //   JSONObject obj1=new JSONObject();

        Class.forName("oracle.jdbc.driver.OracleDriver");
    java.sql.Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.200:1521:pdsm", "test", "test");
    Statement stmt=conn.createStatement();

        {
        ResultSet rs = stmt.executeQuery("select * from cn_vlgmas");
        while(rs.next())
        {
            vn[r1++]=rs.getString ("vlgname");
            vc[r2++]=rs.getString("vlgcode");
            ds[r3++]=rs.getString("divsec");

        }
        for(t=0;t<r1;t++)
            {
                out.println(vn[t]+","+vc[t]+","+ds[t]);
            }

            /*obj.put("vname",vname);
            obj.put("vcode", vcode);
            obj.put("divsec", divsec);
            list.add(obj);
            obj2.accumulate("get", list);
            out.println(obj2);*/
        }

    }catch(Exception e)
    {
        out.println("error"+e.toString());
    }
}

/** 
 * Returns a short description of the servlet.
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>
}

それは私が期待したようにすべての詳細を示しています。しかし、Androidコードでこれらの3つの配列を個別に取得する方法がわかりません。1000レコードごとに、すべての村の名前、村のコード、および部門コードを取得する必要があります。誰かが私がこれをするのを手伝ってくれます。

前もって感謝します

4

3 に答える 3

1

配列を作成する必要はありません。JSONオブジェクトを渡すだけです。

forループを削除し、whileループを次のように変更します。

while(rs.next())
{
        obj = new JSONObject();
        vname=rs.getString ("vlgname");
        vcode=rs.getString("vlgcode");
        divsec=rs.getString("divsec");
        obj.put("vname",vname);
        obj.put("vcode",vcode);
        obj.put("divsec",divsec);
        list.add(obj);
}
obj2.accumulate("get", list);
out.println(obj2); 

あなたのアンドロイドで

try
{
HttpClient httpclient = new DefaultHttpClient();
         HttpPost httppost = new HttpPost("servlet path here");
         HttpResponse response = httpclient.execute(httppost);
         HttpEntity entity = response.getEntity();
          is = entity.getContent();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 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) {
    Toast.makeText(getBaseContext(), "Buffer Error"+"Error converting result"+e.toString(), Toast.LENGTH_LONG).show();
    }

    try {
        jObj = new JSONObject(json);
        contacts = jObj.getJSONArray("get");
        for(int i = 0; i < contacts.length(); i++){
        JSONObject c = contacts.getJSONObject(i);
            vcode = c.getString("vcode");
            vname = c.getString("vname");
            divsec = c.getString("divsec");
        }
        ac1.setText(""+vname);
        ac2.setText(""+vcode);
        ac3.setText(""+divsec);

    } catch (JSONException e) {
        Toast.makeText(getBaseContext(), "Error"+e.toString(), Toast.LENGTH_LONG).show();
    }

これが本当にあなたを助けることを願っています

于 2013-01-31T09:45:49.243 に答える
0

これらの値を取得するためのwebServiceを作成しましたか?Androidでは、Webサービスを呼び出して必要なものを取得する唯一の構造だからです。

DBからデータを取得したら、JSONオブジェクトを準備するだけです。そしてそれを書き戻します。Androidでは、そのJSONオブジェクトを解析する必要があります。

developer.androidからの小さなチュートリアル

于 2013-01-31T06:24:23.333 に答える