0

我之前成功运行过类似的代码,但这次它不起作用!我真的不明白为什么。

有任何想法吗?

public class SingleMenuItemActivity extends Activity {

private static String url = "http://www.tatangalar.com/android/takim_detay.php?takimID=5";

private static final String TAG_MACBILGISI = "son10mac";
private static final String TAG_10 = "10";
private static final String TAG_9 = "9";

JSONArray sonuclar = null;
String filan;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.benim2);        

    JSONParser jParser = new JSONParser();

    JSONObject json = jParser.getJSONFromUrl(url);

    try {
        sonuclar = json.getJSONArray(TAG_MACBILGISI);

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

            JSONObject c = sonuclar.getJSONObject(i);

            String s_on = c.getString(TAG_10);
            String s_dokuz = c.getString(TAG_9);

            filan = s_on;

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }


    TextView txtsecilen = (TextView) findViewById(R.id.son9); 

    txtsecilen.setText(filan);

}
}
4

1 回答 1

1

NetworkOnMainThreadException由于这行代码,您收到了一个:

jParser.getJSONFromUrl(url);

这曾经是一个警告,但在较新版本的 Android 操作系统上是不允许的。您不得从主 UI 线程访问互联网,例如在您的onCreate()方法中。从单独的 发送您的互联网命令runOnUIThread()Thread/Runnable否则AsyncTask您的NetworkOnMainThreadException问题将得到解决。

Android 不允许这样做,以确保您不会在长时间任务期间挂起 UI,因为它会强制您在备用线程中执行耗时的活动。

示例

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        ...
        jParser.getJSONFromUrl(url);
        ...
    }
});

您可能希望显示 a并在完成ProgressDialog时关闭它。ThreadAnAsyncTask涉及更多步骤,但非常适合此任务,因为它提供了用于显示、更新和关闭您的ProgressDialog.

于 2013-04-27T17:00:51.150 回答