E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: ошибка AsyncTask # 1 после копирования файла на другой ПК - PullRequest
0 голосов
/ 24 июня 2019

Я просто копирую свой проект со своего домашнего ноутбука на мой офисный компьютер с помощью TortoiseSVN.Но проект не работал на моем офисном ПК.

Вот мой код, я застрял здесь (я думаю).

public class SyncDatabase extends AsyncTask<String, Void, String> {

    Handler mHandler = null;

    public void setHandler(Handler handler) {
        mHandler = handler;
    }

    private static final String TAG = "SyncDatabase";
    Context mContext;
    AlertDialog mAlertDialog;

    public SyncDatabase(Context context) {
        mContext = context;
    }

    String post_url = "http://192.168.56.1/php_poedi/progress_business/admin/process/location-Backup.php";

    @Override
    protected String doInBackground(String... params) {
            try{
                String txtLatitude = params[0];
                String txtLongitude = params[1];
                String editUserID = params[2];
                String editEmailPHP = params[3];
                String tempRadio = params[4];
                String editDate = params[5];
                String nationality = params[6];

                URL url = new URL(post_url);
                Log.d(TAG, "checkpost_url: "+ post_url);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setDoOutput(true);
                httpURLConnection.setDoInput(true);
                OutputStream outputStream = httpURLConnection.getOutputStream();
                Log.d(TAG, "txtLatitude " + txtLatitude + "txtLongitude "+ txtLongitude);
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                String post_data = URLEncoder.encode("latitude", "UTF-8")+"="+URLEncoder.encode(txtLatitude,"UTF-8")
                        +"&"+URLEncoder.encode("longitude", "UTF-8")+"="+URLEncoder.encode(txtLongitude, "UTF-8")
                        +"&"+URLEncoder.encode("username", "UTF-8")+"="+URLEncoder.encode(editUserID, "UTF-8")
                        +"&"+URLEncoder.encode("email", "UTF-8")+"="+URLEncoder.encode(editEmailPHP, "UTF-8")
                        +"&"+URLEncoder.encode("gender", "UTF-8")+"="+URLEncoder.encode(tempRadio, "UTF-8")
                        +"&"+URLEncoder.encode("birthday", "UTF-8")+"="+URLEncoder.encode(editDate, "UTF-8")
                        +"&"+URLEncoder.encode("nationality", "UTF-8")+"="+URLEncoder.encode(nationality, "UTF-8");
                bufferedWriter.write(post_data);
                bufferedWriter.close();
                outputStream.close();
                InputStream inputStream = httpURLConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"));
                String result = "";
                String line = "";
                while ((line = bufferedReader.readLine()) != null) {
                    result += line;
                }
                Log.d(TAG, "result: "+ result);
                bufferedReader.close();
                inputStream.close();
                httpURLConnection.disconnect();
                return result;
            } catch (MalformedURLException e){
                e.printStackTrace();
            } catch (IOException e){
                e.printStackTrace();
            }

        return null;
    }

    @Override
    protected void onPreExecute() {
        mAlertDialog = new AlertDialog.Builder(mContext).create();
        mAlertDialog.setTitle("Login Status");
    }

    @Override
    protected void onPostExecute(String s) {
        mAlertDialog.setMessage(s);
        Log.d(TAG, "onPostExecute: "+ s);

        if(mHandler!=null){
            Message message = new Message();
            message.obj = s;
            mHandler.sendMessage(message);
            Log.d(TAG, "Message " + message);
        }
    }
}

И вот моя ошибка.

D/MainActivity: onClick: starts
    Date10/5/2009
    checkradiobutton Male
