2014-02-17 2 views
2

Я работаю над небольшой программой, которая просто извлекает JSON с сервера, анализирует его и возвращает значения на экран. Я делаю все это внутри AsyncTask, однако onPostExecute (результат строки) дает следующее предупреждение: Метод onPostExecute (String) из типа MainActivity.RESTfulGET никогда не используется локально.Метод onPostExecute (String) никогда не используется локально - AsyncTask

Я не уверен, почему я получаю это предупреждение, и я прошел через множество разных источников в Google, пытаясь найти ответ на эту проблему, к сожалению, я не смог найти какое-либо решение.

Вот мой код (обратите внимание, что анализатор еще не закончен, но я не нужна помощь с этим):

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

есть опечатка здесь:

protected void onPostExcute(String result) { 

должно быть:

@Override 
    protected void onPostExecute(String result) { 

так что вы в конечном итоге писать свою собственную функцию из-за опечатки в onPostExcute (e не было), и не было предупреждений о том, что вы не переопределяете какой-либо метод, потому что у вас также не было @Override аннотация

+1

PEBKAC, должен любить эти проблемы. Благодаря! Однако одно замечание: вам не нужно @Override для onPostExecute. – CodyEngel

+2

вам не нужно '@ Override', но это помогло бы вам обнаружить вашу опечатку, потому что компилятор будет жаловаться на переопределение несуществующего метода ;-) – donfuxx

Смежные вопросы