一切看起来都不错,但JSON在Android中返回空

时间:2013-04-27 16:55:21

标签: php android json

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

有什么想法吗?

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);

}
}

1 个答案:

答案 0 :(得分:1)

由于这行代码,您收到NetworkOnMainThreadException

jParser.getJSONFromUrl(url);

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

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

示例

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

您可能希望显示ProgressDialog并在Thread完成后关闭它。 AsyncTask涉及更多步骤,但非常适合此任务,因为它提供了用于显示,更新和解除ProgressDialog的挂钩。