0

I am new to android programming. I'm trying to show some data from my online MySQL database in android app. I am watching and following a tutorial on youtube. Something isn't right here since I am getting an error. I have searched for 2 days and I can't seem to find a solution. In my opinion, the data doesn't get transferred correctly from the server to the app. If i change String[] data; to String[] data = new String[0] the program starts normally, but no data is shown.

My questions are: Is my PHP file (JSON) correct? I am only trying to print out the text. Is my server address correct?

String address="http://multijugate-beings.000webhostapp.com/conn.php";

Is my ArrayAdapter code right?

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

how can I fix this problem?

See the code below:

conn.php code:

My PHP file: http://multijugate-beings.000webhostapp.com/conn.php

[{"0":"1","ID":"1","1":"Notranjska","Kraj":"Notranjska","2":"2018-02-27","Datum":"2018-02-27","3":"Cirkus asfiads","Naslov":"Cirkus asfiads","4":"dasifjodsaufnhldsjlif fj uie6fhsjecd","opis":"dasifjodsaufnhldsjlif fj uie6fhsjecd","5":"www.d.d.","Povezava":"www.d.d."},{"0":"3","ID":"3","1":"Notranjska","Kraj":"Notranjska","2":"2018-02-26","Datum":"2018-02-26","3":"top asfiads","Naslov":"top asfiads","4":"dasivbif fj uie6fhsjecd","opis":"dasivbif fj uie6fhsjecd","5":"www.d.d.","Povezava":"www.d.d."}]

My android studio Java class:

package com.example.rok.testprvastran;

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 Gorenjska extends AppCompatActivity {

    ListView lv;
    ArrayAdapter<String> adapter;
    String address="http://multijugate-beings.000webhostapp.com/conn.php";
    InputStream is = null;
    String line=null;
    String result=null;
    String[] data;
    JSONObject jo = null;

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

        lv=(ListView) findViewById(R.id.lvgor);

        StrictMode.setThreadPolicy((new StrictMode.ThreadPolicy.Builder().permitNetwork().build()));

        getData();

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

    private void getData() {
        try {

            URL url = new URL(address);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");

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

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

        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            StringBuilder sb = new StringBuilder();
            while ((line = br.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            JSONArray ja = new JSONArray(result);

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

            for (int i = 0; i < ja.length(); i++) {
                jo = ja.getJSONObject(i);
                data[i] = jo.getString("Name");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

The error stacktrace:

02-21 11:00:19.884 19111-19111/com.example.rok.testprvastran E/AndroidRuntime: FATAL EXCEPTION: main
                                                                           Process: com.example.rok.testprvastran, PID: 19111
                                                                           java.lang.NullPointerException
                                                                               at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
                                                                               at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
                                                                               at android.widget.AbsListView.obtainView(AbsListView.java:2306)
                                                                               at android.widget.ListView.makeAndAddView(ListView.java:1790)
                                                                               at android.widget.ListView.fillDown(ListView.java:691)
                                                                               at android.widget.ListView.fillFromTop(ListView.java:752)
                                                                               at android.widget.ListView.layoutChildren(ListView.java:1630)
                                                                               at android.widget.AbsListView.onLayout(AbsListView.java:2130)
                                                                               at android.view.View.layout(View.java:14898)
                                                                               at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                               at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1197)
                                                                               at android.view.View.layout(View.java:14898)
                                                                               at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                               at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
                                                                               at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
                                                                               at android.view.View.layout(View.java:14898)
                                                                               at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                               at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:443)
                                                                               at android.view.View.layout(View.java:14898)
                                                                               at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                               at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
                                                                               at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
                                                                               at android.view.View.layout(View.java:14898)
                                                                               at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                               at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1673)
                                                                               at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
                                                                               at android.widget.LinearLayout.onLayout(LinearLayout.java:1436)
                                                                               at android.view.View.layout(View.java:14898)
                                                                               at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                               at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
                                                                               at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
                                                                               at android.view.View.layout(View.java:14898)
                                                                               at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                               at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2032)
                                                                               at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1789)
                                                                               at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1044)
                                                                               at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5896)
                                                                               at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
                                                                               at android.view.Choreographer.doCallbacks(Choreographer.java:574)
                                                                               at android.view.Choreographer.doFrame(Choreographer.java:544)
                                                                               at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
                                                                               at android.os.Handler.handleCallback(Handler.java:733)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                               at android.os.Looper.loop(Looper.java:136)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:5118)
                                                                               at java.lang.reflect.Method.invokeNative(Native Method)
                                                                               at java.lang.reflect.Method.invoke(Method.java:515)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
                                                                               at dalvik.system.NativeStart.main(Native Method)

EDIT!!!

Thanks to this awesome community i have this partially fixed!. i removed arrayadapter from OnCreate and made a new one:

void initArrayAdapter(){
    if (data != null) {
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
        lv.setAdapter(adapter);
    }}

And i added initArrayAdapter(); in getData.

My application now doesn't show errors, but it doesn't show any data either. Any suggestions?

EDIT"!!!

Everything works now! thanks

1 Answers1

0

Please remove the array adapter initialization from onCreate method.

    void initArrayAdapter(){
        if (data != null){
            adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
                lv.setAdapter(adapter);
        }
    }

call this method in getData() method

 private void getData() {
    try {

        URL url = new URL(address);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestMethod("GET");

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

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

    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        while ((line = br.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        result = sb.toString();

    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        JSONArray ja = new JSONArray(result);

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

        for (int i = 0; i < ja.length(); i++) {
            jo = ja.getJSONObject(i);
            data[i] = jo.getString("Name");
        }
        //call it here
        initArrayAdapter();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

This way data will not be null. In your implementation if exception thrown while fetching data. onCreate() method will continue to setup the adapter with null data. Will Recommend to use Volley library for fetching data from server.

Ashish Pardhiye
  • 510
  • 4
  • 13
  • 1
    Thank you for your effort! Application now doesn't show error, but no data is shown either. It shows me a blank activity. Any suggestions how to fix this? – rakesh indida Feb 21 '18 at 12:47
  • Please see the data link you have provided. `data[i] = jo.getString("Name");` there is no string value with "Name" key @rakesh indida – Ashish Pardhiye Feb 21 '18 at 12:52
  • I changed it now and it works! thanks! – rakesh indida Feb 21 '18 at 13:03
  • Hi @AshishPardhiye! Could you give me some help on https://stackoverflow.com/questions/65677770/problem-with-display-mysql-data-on-android-studio-using-volley/65678332?noredirect=1#comment116154828_65678332 – swiftlearneer Jan 14 '21 at 04:40