2012-05-10 2 views
0

Вот класс, где я получаю объекты JSON. В этом коде я получаю только один объект, и я действительно не знаю, как вернуться из метода, существует метод Protected Void, где он вызван методом settext, и существует единственный объект JSON.Json MySql получает два целых числа и строку

public class ConnectMySql extends Activity { 

TextView httpStuff; 
HttpClient client; 
JSONObject json; 

final static String URL = "http://79.114.48.119/RadarsMySql.php"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    httpStuff = (TextView) findViewById(R.id.tvHttp); 
    client = new DefaultHttpClient(); 
    new Read().execute("latitude"); 
} 


public JSONObject lastTweet(String username) throws ClientProtocolException, IOException,JSONException{ 
    StringBuilder url = new StringBuilder(URL); 
    url.append(username); 


    HttpGet get = new HttpGet(url.toString()); 
    HttpResponse r = client.execute(get); 
    int status = r.getStatusLine().getStatusCode(); 
    //if(status == 200){ 
     HttpEntity e = r.getEntity(); 

     String data = EntityUtils.toString(e); 
     data = data.substring(data.indexOf("[")); 

     JSONArray timeline = new JSONArray(data); 
     JSONObject last = timeline.getJSONObject(0); 
     return last; 

    //}else{ 
     //Toast.makeText(ConnectMySql.this, "error", Toast.LENGTH_LONG); 
     //return null; 

    //} 
} 

public class Read extends AsyncTask<String, Integer, String>{ 

    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     try { 
      json = lastTweet(""); 
      return json.getString(params[0]); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    public void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     httpStuff.setText(result); 
     int myNum = 0; 

     try { 
      myNum = Integer.parseInt(result); 
      httpStuff.setText(myNum); 
     } catch(NumberFormatException nfe) { 
      System.out.println("Could not parse " + nfe); 
     } 
    } 

} 

} 

То, что я хочу сделать, это есть массив, где я мог бы хранить три вида объектов (Exemple широта [1], Долгота [1], Описание [1], Latitude [2] и т.д .. Я хотел бы, чтобы широта и долгота были целыми числами). После этого я буду использовать цикл for для вызова функции с этими тремя параметрами. Может ли кто-нибудь помочь мне или дать мне несколько советов? Спасибо!

+0

Никто не может мне помочь? –

+0

Да, приятель, расскажи нам. – Akram

+0

никто не знает? ? –

ответ

1

Не используйте AsyncTask, поскольку он выполняется в фоновом режиме, и именно поэтому он вызывает некоторые проблемы для вас.

И когда у вас есть работающий twitter arser, интегрируйте его в AsyncTask. Код ниже не проверен.

public class ConnectMySql extends Activity { 

TextView httpStuff; 
HttpClient client; 
int i; 
JSONObject json; 

final static String URL = "http://localhost/RadarsMySql.php"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    httpStuff = (TextView) findViewById(R.id.tvHttp); 
    client = new DefaultHttpClient(); 
    for(i=0;i<2;i++){ 
    new Read().execute("latitude"); 

     try { 
      json = lastTweet("",i); 

      String result = json.getString(params[i]); 

     httpStuff.setText(result); 
      int myNum = 0; 

      try { 
       myNum = Integer.parseInt(result); 
       httpStuff.setText(myNum); 
      } catch(NumberFormatException nfe) { 
       System.out.println("Could not parse " + nfe); 
      } 


     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 


public JSONObject lastTweet(String username,int i) throws ClientProtocolException, IOException,JSONException{ 
    StringBuilder url = new StringBuilder(URL); 
    url.append(username); 


    HttpGet get = new HttpGet(url.toString()); 
    HttpResponse r = client.execute(get); 
    int status = r.getStatusLine().getStatusCode(); 
    //if(status == 200){ 
     HttpEntity e = r.getEntity(); 

     String data = EntityUtils.toString(e); 
     data = data.substring(data.indexOf("[")); 

     JSONArray timeline = new JSONArray(data); 
     JSONObject last = timeline.getJSONObject(i); 
     return last; 

    //}else{ 
     //Toast.makeText(ConnectMySql.this, "error", Toast.LENGTH_LONG); 
     //return null; 

    //} 
} 

} 
+0

Я получаю две ошибки: 'new Read(). execute (" широта "); 'и' String result = json.getString (params [i]); '. Оба они не могут быть изменены как тип: params и Read. Какие-нибудь советы ? –

+0

Что мне делать с этими параметрами? и удалить новый процесс чтения? –