내가 안드로이드에 새로운 오전과 내가 안드로이드의 제공 널 포인터 예외에서 WCF 서비스에 액세스하려고은 여기널 포인터 예외 동안
[ServiceContract]
public interface IUserService
{ [OperationContract]
[WebInvoke(Method="GET",ResponseFormat = WebMessageFormat.Json,UriTemplate = "GetName")]
string GetName();
}
여기 내 .NET WCF 서비스 IUserService입니다 내 UserService 여기
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>
I입니다 여기 일식 을 사용하고하는 것은
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 파서 클래스를 내 안드로이드에서 액세스하려고 할 때
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 서비스는 브라우저에서 잘 작동되지만 { 공용 클래스 JSONParser을 사용하고 내 주요 활동 응용 프로그램의 기부 널 포인터 예외
널 포인터 예외를주고 라인은
입니다이 문제를 해결하는 데 도움을주세요. 인터넷에서 사용할 수있는 모든 것을 시도했지만 여전히이를 극복 할 수 없습니다.
A.S. 여기 내 주요 활동 클래스 업데이트는 말할 것은 비동기 호출 내 주요 활동하지만 예외는 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();
}
}
}
어떤 도움 appriciated 될 것이다
을 거부합니다. 감사합니다.
은 NetworkOnMainThread 문제입니까? –
@AS : 응답을 위해 고맙습니다. 예외는 다음과 같습니다. 02-05 06 : 30 : 26.695 : E/connection (3229) : org.apache.http.conn.HttpHostConnectException : http://192.168.0.144에 연결 : 80 refused 02-05 06 : 30 : 30.135 : E/버퍼 오류 (3229) : 결과 변환 오류 java.lang.NullPointerException : lock == null 02-05 06 : 30 : 31.485 : E/JSON Parser (3229) : 데이터를 파싱하는 중 오류가 발생했습니다. org.json.JSONException : 의 문자 0에서 끝납니다. 02-05 06 : 30 : 34.745 : E/최종 : (3229) : java.lang.NullPointerException – TejoVikas
그래, 메인 스레드에서 AsyncTask의 일부 http 연결 자습서를 보시기 바랍니다 –