Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过WCF和Android的JSON对象_Android_Json_Wcf_Parsing_Post - Fatal编程技术网

通过WCF和Android的JSON对象

通过WCF和Android的JSON对象,android,json,wcf,parsing,post,Android,Json,Wcf,Parsing,Post,以下是客户端AndroidMainActivity.java文件: import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.ht

以下是客户端AndroidMainActivity.java文件:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.json.JSONException;
import org.json.JSONStringer;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.e("oncreate ", "girdi");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText username = (EditText) findViewById(R.id.usernameEditText);

        final EditText password = (EditText) findViewById(R.id.passwordEditText);
        Button sendBtn = (Button) findViewById(R.id.sendBtn);

        sendBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
            HttpPost request = new HttpPost("http://10.0.2.2:8732/Design_Time_Addresses/MyWCFSolution/Service1/Check");
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");

            // Build JSON string
            JSONStringer userJson=null;
            try {
                userJson = new JSONStringer()
                    .object()
                       .key("user")
                          .object()
                         .key("Username").value(username.getText().toString())                                                                                                                                                        
                         .key("Password").value(password.getText().toString())                                                     
                         .key("Name").value(password.getText().toString())
                          .endObject()
                       .endObject();
                Log.e("json", "json created");
            } catch (JSONException e) {

                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            StringEntity entity=null;
            try {
                entity = new StringEntity(userJson.toString(),"UTF-8");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }                                                
            entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
            entity.setContentType("application/json");

            request.setEntity(entity);

            // Send request to WCF service
            DefaultHttpClient httpClient = new DefaultHttpClient();


            try {
                Log.e("response", "connect");
                HttpResponse response = httpClient.execute(request);

                Log.e("response","response get"+response.toString());
                //System.out.println(response.toString());


                BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
                String json = reader.readLine();

                Log.e("json string","test "+json.toString()+" lazım");
                System.out.println(json);
                //JSONTokener tokener = new JSONTokener(json);
                //JSONArray finalResult = new JSONArray(tokener);


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

    });

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}
服务器端:

App.config:

IService.cs:

User.cs:

opUser.cs:

以下是Eclipse中运行Android应用程序的日志:

01-11 22:50:43.344:E/oncreate(457):girdi 01-11 22:50:48.955:W/KeyCharacterMap(457):id 0没有键盘 01-11 22:50:48.955:W/KeyCharacterMap(457):使用默认keymap:/system/usr/keychars/qwerty.kcm.bin 01-11 22:50:50.935:E/json(457):json已创建 01-11 22:50:50.944:E/应答(457):连接 01-11 22:50:51.164:E/response(457):response getorg.apache.http.message。BasicHttpResponse@405722d0 01-11 22:50:51.174:W/System.err(457):java.lang.NullPointerException 01-11 22:50:51.184:W/System.err(457):位于com.example.logapp.MainActivity$1.onClick(MainActivity.java:95) 01-11 22:50:51.184:W/System.err(457):在android.view.view.performClick(view.java:2485)上 01-11 22:50:51.184:W/System.err(457):在android.view.view.onKeyUp上(view.java:4257) 01-11 22:50:51.184:W/System.err(457):位于android.widget.TextView.onKeyUp(TextView.java:4566) 01-11 22:50:51.184:W/System.err(457):在android.view.KeyEvent.dispatch(KeyEvent.java:1280)上 01-11 22:50:51.184:W/System.err(457):在android.view.view.dispatchKeyEvent(view.java:3855)上 01-11 22:50:51.184:W/System.err(457):在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)上 01-11 22:50:51.184:W/System.err(457):在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)上 01-11 22:50:51.184:W/System.err(457):在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)上 01-11 22:50:51.194:W/System.err(457):在android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)上 01-11 22:50:51.194:W/System.err(457):位于com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1687) 01-11 22:50:51.194:W/System.err(457):位于com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1120) 01-11 22:50:51.194:W/System.err(457):在android.app.Activity.dispatchKeyEvent(Activity.java:2073)中 01-11 22:50:51.194:W/System.err(457):位于com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1663) 01-11 22:50:51.194:W/System.err(457):位于android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2560) 01-11 22:50:51.194:W/System.err(457):在android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2535) 01-11 22:50:51.204:W/System.err(457):在android.view.ViewRoot.handleMessage(ViewRoot.java:1867)中 01-11 22:50:51.204:W/System.err(457):位于android.os.Handler.dispatchMessage(Handler.java:99) 01-11 22:50:51.204:W/System.err(457):位于android.os.Looper.loop(Looper.java:123) 01-11 22:50:51.204:W/System.err(457):位于android.app.ActivityThread.main(ActivityThread.java:3683) 01-11 22:50:51.204:W/System.err(457):位于java.lang.reflect.Method.invokenactive(本机方法) 01-11 22:50:51.204:W/System.err(457):位于java.lang.reflect.Method.invoke(Method.java:507) 01-11 22:50:51.215:W/System.err(457):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 01-11 22:50:51.215:W/System.err(457):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 01-11 22:50:51.215:W/System.err(457):在dalvik.System.NativeStart.main(本机方法)


