我想从互联网上获取JSONArray并在logcat中显示它,所以我使用 Log.e(“结果”,结果);
但似乎失败了,因为我在logcat中找不到任何JSONArraay 这是我的代码,我希望你能看一看并告诉我什么是错的? 我知道有些人正在使用BufferReader从互联网上读取文本 但我想我的方式也应该没问题
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnParse;
ListView listResult;
btnParse = (Button) findViewById(R.id.btn_parse);
listResult = (ListView) findViewById(R.id.list_result);
btnParse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
JSONArray trial = getJSONData();
}
});
}
private JSONArray getJSONData() {
String url = "http://cloud.culture.tw/frontsite/trans/SearchShowAction.do?method=doFindAllTypeJ";
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
try {
HttpResponse httpresponse = httpClient.execute(httpget);
String result = EntityUtils.toString(httpresponse.getEntity());
Log.e("result ", result);
JSONArray jsonarr = new JSONArray(result);
return jsonarr;
} catch (Exception err) {
return null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
答案 0 :(得分:1)
Android不允许在UI线程上进行网络连接。因此,当您致电HttpResponse httpresponse = httpClient.execute(httpget);
时,它会抛出android.os.NetworkOnMainThreadException
个例外。在catch块中调用Log.e("error",err.printStackTrace())
而不是返回null会更有用,因为这个错误会在logcat中显示出来。您需要将try块中的代码移动到另一个线程。我建议使用AsyncTask。有关详细信息,请参阅此link。关于AsyncTask
的基础知识:它是一个抽象使用线程和处理程序远离开发人员的类。如果您熟悉线程和处理程序,则可以实现自己的解决方案(而不是异步任务),以避免必须符合asynctask框架工作。
答案 1 :(得分:0)
自从Android 3.0以来,默认情况下已启用StrictMode。它的作用是禁止开发人员做懒惰的事情,比如在UI线程上运行网络代码。它会强制您异步运行此类代码,以便应用程序不会挂起/暂停,并且用户交互不会中断。你可以关闭它,这样你就不需要使用AsyncTask / Handler / Volley /等等。处理它是一种糟糕的方式,但这是一种方法(不要这样做):
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); // Put these two lines before you execute your HTTTP request....
请改为: 使用Volley,这是quick tutorial。另外,a Google Talk about it。