2016-01-04 2 views
0

Мне нужна ваша помощь. Я хочу отправить URL-запрос, получить ответ и создать объект JSON. Моя первая попытка была абсолютно неправильной. Теперь я нашел учебник и сделал новую попытку.Информация из URL-запроса не работает/Не найден TextView

Моя активность выглядит следующим образом:

public class Patienten extends Activity { 

//Beacon Elemente 
private String UUID; 
private String Major; 
private String Minor; 

private TextView output; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_patienten); 
    output = (TextView) findViewById(R.id.output); 
    UpdateBeaconInformation(); 

    Button cmdHit = (Button) findViewById(R.id.cmd_hit); 
    cmdHit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      new JSONTask().execute("//http://kusber-web.de/JsonTest.txt"); 
     } 
    }); 


    setTitle(Surname + ", " + FirstName); 
    // output.setText(output.getText().toString() + "Gefundener Patient:\n" + "Name: " + Surname + ", " + FirstName + "\nGeb.-Dat: " + Birthdate); 
} 

Затем я создал новый класс Java и построил AsyncTask с ним. Но я не могу получить доступ к выводу textview в onPostExecute для его обновления.

public class JSONTask extends AsyncTask<String, String, String> { 
@Override 
protected String doInBackground(String... urls) { 
    HttpURLConnection connection = null; 
    BufferedReader reader = null; 
    try { 

     //http://kusber-web.de/JsonTest.txt 
     //http://nilsbenning.selfhost.me/PatientFinder.php?beacon_comID=5181f8a3-7354-46ac-b22d-952ec395ab06&beacon_major=12&beacon_minor=249 
     URL url = new URL(urls[0]); 
     connection = (HttpURLConnection) url.openConnection(); 
     connection.connect(); 

     InputStream stream = connection.getInputStream(); 

     reader = new BufferedReader(new InputStreamReader(stream)); 

     StringBuffer buffer = new StringBuffer(); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      buffer.append(line); 
     } 

     return buffer.toString(); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (connection != null) { 
      connection.disconnect(); 
     } 
     try { 
      if (reader != null) { 
       reader.close(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
    return null; 
} 

@Override 
protected void onPostExecute(String result) { 
    super.onPostExecute(result); 
    output.setText(result); 

} 

В чем моя ошибка? Почему я не могу получить к нему доступ? Я видел его в качестве решения здесь, но не получил его на работу:

https://stackoverflow.com/a/12252717/5743912

Надеется, что вы можете мне помочь! :)

+2

- среди, возможно, других вещей, вы делаете сетевой ввод-вывод в основном потоке приложения, и вы ловите исключения, не регистрируя их. – CommonsWare

+0

Хорошо, что вы правы @CommonsWare. Мне жаль, что я совершенно новичок в разработке Android. Я узнал много последних часов и создаю новый способ. Можете ли вы помочь мне сейчас найти ошибку? – AndroidNewbee

+0

У вас есть // ДО http в вашем URL-адресе. Попробуйте установить контрольные точки внутри обработчиков исключений и предложения finally. Это может помочь вам найти проблему. –

ответ

0

Вы, вероятно, хотите, чтобы это исправить (убрать ведущие косые черты):

new JSONTask().execute("//http://kusber-web.de/JsonTest.txt"); 

В вашем JSONTask вы можете ссылаться на членов Patienten с помощью Patienten.this. Таким образом, в onPostExecute вы должны изменить это:

output.setText(result); 

к: "Что это моя ошибка"

Patienten.this.output.setText(result); 
+0

Вы правы с // как глупо от меня! Теперь я получаю com.projektarbeit.Patienten не является закрывающим классом. Как это исправить? Должен ли я инициировать его в AsyncTask? Сделайте это, потому что Patienten вызывает AsyncTask, а затем инициирует это там? – AndroidNewbee

+0

@AndroidNewbee Вы должны определить свой JSONTask как внутренний класс Patienten. –

+0

Я действительно новичок: D Никогда не слышал от внутреннего класса раньше. Прочтите его в Google, скопируйте и вставьте его, и он работает! Так просто! С большим спасибо !!!! – AndroidNewbee