2014-11-18 2 views
1

Я пытаюсь передать «entityFinal» методу run(), но так как это runnable, у меня не может быть никаких параметров.Параметры на Runnable

«responseView.setText» на runOnUiThread комментируется, потому что мой андроид студия всегда печати, что мой responseView имеет нулевое значение, и я не могу понять, почему это, так как я использую Посмотреть на XML правильно.

Может ли кто-нибудь дать мне подсказку здесь? Я тестировал много вещей, asyncTask, несколько потоков, но это единственный способ, которым у меня была эта «почти» работа.

Благодарим вас заблаговременно.

XML:

<TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="@string/Blank" 
      android:id="@+id/textView" 
      android:layout_below="@+id/button2" 
      android:layout_alignLeft="@+id/button2" 
      android:layout_alignStart="@+id/button2" 
      android:layout_marginTop="50dp"/> 

файл кода Java:

final TextView responseView = (TextView) activity.findViewById(R.id.textView); 
        new Thread(){ 
         public void run(){ 
          try{ 
          HttpResponse httpResponse = httpclient.execute(httppost); 
          final HttpEntity entity = httpResponse.getEntity(); 
          final String entityFinal = entity.getContent().toString(); 
          }catch(IOException e){ 
           System.out.println(e.getMessage()); 
          } 
          activity.runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            //responseView.setText(entityFinal); 
            System.out.println(responseView); 
           } 
          }); 
         } 
        }.start(); 

ответ

0

в вашем случае, перемещение

activity.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     //responseView.setText(entityFinal); 
     System.out.println(responseView); 
    } 
); 

в try блока должно быть достаточно. В общем, вы всегда можете использовать класс, который реализует Runnable с помощью конструктора, который принимает произвольное число/тип параметров. Например

public class MyRunnable implements Runnable { 

    private final String mString; 
    public MyRunnable(String string) { 
      mString = string; 
    } 

    @Override 
    public void run() { 
     System.out.println(mString); 
    } 
} 
+0

Хорошо, это решить некоторые ошибки, но теперь я не могу понять, почему мой «TextView» равно нулю, когда я использую его. Когда я сначала создаю его, он имеет вид widget.TextView правильно, но когда я использую его для установки значения из «entityFinal», textView имеет значение null. –

+0

Почему вы, вероятно, забыли инициализировать его. Вы должны всегда проверять нулевой объект – Blackbelt

+0

Обнаружена проблема, я инициализировал ее неправильно. Спасибо за помощь! –

0

Вы можете использовать так:

new Thread(
    new Runnable() { 
     @Override 
     public void run() { 
      System.out.println(responseView); 
     } 
    }).start(); 
Смежные вопросы