Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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 从URL解析Json_Java_Android - Fatal编程技术网

Java 从URL解析Json

Java 从URL解析Json,java,android,Java,Android,运行此命令时,我得到java.lang.NullPointerException。有人知道为什么会发生这种情况,以及我如何解决它吗 请看一下我的代码,如果你有任何建议,请告诉我 {"begin":[{"id":1,"name":"Andy","size":1}],"open":[{"id":1,"name":"Tom","size":2}]} 片段 public class MainFragment extends Fragment { public MainFragment() {}

运行此命令时,我得到java.lang.NullPointerException。有人知道为什么会发生这种情况,以及我如何解决它吗

请看一下我的代码,如果你有任何建议,请告诉我

{"begin":[{"id":1,"name":"Andy","size":1}],"open":[{"id":1,"name":"Tom","size":2}]}
片段

public class MainFragment extends Fragment {
    public MainFragment() {}

    //URL to get JSON Array
    private String url = "URL...";

    //JSON Node Names
    private static final String TAG_BEGIN = "begin";
    private static final String TAG_ID = "id";
    private static final String TAG_NAME = "name";
    private static final String TAG_SIZE = "size";

    JSONArray begin = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);

        new JSONParse().execute();

        return rootView;
    }

    private class JSONParse extends AsyncTask<String, String, JSONObject> {
        private ProgressDialog pDialog;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(HomeActivity.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
                begin = json.getJSONArray(TAG_BEGIN);
                JSONObject c = begin.getJSONObject(0);

                // Storing  JSON item in a Variable
                String id = c.getString(TAG_ID);
                String name = c.getString(TAG_NAME);
                String size = c.getString(TAG_SIZE);

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

        }
    }
}
错误:

E/JSON Parser﹕ Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject

FATAL EXCEPTION: main

java.lang.NullPointerException
at
...$MainFragment$JSONParse.onPostExecute(MainActivity.java:399)
at
...$MainFragment$JSONParse.onPostExecute(MainActivity.java:373)
而且

private class JSONParse extends AsyncTask<String, String, JSONObject> {
onPostExecute内部

JSONArray begin = json.getJSONArray(TAG_BEGIN);
 for (int i = 0; i < begin(); i++) {
  try {

   JSONObject b = = begin(i);

   String id = b.getString(TAG_ID);
   String name = b.getString(TAG_NAME);
   String size = b.getString(TAG_SIZE);

  } catch (JSONException e) {
   e.printStackTrace();
  }
 }
JSONArray-begin=json.getJSONArray(TAG_-begin);
对于(int i=0;i
首先确保您的JSONObject不为null。然后慢慢地根据类型逐行横向移动

JSONArray begin = json.getJSONArray(TAG_BEGIN);
那么可能会这样做吗

for(int n = 0; n < begin.length(); n++)
{
    JSONObject object = begin.getJSONObject(n);
    // query through the array
    String id = object.getString(TAG_ID);
    String name = object.getString(TAG_NAME);
    String size = object.getString(TAG_SIZE);
    //Now do something with the strings
}
for(int n=0;n

当然,你也会在TAG_打开时做同样的事情。让我知道这是否有效,我将乐意尽可能提供帮助。

错误显示http请求的返回字符串不仅仅是json数据


类似于
我没有使用片段,但这里有类似的解决方案

更改url和键值以从json检索值。我没有你的网址,所以我用了其他的。请检查一下。相同的概念,只是我没有使用片段,但是这个json解析代码工作得很好

首先,您必须处理网络上的主线程异常

加:

在你们班上

将此添加到文件:

<uses-permission android:name="android.permission.INTERNET"/>
Java

package com.example.test;

import android.os.StrictMode;
import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

        StrictMode.setThreadPolicy(policy);
        // 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");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}
}

只是旁注。如果你使用谷歌截击,它将帮助你很多!谢谢你的提示。你知道如何不用谷歌截击来解决我的问题吗?你的代码看起来不错。我假设doInBackground返回的json对象为null。也许没有网络连接?@NobuGames我有网络连接。我已经想到了。我的建议是,你可以在客户端解析JSON,然后将数据发送到服务器端,这是一种非常简单和可取的方式,谢谢你的建议。我试过了,但仍然收到相同的错误。您是否检查过受保护的void onPostExecute(JSONObject json){…}中的“json”对象,如果它为空?我将如何做?我在问题中添加了JSONParser。也许问题就出在这里?就这样?如果(json==null){}当我在toast中显示json时,它返回为null。在调试时,请查看watch/locals选项卡中的“json”对象,以确定它在传递给我在上面的注释中发布的方法时是否为null。否则,您首先抓取json请求时会遇到问题,应该重新查看抓取的方式。当我在浏览器中访问URL时,我会得到相同的结果{“begin”:[{“id”:1,“name”:“Andy”,“size”:1}],“open”:[{“id”:1,“name”:“Tom”,“size”:2}]
for(int n = 0; n < begin.length(); n++)
{
    JSONObject object = begin.getJSONObject(n);
    // query through the array
    String id = object.getString(TAG_ID);
    String name = object.getString(TAG_NAME);
    String size = object.getString(TAG_SIZE);
    //Now do something with the strings
}
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy); 
<uses-permission android:name="android.permission.INTERNET"/>
    package com.example.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Making HTTP request
        String url = "http://api.androidhive.info/contacts/";
        JSONParser jParser = new JSONParser();

        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        try {
            // Getting JSON Array
            JSONArray begin = json.getJSONArray("contacts");
            JSONObject c = begin.getJSONObject(0);

            // Storing  JSON item in a Variable
            String id = c.getString("id");
            String name = c.getString("name");
            String size = c.getString("email");

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


    @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;
    }

}
package com.example.test;

import android.os.StrictMode;
import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

        StrictMode.setThreadPolicy(policy);
        // 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");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}
}