2016-01-04 52 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它。但我無法訪問onPostExecute中的textview輸出來更新它。

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

- 在可能的其他事情中,您正在主應用程序線程上執行網絡I/O,並且捕獲異常而不記錄它們。 – CommonsWare

+0

好吧,你是對的@CommonsWare。我很抱歉,我在android開發中完全陌生。 我學到了很多最後的時間,並創造了一種新的方式。你能幫我找到錯誤嗎? – AndroidNewbee

+0

您的網址中有// BEFORE http。嘗試在異常處理程序和finally子句中設置斷點。這可能會幫助您找到問題。 –

回答

0

你可能想解決這個問題(刪除前導斜槓):

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

在你JSONTask您可以通過使用Patienten.this引用Patienten的成員。所以在onPostExecute你應該改變這樣的:

output.setText(result); 

到: 「什麼是我的錯」

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

你對我來說很愚蠢! 現在我得到com.projektarbeit.Patienten不是一個封閉的類。如何解決它?我應該在AsyncTask中啓動它嗎?這樣做是因爲Patienten調用了AsyncTask然後啓動它? – AndroidNewbee

+0

@AndroidNewbee您應該將您的JSONTask定義爲Patienten的內部類。 –

+0

我真的是Newbee:D從來沒有聽過內心階層的話。在谷歌閱讀它,複製並粘貼它,它正在運行! 太容易了!非常感謝! – AndroidNewbee