2012-05-10 2 views
0

다음은 JSON 객체를 가져 오는 클래스입니다. 이 코드에서는 하나의 객체 만 얻었고 메서드에서 반환하는 방법을 모르지만 Protected Void 메서드가 있습니다.이 메서드는 settext 메서드이며 유일한 JSON 개체가있는 곳입니다. I 할 원하는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] 찾기 [2] 등등 위도와 경도를 정수로 사용하고 싶습니다.) 이후에 for 루프를 사용하여이 3 개의 매개 변수로 함수를 호출합니다. 아무도 나를 도울 수 없거나 나에게 몇 가지 조언을 줄 수 있습니까? 감사합니다.

+0

아무도 도와 줄 수 없나요? –

+0

네 친구가 말해줘. – Akram

+0

아무도 모릅니다? ? –

답변

1

백그라운드에서 실행되는 AsyncTask를 사용하지 마십시오. 이로 인해 몇 가지 문제가 발생합니다.

트위터 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 ("latitude"); '와'String result = json.getString (params [i]);'를 호출합니다. 둘 다 params 및 Read 유형으로 다시 열 수 없습니다. 어떤 팁? –

+0

그 매개 변수로 무엇을해야합니까? 새 읽기 실행을 삭제 하시겠습니까? –

관련 문제