2013-07-11 2 views
2

Я хочу, чтобы отобразить название видео, который содержит определенную подстроку, такие как, например, videoName="apple":Как извлечь файл JSON, используя лучший способ

Поэтому для того, чтобы выполнить эту задачу, я написал код для извлечения Json файл и получить все записи, связанные с этим именем: ("https://gdata.youtube.com/feeds/api/videos?q= "+ videoName +" & v = 2 & альт = JSON") но, к сожалению, я был исключением в этом заявлении:

HttpResponse res = cli.execute(g); 

Это функции, которую я написал, чтобы получить json f Ил:

String GetUrlBody (String Url){ 


      Log.d("s18", "ok"); 


      HttpClient cli = new DefaultHttpClient(); 

      Log.d("s19", "ok"); 


      HttpGet g = new HttpGet(Url); 

      Log.d("s20", "ok"); 


      try{ 

       Log.d("s21", "ok"); 

      HttpResponse res = cli.execute(g); 

      Log.d("s22", "ok"); 


      if(res.getStatusLine().getStatusCode() == 200){ 

       Log.d("s23", "ok"); 


       String s = 
      EntityUtils.toString(res.getEntity(), HTTP.UTF_8); 

       Log.d("s24", "ok"); 


       return s; 

      }else { 

       Log.d("s25", "ok"); 

       return "Not Found"; 


      } 




      }catch(Exception exx){ 

       Log.d("s26", "ok"); 

       Log.d("s27", exx.getMessage()); 



      } 




      return null; 
     } 

Всего мой код:

package com.example.task_10_vedioserach; 

import java.util.ArrayList; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.protocol.HTTP; 
import org.apache.http.util.EntityUtils; 
import org.json.JSONArray; 
import org.json.JSONObject; 
import org.json.JSONTokener; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.ProgressDialog; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.ListView; 

public class MainActivity extends Activity { 

    ListView vediolist; 
    ImageButton search; 
    Button history; 
    EditText title; 
    ///////////////// 
    ArrayList<String > vl; 
    ArrayAdapter<String> ad ; 
    ProgressDialog pd ; 
    ///////////////// 

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

     vediolist = (ListView) findViewById(R.id.vedioList); 
     search = (ImageButton) findViewById(R.id.search); 
     history = (Button) findViewById(R.id.history); 
     title=(EditText) findViewById(R.id.vedioName); 

     ///////////////////////////////////////////////////////////////// 

      vl = new ArrayList<String>(); 
      ad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1 , android.R.id.text1,vl); 

     ////////////////////////////////////////////////////////////// 
      Log.d("s0", "ok"); 

      search.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       final String vedioName=title.getText().toString(); 
       Log.d("s1", "ok"); 
       new conn().execute("https://gdata.youtube.com/feeds/api/videos?q="+vedioName+"&v=2&alt=json"); 
       Log.d("s2", "ok"); 
      } 
     }); 

     pd = new ProgressDialog(this); 
     pd.setMessage("Wait Loading .... "); 
     pd.setCancelable(false); 
     vediolist.setAdapter(ad); 

    } 



    class conn extends AsyncTask<String, Integer, String>{ 


     @Override 
     protected void onPreExecute() { 
      Log.d("s3", "ok"); 
      pd.show(); 
      super.onPreExecute(); 
      Log.d("s4", "ok"); 
     } 
     @Override 
     protected String doInBackground(String... arg0) { 
      Log.d("s5", "ok"); 
      String s = GetUrlBody(arg0[0]); 
      Log.d("s6", "ok"); 
      return s; 
     } 

     @Override 
     protected void onPostExecute(String result) { 

      Log.d("s7", "ok"); 


     try{ 

      Log.d("s8", "ok"); 

      JSONObject jo =(JSONObject) new JSONTokener(result).nextValue(); 

      Log.d("s9", "ok"); 


     JSONObject feed = jo.optJSONObject("feed"); 
     Log.d("s10", "ok"); 

     JSONArray ent = feed.optJSONArray("entry"); 
     Log.d("s11", "ok"); 



     for(int i = 0 ; i<ent.length() ; i++){ 

     String ti = ent.getJSONObject(i). 
       getJSONObject("title").getString("$t"); 
     vl.add(ti); 


     } 

     Log.d("s12", "ok"); 


     ad.notifyDataSetChanged(); 
     Log.d("s13", "ok"); 

     }catch(Exception exx) { 
      Log.d("s14", "ok"); 

     } 

     Log.d("s15", "ok"); 

      pd.dismiss(); 
      Log.d("s16", "ok"); 

      super.onPostExecute(result); 
      Log.d("s17", "ok"); 


     } 




     String GetUrlBody (String Url){ 


      Log.d("s18", "ok"); 


      HttpClient cli = new DefaultHttpClient(); 

      Log.d("s19", "ok"); 


      HttpGet g = new HttpGet(Url); 

      Log.d("s20", "ok"); 


      try{ 

       Log.d("s21", "ok"); 

      HttpResponse res = cli.execute(g); 

      Log.d("s22", "ok"); 


      if(res.getStatusLine().getStatusCode() == 200){ 

       Log.d("s23", "ok"); 


       String s = 
      EntityUtils.toString(res.getEntity(), HTTP.UTF_8); 

       Log.d("s24", "ok"); 


       return s; 

      }else { 

       Log.d("s25", "ok"); 

       return "Not Found"; 


      } 




      }catch(Exception exx){ 

       Log.d("s26", "ok"); 

       Log.d("s27", exx.getMessage()); 



      } 




      return null; 
     } 



    } 

это полный StackTrace:HERE

+2

У вас есть разрешение на использование в Интернете в файле манифеста? ' ... ' – mromer

+0

u имеет нулевое значение, попробуйте использовать if (jdata.has ("data")) до нулевого значения – steevoo

+0

@mromer: спасибо, так много, да, это проблема, и я решил ее поблагодарить и очень :) :)) – Akari

ответ

1

Я лично рекомендую использовать что-то вроде GSON и Джексона. Ссылки ржали:

GSON: https://sites.google.com/site/gson/gson-user-guide http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/ http://albertattard.blogspot.co.at/2009/06/practical-example-of-gson.html

Джексон: http://jackson.codehaus.org/Tutorial http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

Теперь вы должны понимать, что с помощью этих инструментов не только "для ленивых". Они хорошо построены и быстрые картографы. Они сделают работу быстрее и легче, чем любой алгоритм/метод, который вы сами можете себе представить за короткий промежуток времени. Надеюсь это поможет!

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