I'm working on an android app for a project. Part of the project is populating a listview from a localhost database. I've attempted to debug the program and attempted to access the URL directly and using other android project. It runs just fine and does the job. I debugged the code down to the line http.connect and it throws an exception which in lead causes the respond variable to remain -1 and causes the whole program to screw over. I dont understand what is exactly happening and where is the source of the problem. A little nod to what im doing wrong would be appreciated. thank you.
Edit: THIS IS NOT A NULL POINTER ISSUE. I already studied the problem and debugged the code. As well as studied a question that deals with null pointers. This is nothing like it. The null pointer EXISTS but it isn't the main problem the main problem is the connection problem which CASUES the nullpointer
package com.example.databsemananger;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class MainActivity extends AppCompatActivity {
String[] data;
@Override
protected void onCreate(Bundle savedInstanceState) {
boolean accepted;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if( ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET)!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.INTERNET},123);
}
DownloadTextTask test = new DownloadTextTask();
test.execute();
/* String s="";
String[] mobileArray =s.split(",");
ArrayAdapter adapter = new ArrayAdapter<String>(this,
R.layout.activity_main, mobileArray);*/
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options_menu,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch(item.getItemId())
{
case R.id.optionsItem:
{
Intent i = new Intent(getApplicationContext(),input.class);
startActivity(i);
setContentView(R.layout.activity_input);
return true;
}
}
return super.onOptionsItemSelected(item);
}
private InputStream OpenHttp() throws IOException {
InputStream in = null;
int response = -1;
URL url = new URL("http://192.168.1.103/webService/get.php");
URLConnection conn = url.openConnection();
if (!(conn instanceof HttpURLConnection))
throw new IOException("Not an HTTP connection");
try{
HttpURLConnection httpConn = (HttpURLConnection) conn;
httpConn.setAllowUserInteraction(false);
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestMethod("GET");
httpConn.connect();
response = httpConn.getResponseCode();
if (response == HttpURLConnection.HTTP_OK) {
in = httpConn.getInputStream();
}
}
catch (Exception ex)
{
Log.d("Networking", ex.getLocalizedMessage());
throw new IOException("Error connecting");
}
return in;
}
public String loadData(){
int BufferSize_Size=1000;
InputStream in=null;
try{
in=OpenHttp();
} catch (IOException e) {
e.printStackTrace();
}
InputStreamReader isr= new InputStreamReader(in);
int charRead;
String str="";
char[] inputBuffer=new char[BufferSize_Size];
try{
while((charRead=isr.read(inputBuffer))>0){
String readString= String.copyValueOf(inputBuffer,0,charRead);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
return "";
}
return str;
}
private class DownloadTextTask extends AsyncTask<String,Void,String> {
@Override
protected String doInBackground(String... strings) {
return loadData();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
int duration = Toast.LENGTH_SHORT;
Context context = getApplicationContext();
Toast toast = Toast.makeText(context, s, duration);
toast.show();
// ListView listView = (ListView) findViewById(R.id.items);
//listView.setAdapter(adapter);
}
}
}
The stack and the error:
2020-05-07 02:46:45.758 14133-14133/? I/databsemanange: Not late-enabling -Xcheck:jni (already on)
2020-05-07 02:46:45.782 14133-14133/? I/databsemanange: Unquickening 12 vdex files!
2020-05-07 02:46:45.783 14133-14133/? W/databsemanange: Unexpected CPU variant for X86 using defaults: x86
2020-05-07 02:46:46.066 14133-14133/com.example.databsemananger I/databsemanange: The ClassLoaderContext is a special shared library.
2020-05-07 02:46:46.228 14133-14133/com.example.databsemananger D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2020-05-07 02:46:46.229 14133-14133/com.example.databsemananger D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2020-05-07 02:46:46.263 14133-14173/com.example.databsemananger D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
2020-05-07 02:46:46.314 14133-14173/com.example.databsemananger D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
2020-05-07 02:46:46.330 14133-14173/com.example.databsemananger D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
2020-05-07 02:46:46.801 14133-14133/com.example.databsemananger W/databsemanange: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
2020-05-07 02:46:46.801 14133-14133/com.example.databsemananger W/databsemanange: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
2020-05-07 02:46:46.882 14133-14190/com.example.databsemananger D/Networking: Cleartext HTTP traffic to 192.168.1.103 not permitted
2020-05-07 02:46:46.882 14133-14190/com.example.databsemananger W/System.err: java.io.IOException: Error connecting
2020-05-07 02:46:46.882 14133-14190/com.example.databsemananger W/System.err: at com.example.databsemananger.MainActivity.OpenHttp(MainActivity.java:102)
2020-05-07 02:46:46.883 14133-14190/com.example.databsemananger W/System.err: at com.example.databsemananger.MainActivity.loadData(MainActivity.java:112)
2020-05-07 02:46:46.883 14133-14190/com.example.databsemananger W/System.err: at com.example.databsemananger.MainActivity$DownloadTextTask.doInBackground(MainActivity.java:140)
2020-05-07 02:46:46.883 14133-14190/com.example.databsemananger W/System.err: at com.example.databsemananger.MainActivity$DownloadTextTask.doInBackground(MainActivity.java:135)
2020-05-07 02:46:46.883 14133-14190/com.example.databsemananger W/System.err: at android.os.AsyncTask$3.call(AsyncTask.java:394)
2020-05-07 02:46:46.883 14133-14190/com.example.databsemananger W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2020-05-07 02:46:46.883 14133-14190/com.example.databsemananger W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
2020-05-07 02:46:46.883 14133-14190/com.example.databsemananger W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2020-05-07 02:46:46.883 14133-14190/com.example.databsemananger W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2020-05-07 02:46:46.883 14133-14190/com.example.databsemananger W/System.err: at java.lang.Thread.run(Thread.java:923)
2020-05-07 02:46:46.904 14133-14190/com.example.databsemananger E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.databsemananger, PID: 14133
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$4.done(AsyncTask.java:415)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:78)
at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
at com.example.databsemananger.MainActivity.loadData(MainActivity.java:117)
at com.example.databsemananger.MainActivity$DownloadTextTask.doInBackground(MainActivity.java:140)
at com.example.databsemananger.MainActivity$DownloadTextTask.doInBackground(MainActivity.java:135)
at android.os.AsyncTask$3.call(AsyncTask.java:394)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)