HTTP正在执行。我的意思是,响应来自服务器,但我无法获取JSON数据。我尝试使用
System.out.print
编写json数据,但没有成功。Http连接正在工作,但无法获取JSON。为什么会这样?我在这个异常上工作了几天,但没有找到。有人知道吗?

下面这行的输出是什么

        Log.e("response","response get"+response.toString());
。。。只需检查http请求的responseCode,如果responseCode是200,那么就可以了

  HttpResponse response = client.execute(httpGet);
      StatusLine statusLine = response.getStatusLine();
      int statusCode = statusLine.getStatusCode();
      if (statusCode == 200) {
        HttpEntity entity = response.getEntity();
        InputStream content = entity.getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(content));
        String line;
        while ((line = reader.readLine()) != null) {
          builder.append(line);
        }
      } else {
        Log.e(ParseJSON.class.toString(), "Failed to download file");
      }

我相信响应代码可能不同,这就是为什么你看不到json响应的原因

响应代码通常是3位代码,我不确定你为什么会得到5位代码。你可以下载一个名为fiddler的工具,分析从android emulator到服务器的所有流量。即使是这个工具也能帮助你找到确切的问题。还有其他解决方案吗?我会努力找出确切的问题。你有关于这个问题的例子吗?下面是你问题的答案(我在问题中写道)org.apache.http.message。BasicHttpResponse@405722d0Are你确定回复代码是什么?您是否在catch块中放置了一些日志,以确保没有异常,以确保我们没有错过。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    using System.ServiceModel.Web;


    namespace MyWCFSolution
    {

        [ServiceContract]
        public interface IService1
        {
            [OperationContract]
            string CheckSQL(User user);

        }
    }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace MyWCFSolution
{

    public class User
    {
        private Int64 _AutoID;
        private string _Username;
        private string _Password;
        private string _Name;
        private string _Surname;

        public Int64 AutoID { get { return _AutoID; } set { _AutoID = value; } }
        public string Username { get { return _Username; } set { _Username = value; } }
        public string Password { get { return _Password; } set { _Password = value; } }
        public string Name { get { return _Name; } set { _Name = value; } }
        public string Surname { get { return _Surname; } set { _Surname = value; } }
    }

    public class UserList : CollectionBase
    {
        public User this[int index]
        {
            get { return this.List[index] as User; }
        }
        public void Add(User obj)
        {
            this.List.Add(obj);
        }
        public int IndexOf(User obj)
        {
            return this.List.IndexOf(obj);
        }
    }

}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace MyWCFSolution
{
    public class opUser
    {
        public User GetUser(User UserD)
        {
            UserList Result = new UserList();
            System.Data.SqlClient.SqlConnection conn = Connection.ConnectToSql();
            User temp = new User();
            try
            {
                conn.Open();

                SqlCommand sqlCommSelect = new SqlCommand("dbo.spSelectUserByPassword", conn);
                sqlCommSelect.CommandType = CommandType.StoredProcedure;
                SqlParameter[] sqlParams = new SqlParameter[] { 
                    new SqlParameter("@Username",UserD.Username ),                   
                    new SqlParameter("@Password",UserD.Password )
                };
                sqlCommSelect.Parameters.AddRange(sqlParams);


                SqlDataReader dr = sqlCommSelect.ExecuteReader();

                while (dr.Read())
                {
                    temp.Name = Convert.ToString(dr["Name"]);
                    temp.Surname = Convert.ToString(dr["Surname"]);

                }
                dr.Close();
                conn.Close();

            }
            catch (Exception exx)
            {
                conn.Close();
                Result = null;

            }
            return temp;
        }

    }
}
        Log.e("response","response get"+response.toString());
  HttpResponse response = client.execute(httpGet);
      StatusLine statusLine = response.getStatusLine();
      int statusCode = statusLine.getStatusCode();
      if (statusCode == 200) {
        HttpEntity entity = response.getEntity();
        InputStream content = entity.getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(content));
        String line;
        while ((line = reader.readLine()) != null) {
          builder.append(line);
        }
      } else {
        Log.e(ParseJSON.class.toString(), "Failed to download file");
      }