Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用AsyncTask解析JSON?_Java_Android_Json - Fatal编程技术网

Java 如何使用AsyncTask解析JSON?

Java 如何使用AsyncTask解析JSON?,java,android,json,Java,Android,Json,我试图解析此JSON站点中的一些字符串: 我使用asynctask编写了以下代码: package com.example.nortti.jsonexample; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget

我试图解析此JSON站点中的一些字符串:

我使用asynctask编写了以下代码:

package com.example.nortti.jsonexample;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends Activity {
    TextView txView;

//URL to get JSON Array
private static String url = "http://localhost:10101/api/stats/1";

//JSON Node Names
private static final String TAG_USER = "";
private static final String TAG_NAME = "PersonName";
private static final String TAG_EMAIL = "Rank";


JSONArray user;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    user = null;
            new JSONParse().execute();



}

private class JSONParse extends AsyncTask<String, String, JSONObject> {
    private ProgressDialog pDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        txView = (TextView)findViewById(R.id.txView);

        pDialog = new ProgressDialog(MainActivity.this);
        pDialog.setMessage("Getting Data ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();

    }

    @Override
    protected JSONObject doInBackground(String... args) {
        JSONParser jParser = new JSONParser();

        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        return json;
    }
    @Override
    protected void onPostExecute(JSONObject json) {
        pDialog.dismiss();
        try {
            // Getting JSON Array
            user = json.getJSONArray("ArrayOfCommonStatViewModel");
            Toast.makeText(getApplication(),user.toString(),Toast.LENGTH_SHORT).show();
            JSONObject c = user.getJSONObject(0);

            // Storing  JSON item in a Variable

            String name = c.getString(TAG_NAME);
            String email = c.getString(TAG_EMAIL);

            //Set JSON Data in TextView

            txView.setText(name+" " +email);


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

    }
}

}
但是它说我有一个
NullPointerException

我想获取一个JSONArray来获取信息,并将其放入
列表视图中

UPD:这是JSON截图

UPD2:完整日志

12-17 14:17:03.712 20308-20308/com.example.nortti.politrange E/AndroidRuntime: FATAL EXCEPTION: main
                                                                               Process: com.example.nortti.politrange, PID: 20308
                                                                               android.os.NetworkOnMainThreadException
                                                                                   at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
                                                                                   at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
                                                                                   at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
                                                                                   at java.net.InetAddress.getAllByName(InetAddress.java:215)
                                                                                   at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:44)
                                                                                   at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:102)
                                                                                   at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:318)
                                                                                   at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:373)
                                                                                   at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:225)
                                                                                   at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)
                                                                                   at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)
                                                                                   at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
                                                                                   at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:178)
                                                                                   at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
                                                                                   at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
                                                                                   at com.example.nortti.politrange.utils.WebApiAdapter.select(WebApiAdapter.java:33)
                                                                                   at com.example.nortti.politrange.intefaces.impls.PersonCatalog.populateData(PersonCatalog.java:37)
                                                                                   at com.example.nortti.politrange.views.GeneralFragment.listData(GeneralFragment.java:65)
                                                                                   at com.example.nortti.politrange.views.GeneralFragment.onClick(GeneralFragment.java:88)
                                                                                   at android.view.View.performClick(View.java:4756)
                                                                                   at android.view.View$PerformClick.run(View.java:19761)
                                                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                   at android.os.Looper.loop(Looper.java:135)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5253)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:900)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:695)

如果您试图用JSON解析器解析XML文档,它将无法工作。让我们看一看Link,它将告诉你如何正确地解析一个XML文档(在Android环境中):

你试图用JSON解析器解析XML文档,它不起作用。让我们看看链接,它将告诉您如何正确地解析XML文档(在Android环境中):

,而不是开发整个解析代码,尝试使用谷歌的凌空库,这是一个<代码>异步代码< /代码>库,用于解析<代码> JSON<代码>。
这是一个很好的方法。

不要开发整个解析代码,而是尝试使用谷歌的
Volley
库,它是一个用于解析
JSON
异步
库。
这是一个很好的解决方案。

您将获得NetworkOrMainThreadException

将下面的代码放在onCreate()上:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); 

希望这将对您有所帮助。

您将获得网络或InthreadException

将下面的代码放在onCreate()上:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); 

