android中的Json令牌错误
我试图在没有网络连接的情况下运行我的项目。如果网络可用,则不会出现问题 我犯了这个错误android中的Json令牌错误,android,json,nullpointerexception,Android,Json,Nullpointerexception,我试图在没有网络连接的情况下运行我的项目。如果网络可用,则不会出现问题 我犯了这个错误 01-24 17:41:19.725: E/AndroidRuntime(1077): FATAL EXCEPTION: AsyncTask #3 01-24 17:41:19.725: E/AndroidRuntime(1077): java.lang.RuntimeException: An error occured while executing doInBackground() 01-24 17:4
01-24 17:41:19.725: E/AndroidRuntime(1077): FATAL EXCEPTION: AsyncTask #3
01-24 17:41:19.725: E/AndroidRuntime(1077): java.lang.RuntimeException: An error occured while executing doInBackground()
01-24 17:41:19.725: E/AndroidRuntime(1077): at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-24 17:41:19.725: E/AndroidRuntime(1077): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
01-24 17:41:19.725: E/AndroidRuntime(1077): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
01-24 17:41:19.725: E/AndroidRuntime(1077): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
01-24 17:41:19.725: E/AndroidRuntime(1077): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-24 17:41:19.725: E/AndroidRuntime(1077): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-24 17:41:19.725: E/AndroidRuntime(1077): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-24 17:41:19.725: E/AndroidRuntime(1077): at java.lang.Thread.run(Thread.java:856)
01-24 17:41:19.725: E/AndroidRuntime(1077): Caused by: java.lang.NullPointerException
01-24 17:41:19.725: E/AndroidRuntime(1077): at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
01-24 17:41:19.725: E/AndroidRuntime(1077): at org.json.JSONTokener.nextValue(JSONTokener.java:94)
01-24 17:41:19.725: E/AndroidRuntime(1077): at org.json.JSONObject.<init>(JSONObject.java:154)
01-24 17:41:19.725: E/AndroidRuntime(1077): at org.json.JSONObject.<init>(JSONObject.java:171)
01-24 17:41:19.725: E/AndroidRuntime(1077): at com.example.sms.JsonParser.makeHttpRequest(JsonParser.java:136)
01-24 17:41:19.725: E/AndroidRuntime(1077): at co m.example.sms.LoginActivity$AttemptLogin.doInBackground(LoginActivity.java:298)
01-24 17:41:19.725: E/AndroidRuntime(1077): at com.example.sms.LoginActivity$AttemptLogin.doInBackground(LoginActivity.java:1)
01-24 17:41:19.725: E/AndroidRuntime(1077): at
01-2417:41:19.725:E/AndroidRuntime(1077):致命异常:AsyncTask#3
01-24 17:41:19.725:E/AndroidRuntime(1077):java.lang.RuntimeException:执行doInBackground()时出错
01-24 17:41:19.725:E/AndroidRuntime(1077):在android.os.AsyncTask$3.done(AsyncTask.java:299)
01-24 17:41:19.725:E/AndroidRuntime(1077):在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
01-24 17:41:19.725:E/AndroidRuntime(1077):在java.util.concurrent.FutureTask.setException(FutureTask.java:219)
01-24 17:41:19.725:E/AndroidRuntime(1077):在java.util.concurrent.FutureTask.run(FutureTask.java:239)
01-24 17:41:19.725:E/AndroidRuntime(1077):在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-24 17:41:19.725:E/AndroidRuntime(1077):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-24 17:41:19.725:E/AndroidRuntime(1077):在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-24 17:41:19.725:E/AndroidRuntime(1077):在java.lang.Thread.run(Thread.java:856)
01-24 17:41:19.725:E/AndroidRuntime(1077):由以下原因引起:java.lang.NullPointerException
01-24 17:41:19.725:E/AndroidRuntime(1077):在org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
01-2417:41:19.725:E/AndroidRuntime(1077):位于org.json.JSONTokener.nextValue(JSONTokener.java:94)
01-2417:41:19.725:E/AndroidRuntime(1077):位于org.json.JSONObject.(JSONObject.java:154)
01-2417:41:19.725:E/AndroidRuntime(1077):位于org.json.JSONObject.(JSONObject.java:171)
01-24 17:41:19.725:E/AndroidRuntime(1077):位于com.example.sms.JsonParser.makeHttpRequest(JsonParser.java:136)
01-24 17:41:19.725:E/AndroidRuntime(1077):在co m.example.sms.LoginActivity$AttemptLogin.doInBackground(LoginActivity.java:298)
01-24 17:41:19.725:E/AndroidRuntime(1077):在com.example.sms.LoginActivity$AttemptLogin.doInBackground(LoginActivity.java:1)
01-2417:41:19.725:E/AndroidRuntime(1077):在
这是我的JsonParser类
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
try {
json=null;
jsonObject= null;
if(method.equalsIgnoreCase("POST")){
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
System.out.println(is);
System.out.println("getting the content");
}else if(method.equalsIgnoreCase("GET")){
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("getting all the values ");
try {
json = null;
jsonObject =null;
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 {
Log.i("tagconvertstr1", "["+json+"]");
//if(TextUtils.isEmpty(json))
if(json!=null||json!="null")
{
jss= "not empty";
System.out.println("json is not equal to null");
jsonObject = new JSONObject(json);
System.out.println("json object parse finished");
Log.i("tagconvertstr2","["+json+"]");
}
else
{
System.out.println(" it is null value ");
jss= "empty";
System.out.println("jss value is" +jss);
}
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
System.out.println("jsson object is" + json);
return jsonObject;
}
公共JSONObject makeHttpRequest(字符串url、字符串方法、,
列表参数){
试一试{
json=null;
jsonObject=null;
if(方法equalsIgnoreCase(“POST”)){
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
setEntity(新的UrlEncodedFormEntity(参数));
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
is=httpEntity.getContent();
系统输出打印项次(is);
System.out.println(“获取内容”);
}else if(method.equalsIgnoreCase(“GET”)){
DefaultHttpClient httpClient=新的DefaultHttpClient();
String paramString=URLEncodedUtils.format(params,“utf-8”);
url+=“?”+参数字符串;
HttpGet HttpGet=新的HttpGet(url);
HttpResponse HttpResponse=httpClient.execute(httpGet);
HttpEntity HttpEntity=httpResponse.getEntity();
is=httpEntity.getContent();
}
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
System.out.println(“获取所有值”);
试试{
json=null;
jsonObject=null;
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());
}
试一试{
Log.i(“tagconvertstr1”,“[“+json+]”);
//if(TextUtils.isEmpty(json))
if(json!=null | | json!=“null”)
{
jss=“非空”;
System.out.println(“json不等于null”);
jsonObject=新的jsonObject(json);
System.out.println(“json对象解析完成”);
Log.i(“tagconvertstr2”,“[”+json+“]”);
}
其他的
{
System.out.println(“它是空值”);
jss=“空”;
System.out.println(“jss值为”+jss);
}
}捕获(JSONException e){
Log.e(“JSON解析器”,“错误解析数据”+e.toString());
}
System.out.println(“jsson对象是”+json);
返回jsonObject;
}
我不知道为什么我得到这个错误,即使我检查为空!有人能帮我吗?在打电话给webservice之前,请检查internet是否可用
if(isInternetConnected()){
// call your webservice
}
else{
AlertUtils.showNetworkAlert(RegisterActivity.this);
}
检查网络连接
public static boolean isInternetConnected(){
ConnectivityManager cm = (ConnectivityManager) SSApplication.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
boolean isConnected = false;
if(info != null && info.isConnectedOrConnecting()){
isConnected = true;
}
return isConnected;
}
正如您所说,此错误是在断开网络连接时发生的。这意味着您收到空值并将空值传递给json。如果将null分配给构造函数,则JSONObject无法捕获错误。因此,要解决此问题,请替换以下代码
jsonObject=new JSONObject(json) ;
到
jsonObject=mewJSONObject(json)这是我的第136行,它说错误发生在类的第136行。在执行resthttpResp.getStatusLine().getStatusCode()之前,应该检查httpresponse返回代码;将给你状态码(200404等…)我做了ganesh…当我的服务器没有连接时,我需要检查nahi请检查你返回的“jsonObject”是否为空。如果jsonobject为null,则处理该条件。
jsonObject=new JSONObject(json == null ? "" : json) ;