2014-02-05 4 views
0

내가 안드로이드에 새로운 오전과 내가 안드로이드의 제공 널 포인터 예외에서 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 될 것이다

을 거부합니다. 감사합니다.

+0

은 NetworkOnMainThread 문제입니까? –

+0

@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

+0

그래, 메인 스레드에서 AsyncTask의 일부 http 연결 자습서를 보시기 바랍니다 –

답변

1

그렇지 않으면 다음 조언을 제공 할 수 있습니다. 한 가지 방법으로 전체 클래스 (JSONParser)가 필요하지 않습니다. 그냥 MainActivity에 메소드와 변수를 추가하십시오.

EDIT : 실제로 Android 기기 또는 에뮬레이터를 사용하고 있습니까? 에뮬레이터를 사용하는 경우 10.0.2.2를 사용하여 호스트 컴퓨터에 액세스 할 수 있습니다. URL을 http : //10.0.2.2.146 : 8888/Lera.Template.Services.WCF/UserService/GetName으로 변경하십시오.

+0

편집 된 주요 활동 후에 jsonparser 클래스를 더 이상 사용하지 않고 스택 트랙을 제공합니다. – TejoVikas

+0

네, 그렇게하십시오. 그리고 SERVICE_URI를 http://192.168.12.146:8888/Lera.Template.Services.WCF/UserService/GetName으로 변경하고 싶을 수도 있습니다. – Hbibna

+0

의견을 보내 주셔서 감사 드리며, 제 문제를 해결하고 모든 것을 재 작성했습니다. 이제는 정상적으로 작동합니다. – TejoVikas