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