2014-01-14 5 views
1

Привет парень у меня есть проблемы с Android ... Это часть моего кода:Android URI в OnClickListener

setContentView(R.layout.activity_main); 
TableLayout MainTable = (TableLayout) findViewById(R.id.main_table); 
JSONArray Jobj = new JSONArray(result_set); 
String url_img = null; 
String url_video = null; //MUST CONTAINS THE URL OF MY VIDEO 

for (int i = 0; i < Jobj.length(); i++) { 
    TableRow row = new TableRow(getApplicationContext()); 
    row.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT)); 
    row.setPadding(0, 14, 2, 14); 

    JSONObject titoli = Jobj.getJSONObject(i); 
    Integer id = titoli.getInt("id_video"); 
    String titolo = titoli.getString("nome_video"); 
    String immagini = titoli.getString("video_img"); 
    String video_url = titoli.getString("url_video"); 
    /* video_url : this is the variable that i change (and contains the relative path that i obtains parsing json array) */ 

    Pattern p = Pattern.compile("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); 
    Matcher m = p.matcher(immagini); 

    Pattern v = Pattern.compile("^/video/[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); 
    Matcher vm = v.matcher(video_url); 

    // Path video 
    if (vm.matches() == false) { 
     url_video = path_youtube + video_url; // SECOND ERROR HERE 
    } else if (vm.matches() == true) { 
     url_video = path_an_tv + video_url; // SECOND ERROR HERE 
    } 

    // Path image 
    if (m.matches() == false) { 
     url_img = path + immagini; 
    } else if (m.matches() == true) { 
     url_img = immagini; 
    } 

    ImageView img = new ImageView(getApplicationContext()); 
    img.setAdjustViewBounds(true); 
    img.setMaxHeight(140); 
    img.setMaxWidth(140); 
    Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(url_img).getContent()); 
    img.setImageBitmap(bitmap); 

    LayoutParams params = new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

    final TextView txt = new TextView(getApplicationContext()); 
    txt.setGravity(Gravity.LEFT | Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); 
    txt.setLayoutParams(params); 
    txt.setTextSize(18); 
    txt.setBackgroundColor(Color.WHITE); 
    txt.setTypeface(null, Typeface.BOLD); 
    txt.setTextColor(Color.BLACK); 
    txt.setId(id); 
    txt.setText(titolo); 
    txt.setClickable(true); 

    row.addView(img); 
    row.addView(txt); 
    MainTable.addView(row); 

    txt.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url_video))); 
        /* FIRST ERROR HERE, url_video contains the absolute url of my video*/ 
     } 
    }); 
} 

Когда я пытаюсь скомпилировать мой проект с occours ошибка:

* Не может обратитесь к не окончательной переменной url_video внутри класса innner, определенный в другом методе ... *

Если изменить URL-адрес видео в final другого occours ошибки:

Конечная локальная переменная не может быть назначена. он должен быть пустым и не использовать составное назначение

Как я могу это исправить?

UPDATE Я FIX IT ЗАМЕНА С ЭТИМ:

final TextView txt = new TextView(getApplicationContext()); 
    txt.setGravity(Gravity.LEFT | Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); 
    txt.setLayoutParams(params); txt.setTextSize(18); txt.setBackgroundColor(Color.WHITE); 
    txt.setTypeface(null, Typeface.BOLD); txt.setTextColor(Color.BLACK); 
    txt.setId(id); txt.setTag(url_video); txt.setText(titolo); txt.setClickable(true); 

    row.addView(img); 
    row.addView(txt); 
    MainTable.addView(row); 

    txt.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v) { 
     startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse((String) txt.getTag()))); 
     } 
    }); 
    } 

ответ

0

Определение его уровня класса private String video_url;

Вы не можете получить доступ к переменной, определенной в onCreate() в OnClick() Поскольку сфера OnCreate закончена когда вы получаете щелчок. Поэтому вы должны держать переменную область видимой.

UPDATE

Да, его просто,

public class YourClass { 

    private String video_url; 

    public void OnCreate() 
    { 
    } 
} 
+0

Извините, не бойтесь, но я не понимаю, что я должен делать. –

+0

Да, это нормально, см. Мое обновление –

+0

Не забудьте удалить свою строку video_url; внутри oncreate –

0

Просто сделайте это экземпляр переменной

String url_video = null; 

То есть определить эту пассивность.

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