Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpsUrlConnection在异步任务中使用时引发异常_Java_Php_Android_Mysql_Http - Fatal编程技术网

Java HttpsUrlConnection在异步任务中使用时引发异常

Java HttpsUrlConnection在异步任务中使用时引发异常,java,php,android,mysql,http,Java,Php,Android,Mysql,Http,我正在为一个项目开发一个android应用程序。项目的一部分是从本地主机数据库填充listview。我尝试调试程序,并尝试直接访问URL和使用其他android项目。它运行正常,工作正常。我将代码调试到http.connect行,它抛出一个异常,导致respond变量保持-1,并导致整个程序出错。我不明白到底发生了什么,问题的根源在哪里。对我做错的事点头表示感谢。多谢各位 编辑:这不是空指针问题。我已经研究了这个问题并调试了代码。还研究了一个关于空指针的问题。这一点也不像。空指针存在,但它不是主

我正在为一个项目开发一个android应用程序。项目的一部分是从本地主机数据库填充listview。我尝试调试程序,并尝试直接访问URL和使用其他android项目。它运行正常,工作正常。我将代码调试到http.connect行,它抛出一个异常,导致respond变量保持-1,并导致整个程序出错。我不明白到底发生了什么,问题的根源在哪里。对我做错的事点头表示感谢。多谢各位

编辑:这不是空指针问题。我已经研究了这个问题并调试了代码。还研究了一个关于空指针的问题。这一点也不像。空指针存在,但它不是主要问题主要问题是导致空指针的连接问题

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);
        }
    }
}
package com.example.databemanger;
导入androidx.annotation.NonNull;
导入androidx.appcompat.app.appcompat活动;
导入androidx.core.app.ActivityCompat;
导入androidx.core.content.ContextCompat;
导入android.Manifest;
导入android.content.Context;
导入android.content.Intent;
导入android.content.pm.PackageManager;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.Toast;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.net.URLConnection;
公共类MainActivity扩展了AppCompatActivity{
字符串[]数据;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
布尔接受;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(ContextCompat.checkSelfPermission(this,Manifest.permission.INTERNET)!=PackageManager.permission\u已授予){
ActivityCompat.requestPermissions(这个新字符串[]{Manifest.permission.INTERNET},123);
}
DownloadTextTask测试=新建DownloadTextTask();
test.execute();
/*字符串s=“”;
字符串[]mobileArray=s.split(“,”);
ArrayAdapter=新的ArrayAdapter(此,
R.layout.activity_main,mobileArray)*/
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单.选项菜单,菜单);
返回super.onCreateOptions菜单(菜单);
}
@凌驾
公共布尔值OnOptionItemSelected(@NonNull MenuItem item){
开关(item.getItemId())
{
案例R.id.选项项目:
{
Intent i=新的Intent(getApplicationContext(),input.class);
星触觉(i);
setContentView(R.layout.activity_输入);
返回true;
}
}
返回super.onOptionsItemSelected(项目);
}
私有InputStream OpenHttp()引发IOException{
InputStream in=null;
int响应=-1;
URL=新URL(“http://192.168.1.103/webService/get.php");
URLConnection conn=url.openConnection();
if(!(HttpURLConnection的连接实例))
抛出新IOException(“非HTTP连接”);
试一试{
HttpURLConnection httpConn=(HttpURLConnection)conn;
httpConn.setAllowUserInteraction(假);
httpConn.setInstanceFollowRedirects(真);
httpConn.setRequestMethod(“GET”);
httpConn.connect();
response=httpConn.getResponseCode();
if(response==HttpURLConnection.HTTP\u OK){
in=httpConn.getInputStream();
}
}
捕获(例外情况除外)
{
Log.d(“网络”,例如getLocalizedMessage());
抛出新IOException(“连接错误”);
}
返回;
}
公共字符串loadData(){
int BufferSize_Size=1000;
InputStream in=null;
试一试{
in=OpenHttp();
}捕获(IOE异常){
e、 printStackTrace();
}
InputStreamReader isr=新的InputStreamReader(in);
int-charRead;
字符串str=“”;
char[]inputBuffer=新字符[BufferSize_Size];
试一试{
而((charRead=isr.read(inputBuffer))>0){
String readString=String.copyValueOf(inputBuffer,0,charRead);
}
in.close();
}捕获(IOE异常){
e、 printStackTrace();
返回“”;
}
返回str;
}
私有类DownloadTextTask扩展了AsyncTask{
@凌驾
受保护的字符串背景(字符串…字符串){
返回loadData();
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
int duration=Toast.LENGTH\u SHORT;
Context=getApplicationContext();
Toast Toast=Toast.makeText(上下文、s、持续时间);
toast.show();
//ListView ListView=(ListView)findViewById(R.id.items);
//setAdapter(适配器);
}
}
}
堆栈和错误:

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) 
2020-05-0702:46:45.75814133-14133/?I/DatabaseManage:未延迟启用-Xcheck:jni(已启用)
2020-05-07 02:46:45.782 14133-14133/? I/DatabaseManage:取消12个vdex文件!
2020-05-07 02:46:45.783 14133-14133/? W/DataSemanage:使用默认值的X86的意外CPU变量:X86
2020-05-07 02:46:46.066 14133-14133/com.example.databemanger I/databemanage:ClassLoaderContext是一个特殊的共享库。
2020-05-07 02:46:46.228 14133-14133/com.example.databsemananger D/NetworkSecurityConfig:未指定网络安全配置,使用平台默认值
20
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">api.example.com(to be adjusted)</domain> </domain-config> </network-security-config> And use it in manifest under <application>.