我想使用http

时间:2015-10-28 10:23:45

标签: java android jsonobject androidhttpclient jsonobjectrequest

我对一些弃用的方法有疑问。(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

3 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是将请求包装在worker thread中。其中一种方法是使用AsyncTask。请参阅http://developer.android.com/reference/android/os/AsyncTask.html以获取android记录的用法,但它基本上归结为以下实现:

扩展AsyncTask的私有子类,实现以下方法:

  1. onPreExecute - 在执行任务之前在UI线程上调用并用于设置填充(例如显示进度条)

  2. doInBackground - 您想要执行的实际操作在onPreExecute之后立即触发

  3. onPostExecute - 在doInBackground完成后在UI线程上调用。这会将doInBackground的结果作为参数接收,然后可以在UI线程上使用。

  4. AsyncTask用于UI线程上不允许的操作,例如:

    • 打开套接字连接
    • HTTP请求(例如HTTPClient和HTTPURLConnection)
    • 尝试连接远程MySQL数据库
    • 正在下载文件 \ your JSON

    您当前的代码位于将在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

你可以试试这个。它对我有用,我希望它也适合你。