java - 无法将 JSON 加载到 ListView

标签 java android sql

我尝试将数据从 MySQL 检索到 listview

问题是,当我打开 Activity 时,我遇到了 NullPointerException

我发现这是因为我的 String[] 数据声明。

有什么建议吗?

package com.budiluhur.arisanaliza;

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

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

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

public class Kelompok extends AppCompatActivity {

    ListView listView;
    ArrayAdapter<String> adapter;
   // String address = "";
    InputStream is = null;
    String line = null;
    String result = null;
    String[] data;


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

        listView = findViewById(R.id.KelompokList);


      getData();

      adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
      listView.setAdapter(adapter);

    }

    private void getData(){

        try {
            URL url = new URL("https://ohmybags.id/aliza/Kelompok.php");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");

            is = new BufferedInputStream(connection.getInputStream());

        }catch (Exception e){
            e.getMessage();
        }

        try{
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
            StringBuilder stringBuilder = new StringBuilder();

            while ((line=bufferedReader.readLine()) != null){
                stringBuilder.append(line+"\n");
            }

            is.close();
            result = stringBuilder.toString();
        }catch (Exception e){
            e.getMessage();
        }

        try{
            JSONArray jsonArray = new JSONArray(result);
            JSONObject jsonObject = null;

            data = new String[jsonArray.length()];

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

                jsonObject = jsonArray.getJSONObject(i);
                data[i]=jsonObject.getString("nama_kelompok");
            }

        }catch (Exception e){
            e.getMessage();
        }
    }
}


这是错误消息


E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.budiluhur.arisanaliza, PID: 30221
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.budiluhur.arisanaliza/com.budiluhur.arisanaliza.Kelompok}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
        at android.app.ActivityThread.-wrap14(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6776)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
     Caused by: java.lang.NullPointerException
        at java.util.Objects.requireNonNull(Objects.java:203)
        at java.util.Arrays$ArrayList.<init>(Arrays.java:3826)
        at java.util.Arrays.asList(Arrays.java:3813)
        at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:139)
        at com.budiluhur.arisanaliza.Kelompok.onCreate(Kelompok.java:80)
        at android.app.Activity.performCreate(Activity.java:6955)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)

我发现这是因为“String [] data;”的声明

但是,我已经在 getData() 上声明了它,应该替换它。

请指教,并对我糟糕的英语表示歉意。

最佳答案

    ListView listView;
    ArrayAdapter<String> adapter;
   // String address = "";
    InputStream is = null;
    String line = null;
    String result = null;
    String[] data;


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

        listView = findViewById(R.id.KelompokList);


      getData();

    }

    private void getData(){

        try {
            URL url = new URL("https://ohmybags.id/aliza/Kelompok.php");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");

            is = new BufferedInputStream(connection.getInputStream());

        }catch (Exception e){
            e.getMessage();
        }

        try{
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
            StringBuilder stringBuilder = new StringBuilder();

            while ((line=bufferedReader.readLine()) != null){
                stringBuilder.append(line+"\n");
            }

            is.close();
            result = stringBuilder.toString();
        }catch (Exception e){
            e.getMessage();
        }

        try{
            JSONArray jsonArray = new JSONArray(result);

            data = new String[jsonArray.length()];

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

               JSONObject jsonObject = jsonArray.getJSONObject(i);
                data[i]=jsonObject.getString("nama_kelompok");
            }

      adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
      listView.setAdapter(adapter);


        }catch (Exception e){
            e.getMessage();
        }
    }

关于java - 无法将 JSON 加载到 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56699090/

相关文章:

Android WebView 不适用于基于 anchor 链接(跳转链接)的 Wordpress 菜单

mysql - 来自触发器 MySQL 的结果集

mysql - 如何为数据数组sql创建短代码

java - 从 SQL 表自动创建 Java 类型

java - 使用Java获取终端命令的输出

java - Spring + Thymeleaf 自定义验证展示

android - Android 的内部存储;创建文件

android - 如何让EditText只能读取和复制但不能编辑

JavaFX 在多个页面上打印表格 View

java - 比较 BigDecimal