D/SyncDatabase: checkpost_url: http://192.168.56.1/php_poedi/progress_business/admin/process/location-Backup.php
D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
W/ResourceType: Failure getting entry for 0x7f100000 (t=15 e=0) (error -75)
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: org.example.register, PID: 6130
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:318)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)
     Caused by: java.lang.RuntimeException: Failed to parse XML configuration from network_security_config
        at android.security.net.config.XmlConfigSource.ensureInitialized(XmlConfigSource.java:98)
        at android.security.net.config.XmlConfigSource.getPerDomainConfigs(XmlConfigSource.java:65)
        at android.security.net.config.ManifestConfigSource.getPerDomainConfigs(ManifestConfigSource.java:49)
        at android.security.net.config.ApplicationConfig.ensureInitialized(ApplicationConfig.java:169)
        at android.security.net.config.ApplicationConfig.getTrustManager(ApplicationConfig.java:120)
        at android.security.net.config.RootTrustManagerFactorySpi.engineGetTrustManagers(RootTrustManagerFactorySpi.java:65)
        at javax.net.ssl.TrustManagerFactory.getTrustManagers(TrustManagerFactory.java:285)
        at com.android.org.conscrypt.SSLParametersImpl.createDefaultX509TrustManager(SSLParametersImpl.java:933)
        at com.android.org.conscrypt.SSLParametersImpl.getDefaultX509TrustManager(SSLParametersImpl.java:922)
        at com.android.org.conscrypt.SSLParametersImpl.<init>(SSLParametersImpl.java:156)
        at com.android.org.conscrypt.OpenSSLContextImpl.engineInit(OpenSSLContextImpl.java:100)
        at javax.net.ssl.SSLContext.init(SSLContext.java:316)
        at com.android.okhttp.OkHttpClient.getDefaultSSLSocketFactory(OkHttpClient.java:671)
        at com.android.okhttp.OkHttpClient.copyWithDefaults(OkHttpClient.java:630)
        at com.android.okhttp.OkUrlFactory.open(OkUrlFactory.java:59)
        at com.android.okhttp.OkUrlFactory.open(OkUrlFactory.java:54)
        at com.android.okhttp.HttpHandler.openConnection(HttpHandler.java:44)
        at java.net.URL.openConnection(URL.java:991)
        at org.example.register.SyncDatabase.doInBackground(SyncDatabase.java:66)
        at org.example.register.SyncDatabase.doInBackground(SyncDatabase.java:34)
        at android.os.AsyncTask$2.call(AsyncTask.java:304)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
        at java.lang.Thread.run(Thread.java:761) 
     Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f100000
        at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:190)
        at android.content.res.Resources.loadXmlResourceParser(Resources.java:2094)
        at android.content.res.Resources.getXml(Resources.java:1160)
        at android.security.net.config.XmlConfigSource.ensureInitialized(XmlConfigSource.java:92)
        at android.security.net.config.XmlConfigSource.getPerDomainConfigs(XmlConfigSource.java:65) 
        at android.security.net.config.ManifestConfigSource.getPerDomainConfigs(ManifestConfigSource.java:49) 
        at android.security.net.config.ApplicationConfig.ensureInitialized(ApplicationConfig.java:169) 
        at android.security.net.config.ApplicationConfig.getTrustManager(ApplicationConfig.java:120) 
        at android.security.net.config.RootTrustManagerFactorySpi.engineGetTrustManagers(RootTrustManagerFactorySpi.java:65) 
        at javax.net.ssl.TrustManagerFactory.getTrustManagers(TrustManagerFactory.java:285) 
        at com.android.org.conscrypt.SSLParametersImpl.createDefaultX509TrustManager(SSLParametersImpl.java:933) 
        at com.android.org.conscrypt.SSLParametersImpl.getDefaultX509TrustManager(SSLParametersImpl.java:922) 
        at com.android.org.conscrypt.SSLParametersImpl.<init>(SSLParametersImpl.java:156) 
        at com.android.org.conscrypt.OpenSSLContextImpl.engineInit(OpenSSLContextImpl.java:100) 
        at javax.net.ssl.SSLContext.init(SSLContext.java:316) 
        at com.android.okhttp.OkHttpClient.getDefaultSSLSocketFactory(OkHttpClient.java:671) 
        at com.android.okhttp.OkHttpClient.copyWithDefaults(OkHttpClient.java:630) 
        at com.android.okhttp.OkUrlFactory.open(OkUrlFactory.java:59) 
        at com.android.okhttp.OkUrlFactory.open(OkUrlFactory.java:54) 
        at com.android.okhttp.HttpHandler.openConnection(HttpHandler.java:44) 
        at java.net.URL.openConnection(URL.java:991) 
        at org.example.register.SyncDatabase.doInBackground(SyncDatabase.java:66) 
        at org.example.register.SyncDatabase.doInBackground(SyncDatabase.java:34) 
        at android.os.AsyncTask$2.call(AsyncTask.java:304) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
        at java.lang.Thread.run(Thread.java:761) 
D/EGL_emulation: eglMakeCurrent: 0xb25840c0: ver 2 0 (tinfo 0xb25835d0)

В моем проекте нет изменений ни на моем домашнем ноутбуке, ни на моем офисном ПК.Я думаю, что проблема в настройке Android Studio, но на какой части?Понятия не имею!

Вот мой network_security_config.xml

<network-security-config>
    <base-config cleartextTrafficPermitted="true">

        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

И AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.example.register">

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:networkSecurityConfig="@xml/network_security_config"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />

        <activity
            android:name=".MapsActivity"
            android:label="@string/title_activity_maps">    
        </activity>
        <activity
            android:name=".Activity2"
            android:label="@string/location_activity"
            android:parentActivityName=".MainActivity" />

        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="org.example.register.MainActivity" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

1 Ответ

0 голосов
/ 24 июня 2019

Насколько я мог видеть из вашего logcat, вы пытаетесь подключиться к локальному серверу для некоторой резервной копии местоположения, и, следовательно, вы вызываете API для сервера, который расположен на машине, имеющей следующий IP-адрес 192.168.56.1 ,

У вас дома может быть запущено серверное приложение, которое может общаться только в локальной сети. Вам необходимо иметь общедоступный IP-адрес для вашего сервера, чтобы получить доступ к API, предоставленному сервером, за пределами вашей локальной сети (например, вашего офиса).

Как я вижу из logcat, вы пытаетесь подключиться к следующему хосту.

http://192.168.56.1/php_poedi/progress_business/admin/process/locationBackup.php

Это недоступно из вашей офисной сети, так как этот IP-адрес является IP-адресом одной из ваших машин в вашем доме (то есть локальным IP-адресом). Следовательно, при вызове этого API ресурс не найден, и я предполагаю, что вы не обрабатываете ответ, когда ничего не получаете от своего сервера.

Следовательно, у меня есть два предложения.

  • Сделайте копию вашего серверного приложения и запустите его на компьютере в вашем офисе. Получите IP-адрес устройства и введите IP-адрес вместо 192.168.56.1. Вы также можете подумать о том, чтобы настроить свой домашний компьютер на использование общедоступного IP-адреса, однако, я думаю, это займет немного больше времени, чем я думаю, чтобы он выполнялся самостоятельно.
  • Изящно обрабатывать ответ, полученный от вызова API. То есть, когда ответа нет, ваш код также должен это обрабатывать. Как правило, мы можем использовать блок try/catch для обработки таких ситуаций. Когда ответ от сервера не может быть проанализирован, вы можете получить его в блоке catch и сгенерировать Toast или сообщение об ошибке.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...