【问题标题】:Posting Data from android to wcf将数据从 android 发布到 wcf
【发布时间】:2015-04-27 16:41:52
【问题描述】:

我正在尝试将数据从 android 发布到 wcf,但它给出的消息不正确 ,我能够从服务中检索数据....但无法发布... 这是代码:

HttpPost request = new HttpPost(http://xxx.xxx.x.xx/JsonWcfService/GetEmployees.svc/json/addemp); request.setHeader("接受", "应用程序/json"); request.setHeader("内容类型", "应用程序/json"); 字符串文本 = ""; String not = new String(" ");

try {
    // Build JSON string
    JSONStringer vehicle = new JSONStringer()
        .object()
        .key("rData")
        .object()
        .key("details").value("241|b@h.us|why")
        .endObject()
        .endObject();

    StringEntity entity = new StringEntity(vehicle.toString());

    Toast.makeText(MainActivity.this, vehicle.toString() + "\n", Toast.LENGTH_LONG).show();

    request.setEntity(entity);

    // Send request to WCF service
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpResponse response = httpClient.execute(request);
    // Log.d("WebInvoke", "Saving : " + response.getStatusLine().getStatusCode());
    Toast.makeText(MainActivity.this, response.getStatusLine().getStatusCode() + "\n", Toast.LENGTH_LONG).show();
    Stext = response.getStatusLine().toString();
} catch (Exception e) {
    not = "NOT ";
    e.printStackTrace();
}

Toast.makeText(MainActivity.this, not + " OK ! " + "\n" + Stext, Toast.LENGTH_LONG).show();

以下是服务:

[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "json/addemp")]
 bool AddJsonUser(RequestData rData);

public bool AddUser(RequestData rData) {
    bool returnBool = false;

    var data = rData.details.Split('|');
    var response = new EmployeeData {
        empid = data[0],
        empname = data[1],
        emppass = data[2],
    };

    OracleConnection dbConn = new OracleConnection("Data Source=xxx;User Id=xxx;Password=xxxx");
    //string sqlStr = "INSERT INTO signup_table('user_id','user_firstname','user_pass') values('" + data[0] + "', '" + data[1] + "', '" + data[2] +"');";

    string p_name = "signup_proc";
    OracleCommand cmnd = new OracleCommand(p_name, dbConn);
    cmnd.CommandType = CommandType.StoredProcedure;
    cmnd.Parameters.Add("u_id", OracleDbType.Int32).Value = Convert.ToInt32(data[0]);
    cmnd.Parameters.Add("u_name", OracleDbType.Varchar2).Value = data[1];
    cmnd.Parameters.Add("u_pass", OracleDbType.Varchar2).Value = data[2];
    try {
        dbConn.Open();
        if (cmnd.ExecuteNonQuery() != 0) {
            returnBool = true;
        }
        dbConn.Close();
    } catch {
        returnBool = false;
    }
    return returnBool;
}

public bool AddJsonUser(RequestData rData) {
    return AddUser(rData);
}

请帮忙,我不知道发生了什么......

这是logcat.....

