android - 通过 Web 服务将数据从 Android 应用程序输入数据库

标签 android asp.net json web-services httprequest

我正在开发一个 Android 代码,点击一个按钮就可以通过网络服务将数据插入远程数据库。我的 Web 服务代码非常简单。它只接受一个参数,即 android Spinner 值并将该值插入数据库

我已使用 HttpClient 发帖,但无法成功完成我的任务。谁能帮我解决这个问题?

这是网络服务代码:

           using System;
           using System.Collections;
           using System.ComponentModel;
           using System.Data;
           using System.Linq;
           using System.Web;
           using System.Web.Services;
           using System.Web.Services.Protocols;
           using System.Xml.Linq;
           using System.Data.SqlClient;


      namespace putdata
          {
        /// <summary>
      /// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{

    [WebMethod]
    public String put(String value)
    {
        int count=1;
        int rows;

        SqlConnection myConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=123");
        try
        {
            myConnection.Open();
            count++;
            SqlCommand myCommand = new SqlCommand();
            myCommand.Connection = myConnection;
            myCommand.CommandText = "insert into record values('"+ count +"','" + value + "')";
            myCommand.Parameters.Add("@value", SqlDbType.VarChar).Value = value;
            rows = myCommand.ExecuteNonQuery();
            SqlDataReader myReader = myCommand.ExecuteReader();

          }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            myConnection.Close();
        }

        return "success";
    }

       }
     }

这是我的 Android 代码的主要逻辑:

           public void onClick(View v) {

        String spinnerval1="";
        String spinnerval2="";

        // Perform action on clicks
        Toast.makeText(Mark.this, "calling web service", Toast.LENGTH_LONG).show();
         if (v == findViewById(R.id.button)) {
             // prepare the dialog box
            Button progress = (Button) findViewById(R.id.button);
            progress.setOnClickListener((OnClickListener) Mark.this);

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://10.0.2.2/enterdata/Service1.asmx");


            try
            {
            String result;
            JSONObject obj = new JSONObject();
            obj.put("Maths",spinnerval1);
            obj.put("Science",spinnerval2);


            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("value1", spinnerval1));
            nameValuePairs.add(new BasicNameValuePair("value2", spinnerval2));
            httppost.setEntity((HttpEntity) new UrlEncodedFormEntity(nameValuePairs));

            // Execute HTTP Post Request
            HttpResponse httpResponse = httpclient.execute(httppost);
            HttpEntity httpEntity = httpResponse.getEntity();

            if (httpEntity != null) 
            {
                InputStream is = httpEntity.getContent();
                result = is.toString();
                Log.i("Result is ", "Result: " + result);
            }

            }

            catch (ClientProtocolException e1) 
            {
                // TODO Auto-generated catch block
            }
            catch (IOException e) {
                // TODO Auto-generated catch block
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }



            ProgressDialog dialog=new ProgressDialog(Mark.this);

             // make the progress bar cancelable
             dialog.setCancelable(true);

             // set a message text
             dialog.setMessage("Loading...");

             dialog.show();

         }

    }     

这是日志:

    11-07 12:20:28.970: INFO/ActivityManager(58): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example/.Mark }

    11-07 12:20:29.361: DEBUG/AndroidRuntime(299): Shutting down VM
    11-07 12:20:29.390: DEBUG/dalvikvm(299): Debugger has detached; object registry had 1 entries
    11-07 12:20:29.460: INFO/AndroidRuntime(299): NOTE: attach of thread 'Binder Thread #3' failed
    11-07 12:20:29.470: INFO/ActivityManager(58): Start proc com.example for activity com.example/.Mark: pid=306 uid=10060 gids={3003, 1015}
    11-07 12:20:31.170: INFO/ActivityManager(58): Displayed activity com.example/.Mark: 1809 ms (total 1809 ms)
   11-07 12:20:39.341: DEBUG/dalvikvm(127): GC_EXPLICIT freed 1321 objects / 73848 bytes in 161ms
   11-07 12:20:40.981: WARN/InputManagerService(58): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@45004b40
   11-07 12:20:44.440: DEBUG/dalvikvm(201): GC_EXPLICIT freed 109 objects / 9024 bytes in 190ms 
   11-07 12:20:48.840: INFO/Result is(306): Result: org.apache.http.conn.EofSensorInputStream@44f4a4f8
   11-07 12:20:50.490: DEBUG/dalvikvm(260): GC_EXPLICIT freed 759 objects / 54952 bytes in 1185ms

最佳答案

您很可能缺少这些行:(在 httpclient.execute 之前添加它们)

httppost.setHeader("Accept", "application/json");
     httppost.setHeader("Content-type", "application/json"); OR 

     httppost.setHeader("Content-type", "application/x-www-form-urlencoded");

关于android - 通过 Web 服务将数据从 Android 应用程序输入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8033681/

相关文章:

java - 设置操作栏标题颜色时不推荐使用 Html.fromHtml

asp.net - 在线用户数

Java android JsonArray 解析器

c# - REST WCF 服务 - 差异数据输入格式 (JSON/XML)

android - 圆形按钮组 View

android ListActivity 不适用于自定义适配器

asp.net - 加载数据库图像的最佳方法

c# - 序列化 ASP.NET Web 服务 HTTP POST 请求结果

android - 无法读取解析推送通知包数据

java - 如何向applandeo calenderView中的事件添加数据?