2015-02-06 3 views
0

안녕 내 안드로이드 프로젝트는GET 값은

는 위도와 경도을 제공
  • GPSTracker.java 클래스는 ADRESS API에서 JSON을 얻을
  • RemoteFetch.java 클래스는 입니다 입니다 정적 상태에
  • MainActivity.java 하지만 JSON을 얻을 수있는 URL은 같다 :

    개인 정적 최종 문자열 OPEN_WEATHER_MAP_API = "http://api.openweathermap.org/data/2.5/weather? " + "q = % s &"+ "lat ="+ "& lon ="+ "& 단위 = 미터법";

내 위도와 경도가 GPSTracker에 있지만, 나는 그들을 받고 있어요 때 그들이 정적 형식이 아닌 것 같은 날이 값을 가지 않도록 ...

그래서 내가 openweatherapi URL에 오류를 추가하자마자 오류가 발생합니다.

"정적 필드가 아닌 정적 필드는 정적 컨텍스트에서 참조 할 수 없습니다."

문자열/int 형식을 정적 형식으로 "캐스팅"할 수있는 방법이 있습니까 ??

더 많은 정보가 필요하면 제발 저에게하십시오. 여기

RemoteFetch.java에서 일부 코드

private void updateWeatherData(final String city){ 
     new Thread(){ 
      public void run(){ 

       final JSONObject json = RemoteFetch.getJSON(MainActivity.this,city); 
       if(json == null){ 
        handler.post(new Runnable(){ 
         public void run(){ 
          Toast.makeText(MainActivity.this.getApplicationContext(),R.string.place_not_found,Toast.LENGTH_LONG).show(); 
         } 
        }); 
       } else { 
        handler.post(new Runnable(){ 
         public void run(){ 
          renderWeather(json); 
         } 
        }); 
       } 
      } 
     }.start(); 
    } 

private static final String OPEN_WEATHER_MAP_API = 
      "http://api.openweathermap.org/data/2.5/weather?" + "q=%s&" +"lat="+"&lon=" + "&units=metric"; 
    public static JSONObject getJSON(Context context, String city){ 
     try { 
      // gps.getLatitude(); 
      URL url = new URL(String.format(OPEN_WEATHER_MAP_API, city)); 
      HttpURLConnection connection = 
        (HttpURLConnection)url.openConnection(); 

      connection.addRequestProperty("x-api-key", 
        context.getString(R.string.open_weather_maps_app_id)); 

      BufferedReader reader = new BufferedReader(
        new InputStreamReader(connection.getInputStream())); 

      StringBuffer json = new StringBuffer(1024); 
      String tmp=""; 
      while((tmp=reader.readLine())!=null) 
       json.append(tmp).append("\n"); 
      reader.close(); 


      JSONObject data = new JSONObject(json.toString()); 
+0

GPSTracker 클래스 가져 오기 좌표 메서드를 정적으로 변경할 수 있습니까? – Xcihnegn

답변

0

당신은 당신의 범위 (일명 상황에없는 무언가를 액세스하려고하지만, 언어의 측면에서있다, 혼동하지 마십시오 Context 클래스와 함께). 따라서 변수를 정적 메서드에 대한 매개 변수로 전달하거나 메서드 및 인스턴스 메서드 (정적 메서드 제거)를 만들어야합니다. 자세한 설명은

편집 : (난 당신이 붙여 넣은 부분에없는 가정) 코드의 일부에

, 당신은 속성을 사용하고 있습니다. 정적 메서드 내에서 해당 특성을 볼 수 없습니다. '정적'은 무엇이든 의미합니다. 정적이지 않은 것들은 그 클래스의 인스턴스에 속합니다. 코드를 작성할 때 코드가 같은 위치에있는 것처럼 보이지만 런타임에 동일한 위치에 있지는 않습니다. 따라서 정적 컨텍스트 (즉, 정적 메서드 내부)에서 무언가를 할 때 인스턴스의 특성을 볼 수 없습니다.

그래서 다음 중 하나를 당신이 당신의 toJSON에서 '정적'키워드를 제거

  • 또는 매개 변수로

    • 패스를, 당신이 다른 두 (컨텍스트 및 도시)와 함께했던 것처럼, 방법. 정적 컨텍스트의 다른 위치에서 사용 중인지 조심하십시오. 컴파일 오류가 발생하여 다른 컨텍스트가 메서드를 볼 수 없다는 것을 알 수 있습니다.

    또한, GSON을 확인 할 수 있습니다 https://sites.google.com/site/gson/gson-user-guide

    이다 당신의 오류를 읽고 어떻게 작동하는지 이해하려고 노력에 SO 응답 반원 http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html을에 "Non-static method cannot be referenced from a static context" error

    그리고 일부 문서

    이 오류는 매우 기본적인 오류이므로 기본 OOP 개념을 검토하는 것이 좋습니다.

  • +0

    답변 해 주셔서 감사합니다. json을 얻는 방법은 다음과 같습니다. public static JSONObject getJSON (컨텍스트 컨텍스트, 문자열 도시) { { URL url = new URL (String .format (OPEN_WEATHER_MAP_API, city)); 그래서, 이중 위도와 같이 String City 이후의 것을 추가해야합니까? 정적 "제거"메서드를 "getJSON ..."정적 컨텍스트에서 참조 할 수 없습니다. – stmorray

    +0

    더 자세한 설명 및 링크를 사용하여 내 응답을 편집했습니다. – Logain

    0

    클래스와 해당 클래스의 인스턴스 사이의 차이점을 이해해야합니다. 정적 필드와 메소드는 인스턴스가 아닌 클래스 자체에 연결됩니다.

    코드에 따라 latitude and longitude are in the GPSTracker은 오류가 발생하기 때문에 (인스턴스 변수 인 경우) 정적이 아닙니다.

    문제를 해결하려면 런타임에서 인스턴스의 메모리를 예약하고 인스턴스 변수 (예 : latitude and longitude are in the GPSTracker)에 액세스 할 수 있도록 클래스의 인스턴스 (인스턴스 만들기)를 인스턴스화해야합니다. 당신이 (예를 들어 MainActivity의 onCreate() 단위) GPSTracker에 latitude and longitude에 액세스하려면 코드 아래

    시도

    GPSTracker obj = new GPSTracker();

    obj.latitude 또는 obj.longitude 다음과 같이 인스턴스 변수 위도와 경도 사용 obj에 액세스 할 수 있습니다.

    이 다른 점은 일을 위 위해 고려해야 할 당신이 (예를 들어 MainActicity.java)를 사용하여 원하는 위치가 파일의 패키지를 벗어나면

    1. 파일 당신에게 확인 import GPSTracker 클래스를 확인합니다.

    2. GPSTracker 클래스에 정의 된 다른 생성자가 있고 사용하려는 경우 객체를 만드는 동안 해당 생성자를 호출해야합니다.

    +0

    그래, 그게 정확히 뭐하는거야,하지만 그 값은 정적이 아닙니다. – stmorray

    +0

    일부 코드를 보여주세요! – AADProgramming

    +0

    일부 코드가 – stmorray