我对一些弃用的方法有疑问。(httpDefault)
我想要的是简单的:我有网址(json数据) - >发送请求 - >收到jsonObject。
我不知道。我已经尝试了一些教程,但它对我不起作用。 (1. http://techlovejump.com/android-json-parser-from-url/ 2. https://www.youtube.com/watch?v=Fmo3gDMtp8s&list=PLsoBxH455yoZZeeza9TiG8I9dGP0zz5o9&index=4)
这是我的示例代码。只使用String数据。 (不是来自服务器数据。)
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* // url : http://www.jsoneditoronline.org/?id=a31f7f816285e14991e175fccd09a561
* {
* "id":123,
* "name":abc,
* "status":"ok"
* }
*/
final String customJSON = "{\"id\":123,\"name\":abc,\"status\":\"ok\"}";
try {
JSONObject jsonObject = new JSONObject(customJSON);
int id = jsonObject.getInt("id");
String name = jsonObject.getString("name");
String status = jsonObject.getString("status");
Toast.makeText(MainActivity.this, "id #"+id+", name #"+name+", status #"+status, Toast.LENGTH_SHORT).show();
} catch (JSONException e) { e.printStackTrace(); }
}
}
请给我你的提示。
我如何获得JSONObject(我只有url)。 网址:http://www.jsoneditoronline.org/?id=a31f7f816285e14991e175fccd09a561
答案 0 :(得分:2)
执行此操作的正确方法是将请求包装在worker thread
中。其中一种方法是使用AsyncTask
。请参阅http://developer.android.com/reference/android/os/AsyncTask.html以获取android记录的用法,但它基本上归结为以下实现:
扩展AsyncTask的私有子类,实现以下方法:
onPreExecute
- 在执行任务之前在UI线程上调用并用于设置填充(例如显示进度条)
doInBackground
- 您想要执行的实际操作在onPreExecute之后立即触发
onPostExecute
- 在doInBackground完成后在UI线程上调用。这会将doInBackground的结果作为参数接收,然后可以在UI线程上使用。
AsyncTask用于UI线程上不允许的操作,例如:
您当前的代码位于将在UI线程上创建的方法(将抛出NetworkOnMainThreadException
,因此您需要将代码移动到主线程上运行的线程,例如作为AsyncTask,Handler或类似的东西。我发现AndroidHive上的JSON Parsing教程在学习时非常有用,并且可以参考Android文档。
答案 1 :(得分:1)
正如smittey所提到的,你需要使用后台线程或使用AsyncTask
来执行该请求。要执行http请求,您可以使用库OkHttp,这里是exampele。请务必在清单中使用<uses-permission android:name="android.permission.INTERNET" />
来访问互联网。
答案 2 :(得分:1)
layout-xlarge
你可以试试这个。它对我有用,我希望它也适合你。