gpt4 book ai didi

c# - 访问.net wcf服务时出现空指针异常

转载 作者:行者123 更新时间:2023-12-01 13:30:58 26 4
gpt4 key购买 nike

我是 Android 新手,我正在尝试从 android 访问 wcf 服务,它给出了空指针异常,这是我的 .net wcf 服务 IUserService

[ServiceContract]
public interface IUserService
{ [OperationContract]
[WebInvoke(Method="GET",ResponseFormat = WebMessageFormat.Json,UriTemplate = "GetName")]
string GetName();
}

这是我的用户服务

public class UserService : IUserService
{
public string GetName()
{
return "Hello ! ";
}
}

这是我的 xml

 <service name="Lera.Template.Services.WCF.UserService">
<endpoint address="" binding="webHttpBinding" contract="Lera.Template.Services.WCF.IUserService"
behaviorConfiguration="httpBehavior">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8888/Lera.Template.Services.WCF/UserService/" />
</baseAddresses>
</host>
</service>

我正在使用eclipse这是我的主要 Activity

public class MainActivity extends Activity {

private String values ="";
Button btn;
TextView tv;
private static String url = "http://192.168.12.146:8888/Lera.Template.Services.WCF/UserService/GetName";
private static final String StringVal = "StringValue";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


JSONParser jParser = new JSONParser();

// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl(url);
try {

String temp = json.getString(StringVal);
Toast toast = Toast.makeText(this ,temp , Toast.LENGTH_SHORT);
toast.show();

}

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

catch (Exception ex) {
Log.e("final:", ex.toString());
}

}
}

我正在使用 json 解析器类 公共(public)类 JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url) {

// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);

HttpResponse httpResponse = httpClient.execute(httpget);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
Log.e("connection" , e.toString());
}

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();//here json type is string
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}

// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}

// return JSON String
return jObj;

}
}

Wcf 服务在浏览器上工作正常,但当我尝试从 Android 应用程序访问时,它给出空指针异常

给出空指针异常的行是

HttpResponse httpResponse = httpClient.execute(httpget); 

请帮我解决这个问题,我已经尝试了网上所有可用的方法,但仍然无法克服这个问题。

作为 A.S.提到我更新了我的主要 Activity 类(class)这是我与异步调用的主要 Activity ,但异常(exception)是 与 url 的连接被拒绝

public class MainActivity extends Activity implements OnClickListener {

private String values ="";
Button btn;
TextView tv;
String uri = "http://192.168.0.144:8888/Lera.Template.Services.WCF/UserService/GetName";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button)this.findViewById(R.id.btnAccess);
tv = (TextView)this.findViewById(R.id.tvAccess);
btn.setOnClickListener(this);
}

@Override
public void onClick(View arg0) {
try
{
AsyncTaskExample task = new AsyncTaskExample(this);
task.execute("");
String test = values;
tv.setText(values);
} catch(Exception e)
{
Log.e("Click Exception: ", e.getMessage());
}

}

public class AsyncTaskExample extends AsyncTask<String, Void,String>
{
private String Result="";
//private final static String SERVICE_URI = "http://10.0.2.2:8889";
private final static String SERVICE_URI = "http://192.168.12.146:8888/Lera.Template.Services.WCF/UserService";
private MainActivity host;
public AsyncTaskExample(MainActivity host)
{
this.host = host;
}

public String GetSEssion(String URL)
{
boolean isValid = true;
if(isValid)
{

HttpClient client = new DefaultHttpClient();
//http://192.168.0.144:8888/Lera.Template.Services.WCF/UserService/
// HttpPost post = new HttpPost(uri);
HttpGet httpget = new HttpGet(uri);
httpget.setHeader("Accept", "application/json");
httpget.setHeader("Content-type", "application/json; charset=utf-8");

try
{
HttpResponse response = client.execute(httpget) ;
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line ="";
while((line = rd.readLine()) != null)
{
System.out.println(line);
}
}catch(Exception e)
{
Log.e("Error:", e.getMessage());

}
}
return Result;
}

@Override
protected String doInBackground(String... arg0) {
android.os.Debug.waitForDebugger();
String t = GetSEssion(SERVICE_URI);
return t;
}

@Override
protected void onPostExecute(String result) {
// host.values = Result;
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}

@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
}
}

}

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

否则我可以给您以下建议:仅一种方法不需要整个类(JSONParser)。只需将方法和变量添加到 MainActivity 中即可。

编辑:实际上你使用的是安卓设备还是模拟器?如果您使用模拟器,则可以使用 10.0.2.2 访问您的主机。您可以将网址更改为 http://10.0.2.2.146:8888/Lera.Template.Services.WCF/UserService/GetName

关于c# - 访问.net wcf服务时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21575959/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com