04-27 04:23:44.930: D/LightsService(389): Excessive delay setting light: 54ms
04-27 04:23:45.260: D/LightsService(389): Excessive delay setting light: 53ms
04-27 04:23:45.390: D/LightsService(389): Excessive delay setting light: 121ms
04-27 04:23:45.420: E/SoundPool(389): error loading /system/media/audio/ui/Effect_Tick.ogg
04-27 04:23:45.420: W/AudioService(389): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
04-27 04:23:45.420: E/SoundPool(389): error loading /system/media/audio/ui/Effect_Tick.ogg
04-27 04:23:45.420: W/AudioService(389): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
04-27 04:23:45.450: E/SoundPool(389): error loading /system/media/audio/ui/Effect_Tick.ogg
04-27 04:23:45.460: W/AudioService(389): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
04-27 04:23:45.460: E/SoundPool(389): error loading /system/media/audio/ui/Effect_Tick.ogg
04-27 04:23:45.460: W/AudioService(389): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
04-27 04:23:45.460: E/SoundPool(389): error loading /system/media/audio/ui/Effect_Tick.ogg
04-27 04:23:45.490: W/AudioService(389): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
04-27 04:23:45.510: E/SoundPool(389): error loading /system/media/audio/ui/KeypressStandard.ogg
04-27 04:23:45.510: W/AudioService(389): Soundpool could not load file: /system/media/audio/ui/KeypressStandard.ogg
04-27 04:23:45.510: E/SoundPool(389): error loading /system/media/audio/ui/KeypressSpacebar.ogg
04-27 04:23:45.520: W/AudioService(389): Soundpool could not load file: /system/media/audio/ui/KeypressSpacebar.ogg
04-27 04:23:45.520: E/SoundPool(389): error loading /system/media/audio/ui/KeypressDelete.ogg
04-27 04:23:45.520: W/AudioService(389): Soundpool could not load file: /system/media/audio/ui/KeypressDelete.ogg
04-27 04:23:45.520: E/SoundPool(389): error loading /system/media/audio/ui/KeypressReturn.ogg
04-27 04:23:45.530: W/AudioService(389): Soundpool could not load file: /system/media/audio/ui/KeypressReturn.ogg
04-27 04:23:45.530: E/SoundPool(389): error loading /system/media/audio/ui/KeypressInvalid.ogg
04-27 04:23:45.530: W/AudioService(389): Soundpool could not load file: /system/media/audio/ui/KeypressInvalid.ogg
04-27 04:23:45.530: W/AudioService(389): onLoadSoundEffects(), Error -1 while loading samples
04-27 04:23:45.580: W/System.err(1171): android.os.NetworkOnMainThreadException
04-27 04:23:45.590: W/System.err(1171):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
04-27 04:23:45.610: W/System.err(1171):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
04-27 04:23:45.620: W/System.err(1171):     at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
04-27 04:23:45.630: W/System.err(1171):     at libcore.io.IoBridge.connect(IoBridge.java:112)
04-27 04:23:45.630: W/System.err(1171):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
04-27 04:23:45.630: W/System.err(1171):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
04-27 04:23:45.630: W/System.err(1171):     at java.net.Socket.connect(Socket.java:843)
04-27 04:23:45.640: W/System.err(1171):     at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
04-27 04:23:45.640: W/System.err(1171):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
04-27 04:23:45.640: W/System.err(1171):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
04-27 04:23:45.640: W/System.err(1171):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
04-27 04:23:45.640: W/System.err(1171):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
04-27 04:23:45.640: W/System.err(1171):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
04-27 04:23:45.640: W/System.err(1171):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
04-27 04:23:45.640: W/System.err(1171):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
04-27 04:23:45.640: W/System.err(1171):     at com.rhs.postdata.MainActivity$1.onClick(MainActivity.java:63)
04-27 04:23:45.640: W/System.err(1171):     at android.view.View.performClick(View.java:4438)
04-27 04:23:45.660: W/System.err(1171):     at android.view.View$PerformClick.run(View.java:18422)
04-27 04:23:45.660: W/System.err(1171):     at android.os.Handler.handleCallback(Handler.java:733)
04-27 04:23:45.660: W/System.err(1171):     at android.os.Handler.dispatchMessage(Handler.java:95)
04-27 04:23:45.660: W/System.err(1171):     at android.os.Looper.loop(Looper.java:136)
04-27 04:23:45.680: W/System.err(1171):     at android.app.ActivityThread.main(ActivityThread.java:5017)
04-27 04:23:45.680: W/System.err(1171):     at java.lang.reflect.Method.invokeNative(Native Method)
04-27 04:23:45.680: W/System.err(1171):     at java.lang.reflect.Method.invoke(Method.java:515)
04-27 04:23:45.700: W/System.err(1171):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-27 04:23:45.710: W/System.err(1171):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-27 04:23:45.710: W/System.err(1171):     at dalvik.system.NativeStart.main(Native Method)
04-27 04:23:46.960: D/dalvikvm(525): GC_FOR_ALLOC freed 594K, 17% free 3327K/4000K, paused 161ms, total 165ms
04-27 04:24:46.770: D/LightsService(389): Excessive delay setting light: 65ms
04-27 04:25:18.790: D/ConnectivityService(389): Sampling interval elapsed, updating statistics ..
04-27 04:25:18.900: D/ConnectivityService(389): Done.
04-27 04:25:18.900: D/ConnectivityService(389): Setting timer for 720seconds

【问题讨论】:

  • ..but can't post it.i can't figure out what is happering。好吧,从你开始!什么不完全有效?哪些代码被执行,哪些不被执行?错误?例外?你看过logcat吗?它会告诉你很多。
  • 我试图以这种方式弄清楚....int var = response.getStatusLine().getStatusCode();它给了我 400。
  • 然后呢?你期待/看到/得出什么结论? 400 是什么意思?那条线在哪里?我没看到。
  • 我期望代码 http 响应代码 200,但它给了我 http 响应代码 400,这意味着请求错误....
  • 请发布logcat。

标签: android wcf


【解决方案1】:

logcat 告诉你你有一个NetworkOnMainThreadException。将您的网络/http 代码放在 AsyncTask 或线程中。从您的代码中删除 Toast()。

【讨论】:

  • 谢谢你的回复......我会把它放在 asynctask 中......但根据 momo 的评论,我已经通过我的浏览器休息插件提出了一些请求......但它给了我错误的请求状态和一条消息......这是“服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志。”......在这种情况下我应该怎么做.......
  • 在这种情况下,您应该查看服务器日志;-)。你在哪个浏览器中使用了什么样的rest插件?但是先把你的代码放在一个 AsyncTask 中,看看你得到什么样的错误/回复。
  • 只需在您的 wcf-webservice 中设置几个断点,然后逐步执行代码。也许有一些 NullPointerException。除了上面的响应,还可以考虑使用现代的 HttpUrlConnection 类而不是旧的 DefaultHttpClient 或者使用像 Retrofit 这样的网络库。
  • 感谢大家.....您的友好回应......我终于解决了......主要问题在我的 .dll 文件中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
相关资源
最近更新 更多