0

私の問題は次のとおりです。私のコードでは、HTTP クライアントから JSON オブジェクトを取得して LogCat に出力しようとしています。しかし、何も起こりませんでした。テストのために、Log(" sdf ","1") 行を追加しました。Log("sdf","2") 行の後、コードが実行されていないことがわかります。エラーも例外も、そのようなものもありません。インターネット許可を追加しました。何か不足していますか、それとも Eclipse に問題がありますか? 助けてくれてありがとう。

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
    HttpGet httpget = new HttpGet("http://tusyad2014.org/akb_api/hastalarimiza_ozel.json");
    httpget.setHeader("Content-type", "application/json;charset=utf-8");

    Log.e("sdf","1");
    try {
        Log.e("sdf","2");
        HttpResponse response = httpclient.execute(httpget);
        Log.e("sdf","3");
        String result = EntityUtils.toString(response.getEntity(), "UTF-8");
        Log.e("sdf","4");
        JSONArray ja = new JSONArray(result);

        Log.e("sdf","5");

        int n = ja.length();

        for (int i = 0; i < n; i++) {

          JSONObject jo = ja.getJSONObject(i);

          Log.d("sdf","Json : " + jo.getString("id") + " - "+ jo.getString("name"));

        }

    } catch (Exception e) {

      Log.e("sdf","");
    }      
}   
}

ログ

08-15 05:14:40.609: E/sdf(1656): 1
08-15 05:14:40.609: E/sdf(1656): 2
08-15 05:14:41.167: D/gralloc_goldfish(1656): Emulator without GPU emulation detected.
4

3 に答える 3

1

AsynctaskRaghunandan が示唆しているように、この操作にはバックグラウンド スレッドを使用する必要があります。

例えば ​​:

    new AsyncTask<Void, Void, Void>() {


    @Override
    protected void onPreExecute() {
                        // TODO Auto-generated method stub
                        super.onPreExecute();
    Log.i("onPreExecute","onPreExecute");
                    }


@Override
protected Void doInBackground(Void... params) {

DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
    HttpGet httpget = new HttpGet("http://tusyad2014.org/akb_api/hastalarimiza_ozel.json");
    httpget.setHeader("Content-type", "application/json;charset=utf-8");

    Log.e("sdf","1");
    try {
        Log.e("sdf","2");
        HttpResponse response = httpclient.execute(httpget);
        Log.e("sdf","3");
        String result = EntityUtils.toString(response.getEntity(), "UTF-8");
        Log.e("sdf","4");
        JSONArray ja = new JSONArray(result);

        Log.e("sdf","5");

        int n = ja.length();

        for (int i = 0; i < n; i++) {

          JSONObject jo = ja.getJSONObject(i);

          Log.d("sdf","Json : " + jo.getString("id") + " - "+ jo.getString("name"));

        }

    } catch (Exception e) {

      Log.e("sdf","");
    }      


}       
    }.execute();

編集 :

また、この回答も参照してください。

于 2013-08-15T09:20:42.107 に答える
1

不可能な ui スレッドでネットワーク関連の操作を実行しています。Threadまたはを使用しAsynctaskます。

あなたが得るハニカムを投稿してくださいNetworkOnMainThreadException

これは、Honeycom SDK 以降を対象とするアプリケーションに対してのみスローされます。以前のバージョンの SDK を対象とするアプリケーションは、メイン イベント ループ スレッドでネットワークを実行できますが、推奨されません。ドキュメント「応答性の設計」を参照してください。

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

AsyncTask ドキュメント

http://developer.android.com/reference/android/os/AsyncTask.html

編集

 new TheTask().execute();

それで

public void  getJson()
  {
        HttpClient httpclient = new DefaultHttpClient();
        httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
        HttpGet request = new HttpGet("http://tusyad2014.org/akb_api/hastalarimiza_ozel.json");     
        try
        {
        HttpResponse response = httpclient.execute(request);
        HttpEntity resEntity = response.getEntity();
        String _response=EntityUtils.toString(resEntity);
        Log.e("sdf",_response);

        } catch (Exception e) {

          Log.e("sdf","");
        }      
    }   
    class TheTask extends AsyncTask <String,Void,Void>
  { 
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected void onPostExecute(Void result) {

    super.onPostExecute(result);

    }
    @Override
    protected Void doInBackground(String... params) {
        getJson();
        return null;
    }
    }   
  }

ログ

08-15 15:05:26.745: E/sdf(21197): [{"id":"1","name":"Ayakta Åekil BozukluÄu- Kemik Ãıkıntısı- Halluks Valgus - Halluks Rijitus"},{"id":"2","name":"Ãekiç Parmak"},{"id":"3","name":"DoÄumsal El, Ayak, Ãst Ekstremite Anamolileri, Eksiklikleri, Åekil Bozuklukları"},{"id":"4","name":"DoÄum Felci- DoÄum sonrası Beyin Felci, Spastisite"},{"id":"5","name":"Kapalı omuz, dirsek, el bileÄi ameliyatları- ARTROSKOPÄ°K cerrahi giriÅimler"},{"id":"6","name":"Ortopedi de PRP ( trombositten zengin plazma) uygulamaları"},{"id":"7","name":"Kırık kaynama gecikmesi, kaynamamaları ve ultrason tedavisi"},{"id":"8","name":"El bileÄi kırıkları, radius ve ulna alt uç kırıkları, skafoid kırıkları"},{"id":"9","name":"Humerus kırıkları, radial sinir sorunları, kaynamamaları"},{"id":"10","name":"Eldeki kistler,Ganglion kistleri"},{"id":"11","name":"Dirsek aÄrısı,Tenisçi dirseÄi, Golfçü dirseÄi"},{"id":"12","name":"Elde uyuÅma, karıncalanma, iÄnelenme, aÄrı"},{"id":"13","name":"Pleksus ve sinir yaralanmaları"},{"id":"14","name":"Ãnkol Kemik (Radius ve Ulna) Kaynamamaları"},{"id":"15","name":"Femur BaÅı Avasküler Nekrozu"},{"id":"16","name":"Tetik Parmak"},{"id":"17","name":"BaÅparmak Tendonlarının SıkıÅması (De Quervain HastalıÄı)"},{"id":"18","name":"Omuz AÄrısı ve Hareket KısıtlılıÄı"},{"id":"19","name":"DoÄumsal Tibia Kaynamaması (Konjenital Tibia Psödoartrozu)"}]
于 2013-08-15T09:19:33.843 に答える
0

問題は、あなたのネットワークが遅いことかもしれません.遅い接続では応答を得るのに時間がかかります....

さらに、メインスレッドでネットワーク関連の作業を行っているため、新しいAndroid APIで例外が発生します

于 2013-08-15T09:19:59.530 に答える