希望这将对您有所帮助。

您将获得一个NetworkMainThread异常,因为您正在UI线程中实现一个网络操作,所以要从本地主机加载json数据,您需要为它实现一个单独的线程

您将获得一个NetworkMainThread异常,因为您是在UI线程中实现网络操作,因此要从本地主机加载json数据,您需要为其实现单独的线程

您尝试解析的内容实际上是
xml
而不是
json
。如果需要执行网络请求,请解析
JSON
,您可以使用库。它非常简单,没有麻烦。这是一个很好的教程。希望有帮助。

您试图解析的内容实际上是
xml
而不是
JSON
。如果需要执行网络请求,请解析
JSON
,您可以使用库。它非常简单,没有麻烦。这是一个很好的教程。希望能有帮助

enter code here
////在android studio中添加http客户端和http核心库/////

类mytask扩展了AsyncTask{

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();


    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub

        String url = "http://192.168.1.13/mywebservice/getbook.php";
        json = getJSONFromUrl(url);

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        Toast.makeText(ctx, json, Toast.LENGTH_LONG).show();
        parser_01();
    }

}

// from url to json object starts.......................................
public String getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            // sb.append(line + "n");
            sb.append(line);
        }
        is.close();
        json = sb.toString();

    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    return json;

}

// from url to json object Ends.......................................

public void parser_01() {
    try {




        String jstring = json;



        JSONObject jobject = new JSONObject(jstring);

        JSONArray bookarray = jobject.getJSONArray("data");

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

            String isdn = bookarray.getJSONObject(i).getString("isdn") + "";
            String title = bookarray.getJSONObject(i).getString("title") + "";
            String author = bookarray.getJSONObject(i).getString("author") + "";
            String price = bookarray.getJSONObject(i).getString("price") + "";





        }



    } catch (Exception e) {
        // TODO: handle exception
    }

}
@覆盖
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
字符串url=”http://192.168.1.13/mywebservice/getbook.php";
json=getJSONFromUrl(url);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
Toast.makeText(ctx,json,Toast.LENGTH_LONG).show();
解析器_01();
}
}
//从url到json对象开始。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
公共字符串getJSONFromUrl(字符串url){
//发出HTTP请求
试一试{
//defaultHttpClient
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
is=httpEntity.getContent();
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(
is,“iso-8859-1”),8);
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
//sb.附加(第+行“n”);
某人附加(行);
}
is.close();
json=sb.toString();
}捕获(例外e){
Log.e(“缓冲区错误”,“错误转换结果”+e.toString());
}
返回json;
}
//从url到json对象结束。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
公共空解析器_01(){
试一试{
字符串jstring=json;
JSONObject jobject=新的JSONObject(jstring);
JSONArray bookarray=jobject.getJSONArray(“数据”);
对于(int i=0;i
////在android studio中添加http客户端和http核心库/////

类mytask扩展了AsyncTask{

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();


    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub

        String url = "http://192.168.1.13/mywebservice/getbook.php";
        json = getJSONFromUrl(url);

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        Toast.makeText(ctx, json, Toast.LENGTH_LONG).show();
        parser_01();
    }

}

// from url to json object starts.......................................
public String getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            // sb.append(line + "n");
            sb.append(line);
        }
        is.close();
        json = sb.toString();

    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    return json;

}

// from url to json object Ends.......................................

public void parser_01() {
    try {




        String jstring = json;



        JSONObject jobject = new JSONObject(jstring);

        JSONArray bookarray = jobject.getJSONArray("data");

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

            String isdn = bookarray.getJSONObject(i).getString("isdn") + "";
            String title = bookarray.getJSONObject(i).getString("title") + "";
            String author = bookarray.getJSONObject(i).getString("author") + "";
            String price = bookarray.getJSONObject(i).getString("price") + "";





        }



    } catch (Exception e) {
        // TODO: handle exception
    }

}
@覆盖
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
字符串url=”http://192.168.1.13/mywebservice/getbook.php";
json=getJSONFromUrl(url);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
Toast.makeText(ctx,json,Toast.LENGTH_LONG).show();
解析器_01();
}
}
//从url到json对象开始。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
公共字符串getJSONFromUrl(字符串url){
//发出HTTP请求
试一试{
//defaultHttpClient
默认httpClient httpClient=