当前位置: 首页 > 知识库问答 >
问题:

尝试在空对象引用上调用虚拟方法“int java.lang.字符串长度()” - Android

盖辉
2023-03-14

我是Android的新手,我一直在尝试使用PHP和MYSQL进行JSON解析,当我运行应用程序时收到此错误。

错误:

致命异常:主进程:com.example.admin。androidjsonparsing,PID:13399 java.lang.NullPointerException:尝试调用虚拟方法“int java.lang.String”。org.json.JSONTokener.nextCleanInternal(JSONToker.java:116)org.json.SONTOkener.netxtValue(JSONTokener.java:94)org.json.JSONArray.(JSONArray.java:92)org.jsson.JSONArray(MainActivity.java:22)在android.os.AsyncTask.finish(Async任务.java:695在android.app.ActivityThread.main(ActivityThread.java:6669)的android.os.Looper.loop(Looper.java:193)上的androids.os.Handler.dispatchMessage(Handler.java:106),java.lang.reflect.Method。在com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)在com.anderoid.internall.os.ZygoteInit.main(Zygote Init.java:858)调用(本机方法)

这里是代码:

MainActivity.java

package com.example.admin.androidjsonparsing;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

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

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView) findViewById(R.id.listView);
    getJSON("http://192.168.1.4/AndroidJSONParsing/getdata.php");
}


private void getJSON(final String urlWebService) {

    class GetJSON extends AsyncTask<Void, Void, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }


        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
            try {
                loadIntoListView(s);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        protected String doInBackground(Void... voids) {
            try {
                URL url = new URL(urlWebService);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                StringBuilder sb = new StringBuilder();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String json;
                while ((json = bufferedReader.readLine()) != null) {
                    sb.append(json + "\n");
                }
                return sb.toString().trim();
            } catch (Exception e) {
                return null;
            }
        }
    }
    GetJSON getJSON = new GetJSON();
    getJSON.execute();
}

private void loadIntoListView(String json) throws JSONException {
    JSONArray jsonArray = new JSONArray(json);
    String[] heroes = new String[jsonArray.length()];
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject obj = jsonArray.getJSONObject(i);
        heroes[i] = obj.getString("name");
    }
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, heroes);
    listView.setAdapter(arrayAdapter);
}

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.admin.androidjsonparsing.MainActivity">


<!-- this is our listview where we will display the fetched data -->
<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true" />

</RelativeLayout>

共有3个答案

晋越彬
2023-03-14

出现问题是因为您< code>String json不是有效的json,可能是因为它是< code>null或< code >格式错误的json,然后尝试以下操作:

if (s!=null && !TextUtils.isEmpty(s)) loadIntoListView(s);
private void loadIntoListView(String json) throws JSONException {
    JSONArray jsonArray = new JSONArray(json);
    try {
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject obj = jsonArray.getJSONObject(i);
            heroes[i] = obj.getString("name");
        }
    } catch(JSONException e) {
        //handler json exception
    }
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, heroes);
    listView.setAdapter(arrayAdapter);
}
甘兴学
2023-03-14

试试这个代码...

    @Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);
    if (!TextUtils.isEmpty(s) && s!=null) {
        Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
        try {
            loadIntoListView(s);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
麹繁
2023-03-14

检查空字符串。

       @Override
       protected void onPostExecute(String s) {
       super.onPostExecute(s);
       if(s!=null){

        Toast.makeText(getApplicationContext(),s,Toast.LENGTH_SHORT).show();
                try {
                      loadIntoListView(s);
                    } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
    }
 类似资料:
  • 问题内容: 我收到以下错误 尝试在空对象引用上调用虚拟方法’void android.widget.StackView.setAdapter(android.widget.Adapter)’ 在这条线上 完整的片段 EventsFragment.java 是 Stack_Adapter.java Stack_Items 问题答案: 您正在执行: 你是。返回。 你为什么用? 在哪里?您应该从正确的x

  • 我的应用程序有问题,想解决它,但我无法访问解决方案,请帮帮我,,

  • 问题内容: 我尝试使用片段来打开数据库,但是,当我单击按钮开始搜索时,程序意外终止,并显示如下错误: 主片段: DBManager类: 顺便说一句,我在MainAcitivity中使用了有关DBManager的代码,并且成功了。将代码复制到上面的片段后,它失败了,该怎么办? 问题答案: 之前和之后你都做不到。 因为,您正在执行片段实例化时。该方法将始终返回null。另外,尽量不要将参考文献保留在您

  • 我尝试使用一个片段来打开一个数据库,但是,当我单击按钮开始搜索时,程序意外地终止,它显示这样的错误: 主要片段: 类DBManager: 顺便说一句,我在MainActivity中使用了关于DBManager的代码,它成功了。在我将代码复制到上面的片段后,它失败了。我该怎么办?

  • 我正在尝试实现一个外部色轮,它应该出现在的片段一直在崩溃我的应用程序。我想我明白为什么会发生这种情况,但是在尝试修复它大约6个小时后,我就要放弃了。我知道之前有人问过这个问题,但是我无法为我的特定问题导出一个修复程序。下面是我的代码: 这是Logcat错误: 如果有人能帮我解决这个问题,那就太好了。提前谢谢^^ 编辑:这是我的XML,按要求:

  • 问题内容: 我正在尝试将播放器的名称保存为共享的首选项,并通过再次以共享的首选项获取它的名称来使其显示在另一个活动中,但是我的应用程序崩溃了。 致命异常:主要 代码: 播放器 PlayGame.java PlayerName.java 问题答案: 您的应用在以下位置崩溃: 因为。 您忘记在PlayGame活动中进行初始化。