0

これは、JSON オブジェクトを取得するクラスです。このコードでは、オブジェクトを 1 つしか取得せず、メソッドから戻る方法がよくわかりません。呼び出される settext メソッドである Protected Void メソッドがあり、唯一の JSON オブジェクトが行く場所があります。

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);
        } 
    }

}

}

私がしたいのは、3種類のオブジェクトを格納できる配列を持つことです(例:緯度[1]、経度[1]、説明[1]、緯度[2]など...緯度と経度が欲しい整数としてある)。この後、for ループを使用して、この 3 つのパラメーターで関数を呼び出します。誰かが私を助けてくれますか、またはヒントを教えてくれますか? ありがとうございました!

4

1 に答える 1

1

AsyncTask はバックグラウンドで実行されるため、使用しないでください。これが、問題を引き起こす理由です。

Twitter アーサーが機能したら、それを 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;

    //}
}

}
于 2012-05-11T12:12:44.293 に答える