2014-02-17 3 views
2

서버에서 JSON을 검색하고 파싱 한 다음 화면에 값을 반환하는 작은 프로그램을 작성하고 있습니다. AsyncTask 내에서이 모든 작업을 수행하지만 onPostExecute (String result)는 다음 경고를 제공합니다. MainActivity.RESTfulGET 유형의 onPostExecute (String) 메서드는 절대로 로컬로 사용되지 않습니다..onPostExecute (String) 메서드는 로컬에서 사용되지 않습니다. - AsyncTask

나는 왜이 경고를 받았는지 잘 모르겠으며이 문제에 대한 답변을 찾기 위해 Google에서 여러 가지 다양한 출처를 경험했지만 불행히도 해결책을 찾지 못했습니다.

protected void onPostExcute(String result) { 

:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    private RESTfulGET mTask; 

    Button bParseJSON; 

    TextView tvJSON; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     try { 
      Class.forName("android.os.AsyncTask"); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     bParseJSON = (Button) findViewById(R.id.bParseJSON); 

     tvJSON = (TextView) findViewById(R.id.tvJSON); 

     bParseJSON.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       mTask = (RESTfulGET) new RESTfulGET().execute("http://www.seasite.niu.edu/cs428_628/Assignments/A2_Client_list_json.txt"); 
       mTask.getStatus(); 
      } 
     }); 

    } 

    private class RESTfulGET extends AsyncTask <String, Integer, String> { 
     HttpClient httpClient; 
     HttpGet  httpGet; 

     @Override 
     protected String doInBackground(String... urls) { 
      String returnValue = null; 

      HttpResponse serverResponse; 

      String url = urls[0]; 
      httpClient = new DefaultHttpClient(); // Optional args to alter default settings 
      httpGet  = new HttpGet(url);   // or the passed-in URI argument string 

      try { 
       serverResponse = httpClient.execute(httpGet); 
       if(serverResponse != null && 
        serverResponse.getStatusLine().getStatusCode() == 200) { 
        // Success, do something 
        HttpEntity responseEntity = serverResponse.getEntity(); 

        InputStream is = null; 

        try { 
         is = responseEntity.getContent(); 
         BufferedReader readBuf = new BufferedReader(new InputStreamReader(is)); 
         StringBuilder sb = new StringBuilder(); 

         char[] buf = new char[1024]; // an initial size 
         int bytesRead; 

         // this could block; thus it is done in a background thread 
         while((bytesRead = readBuf.read(buf, 0, 1024)) != -1) { 
          sb.append(buf, 0, bytesRead); 
         } 

         returnValue = sb.toString(); 
        } 
        finally { 
         // do nothing 
        } 
       } 
      } catch(IOException e) { 

      } // try 

      return returnValue; 
     } // doInBackground 

     @Override 
     protected void onProgressUpdate(Integer... progress) { 

     } 

     protected void onPostExcute(String result) { 
      // back on main thread, get the result passed by doInBackground() and cast it in preparation to parsing 
      if(result != null) { 
       try { 
        JSONObject json = new JSONObject(result); 
        JSONArray jArray = ((JSONObject) json).getJSONArray("clients"); 

        for(int i = 0; i < jArray.length(); i++) { 
         JSONObject client_json = jArray.getJSONObject(i); 
         String name   = client_json.getString("name"); 
         String profession = client_json.getString("profession"); 
         String dob   = client_json.getString("dob"); 
         Log.d("RESULT", "Name: " + name); 
         Log.d("RESULT", "Profession: " + profession); 
         Log.d("RESULT", "DOB: " + dob); 
        } // for 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } // if 
     } // onPostExecute 

    } // RESTfulGET 
} 
+0

해당 기능의 @Override가 누락되었습니다. – Merlevede

답변

6

여기에 오타가 : 여기

은 (파서가 아직 완료되지 않습니다하지만 난 그 어떤 도움이 필요하지 않습니다주의) 내 코드는 해야한다 :
@Override 
    protected void onPostExecute(String result) { 

그래서 당신이 때문에 onPostExcute에서 오타의 자신의 함수를 작성 결국합니다 ( e이 누락되었습니다.) 또한 아무런 방법도 무시하지 않아도된다는 경고가 없었습니다. annotation

+1

PEBKAC, 그 문제를 좋아해야합니다. 감사! 한 가지주의 할 점은 onPostExecute에 @Override가 필요 없다는 것입니다. – CodyEngel

+2

'@ Override'는 필요 없지만 컴파일러가 존재하지 않는 메서드를 재정의하는 것에 대해 불평 할 것이기 때문에 오타를 발견하는 데 도움이됩니다 .-) – donfuxx

관련 문제