2015-05-01 5 views
0

Я пытаюсь получить суточную цитату изhttpclient.execute (HttpGet) Не похоже на работу (Android)

http://quotesondesign.com/api/3.0/api-3.0.json?callback=json

Я называю этот метод в моем OnCreate Но когда я пытаюсь выполнить httpclient.execute(); он выходит в выписку ...

Что я делаю неправильно?

В файле манифеста я включил <uses-permission android:name="android.permission.INTERNET" /> .

public String getJson(){ 
     String quoteUrl = "http://quotesondesign.com/api/3.0/api-3.0.json?callback=?"; 
     DefaultHttpClient httpclient = new DefaultHttpClient(); 
     HttpGet httpget = new HttpGet(quoteUrl); 

     httpget.setHeader("Content-type", "application/json"); 

     InputStream inputStream = null; 
     String result = null; 
     String aJsonString = null; 
     try { 
      HttpResponse response = httpclient.execute(httpget); 
      Toast.makeText(this, "It works", Toast.LENGTH_LONG).show(); 
      HttpEntity entity = response.getEntity(); 

      inputStream = entity.getContent(); 
      // json is UTF-8 by default 
      BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
      StringBuilder sb = new StringBuilder(); 

      String line = null; 
      while ((line = reader.readLine()) != null) 
      { 
       sb.append(line + "\n"); 
      } 
      result = sb.toString(); 
      JSONObject jObject = new JSONObject(result); 
      aJsonString = jObject.getString("quote"); 

     } catch (Exception e) { 
      //Toast.makeText(this, "can't execute http request", Toast.LENGTH_LONG).show(); 
     } 
     finally { 
      try{if(inputStream != null)inputStream.close();}catch(Exception squish){} 
     } 

     return aJsonString; 
    } 

EDIT: здесь OnCreate()

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //verbergt notificatiebalk 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.splash); 

    jsonstring = getJson(); 
    Log.d(jsonstring, "The jsonstring contains: " + jsonstring); 
    //Toast.makeText(this, jsonstring, Toast.LENGTH_LONG).show(); 
    //tot hier testen 
    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      Intent i = new Intent(SplashScreen.this, MainActivity.class); 
      startActivity(i); 

      finish(); 
     } 
    }, SPLASH_TIME_OUT); 
} 

Спасибо заранее!

+0

удалить 'Toast.makeText (это, "Это работает", Toast.LENGTH_LONG) .show();' – Blackbelt

+0

вы бежите этот код из AsyncTask или основного потока? пожалуйста, напишите больше кода –

+0

Я сделал это, но я не понимаю, как это исправить? По-прежнему не удается выполнить точку() –

ответ

0

Обновление: Фактический ответ с кодом в настоящее время модели шириной:

private class AsyncQuoteDownload extends AsyncTask<Void, Void, String>{ 

    @Override 
    protected String doInBackground(Void... params) { 
     String jsonData = getJson(); //or, if the jsonData var is available from everywhere, just put myR.run(); here, return null, and append the data directly in onPostExecute 
     return jsonData; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     (TextView)findViewById(R.id.Quote).append(result).append("\""); 
    } // \" makes it put an actual " inside a string 
} 

Старый ответ:

Держу пари ваш stacktrace (который не является ошибкой, потому что oyu ловить его, но он находится в журнале) читает что-то вроде «Network on Main Th читать"?

Потому что это то, что вы пытаетесь сделать, и это то, что вам не разрешено делать. Вместо этого поместите его в AsyncTask:

onCreate(){ //beware pseudo code because it doesn't matter 
    //do stuff 
    setContentView(...); //Above here, everything stays as is. 
    //below here, only that: 
    new GetQuoteTask.execute(); 
} 

class GetQuoteTask extends AsyncTask<Void, Void, String>{ 
    String doInBackground(...){ //<- pseudo code, code completion is your friend 
     String result = getJson(); 
     Log.d(jsonstring, "The jsonstring contains: " + jsonstring); 
     return result; 
    } 
    onPostExecute(String result){ 
     maybePutYourStringSomewhereAKAUpdateUI(); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       Intent i = new Intent(SplashScreen.this, MainActivity.class); 
       startActivity(i); 
       finish(); 
      } 
     }, SPLASH_TIME_OUT); 
    } 
} 
0

В своем коде вы имеете

String quoteUrl = "http://quotesondesign.com/api/3.0/api-3.0.json?callback=?"; 

Хотя URL вы хотите, чтобы принести это

http://quotesondesign.com/api/3.0/api-3.0.json?callback=json 

Обратите внимание, как в вашем коде вы имеете callback=? в то время как URL имеет callback=json.

+0

Я уже пробовал это, без каких-либо результатов. –

+0

Поскольку у вас есть запрос, я бы предложил создать URI. – justhecuke

+0

, так как я довольно новичок в кодировании Android, скажите, что это за URI и для чего я его использую? –

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