मैं एक प्रोग्राम बना रहा हूं जहां प्रदान की गई वेबसाइट का स्रोत कोड लॉगकैट में मुद्रित किया जाना चाहिए। लेकिन इसके बजाय null प्रिंट करवा रहा हूं। इंटरनेट कनेक्टेड है, नेटवर्कसिक्योरिटी कॉन्फिग जोड़ा गया है, क्लियरट्रैफ़िक्स जोड़ा गया है।

जावा कोड

package com.example.guesstheceleb;

import androidx.appcompat.app.AppCompatActivity;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.ExecutionException;

public class MainActivity extends AppCompatActivity {

    public static class downloadTask extends AsyncTask<String, Void, String>
    {

        @Override
        protected String doInBackground(String... urls) {
            String result="";
            URL url;
            HttpURLConnection urlConnection= null;
            try {
                url= new URL(urls[0]);
                urlConnection=(HttpURLConnection)url.openConnection();
                InputStream in= urlConnection.getInputStream();
                InputStreamReader reader = new InputStreamReader(in);
                int data = reader.read();
                while (data != -1)
                {
                    char current = (char) data;
                    result += current;
                    data= reader.read();
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            return null;
        }
    }

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

        downloadTask task = new downloadTask();
        try {
            String result = task.execute("https://www.forbes.com/celebrities/list/").get();
            Log.i("Content of URL","" + result);
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

लॉगकैट

2020-09-11 08:00:47.672 7394-7394/com.example.guesstheceleb D/ApplicationLoaders: Returning zygote-cached class loader: /system/framework/android.test.base.jar
2020-09-11 08:00:47.788 7394-7394/com.example.guesstheceleb D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
2020-09-11 08:00:47.790 7394-7394/com.example.guesstheceleb D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
2020-09-11 08:00:47.828 7394-7419/com.example.guesstheceleb D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
2020-09-11 08:00:47.835 7394-7419/com.example.guesstheceleb D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
2020-09-11 08:00:47.844 7394-7419/com.example.guesstheceleb D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
2020-09-11 08:00:48.365 7394-7394/com.example.guesstheceleb W/e.guessthecele: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
2020-09-11 08:00:48.368 7394-7394/com.example.guesstheceleb W/e.guessthecele: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
2020-09-11 08:00:52.769 7394-7416/com.example.guesstheceleb I/e.guessthecele: Waiting for a blocking GC ProfileSaver
2020-09-11 08:00:52.870 7394-7416/com.example.guesstheceleb I/chatty: uid=10153(com.example.guesstheceleb) Profile Saver identical 1 line
2020-09-11 08:00:52.908 7394-7416/com.example.guesstheceleb I/e.guessthecele: Waiting for a blocking GC ProfileSaver
2020-09-11 08:00:52.910 7394-7416/com.example.guesstheceleb I/e.guessthecele: WaitForGcToComplete blocked ProfileSaver on RunEmptyCheckpoint for 140.191ms
2020-09-11 08:01:32.922 7394-7416/com.example.guesstheceleb I/e.guessthecele: Waiting for a blocking GC ProfileSaver
2020-09-11 08:01:32.932 7394-7416/com.example.guesstheceleb I/e.guessthecele: WaitForGcToComplete blocked ProfileSaver on HeapTrim for 9.893ms
2020-09-11 08:03:33.063 7394-7394/com.example.guesstheceleb I/Content of URL: null
2020-09-11 08:03:33.147 7394-7417/com.example.guesstheceleb D/HostConnection: HostConnection::get() New Host Connection established 0xec691dd0, tid 7417
2020-09-11 08:03:33.159 7394-7417/com.example.guesstheceleb D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer ANDROID_EMU_vulkan_ignored_handles ANDROID_EMU_vulkan_free_memory_sync GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_gles_max_version_2 
2020-09-11 08:03:33.163 7394-7417/com.example.guesstheceleb W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2020-09-11 08:03:33.449 7394-7417/com.example.guesstheceleb D/EGL_emulation: eglCreateContext: 0xec49f490: maj 2 min 0 rcv 2
2020-09-11 08:03:33.647 7394-7417/com.example.guesstheceleb D/EGL_emulation: eglMakeCurrent: 0xec49f490: ver 2 0 (tinfo 0xec7ddab0) (first time)
2020-09-11 08:03:33.694 7394-7417/com.example.guesstheceleb I/Gralloc4: mapper 4.x is not supported
2020-09-11 08:03:33.695 7394-7417/com.example.guesstheceleb D/HostConnection: createUnique: call
2020-09-11 08:03:33.696 7394-7417/com.example.guesstheceleb D/HostConnection: HostConnection::get() New Host Connection established 0xec693330, tid 7417
2020-09-11 08:03:33.697 7394-7417/com.example.guesstheceleb D/goldfish-address-space: allocate: Ask for block of size 0x100
2020-09-11 08:03:33.697 7394-7417/com.example.guesstheceleb D/goldfish-address-space: allocate: ioctl allocate returned offset 0x3f9f9c000 size 0x2000
2020-09-11 08:03:33.712 7394-7417/com.example.guesstheceleb D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer ANDROID_EMU_vulkan_ignored_handles ANDROID_EMU_vulkan_free_memory_sync GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_gles_max_version_2 
2020-09-11 08:03:33.874 7394-7394/com.example.guesstheceleb I/Choreographer: Skipped 45 frames!  The application may be doing too much work on its main thread.

प्रकट

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.guesstheceleb">
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:usesCleartextTraffic="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:networkSecurityConfig="@xml/network_security_config">
        <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>
0
Prithin Babu 11 सितंबर 2020, 05:42
2
Async कार्य के onpreexecute, doinbackground, onpostexecute विधियों की जाँच करें। त्रुटि शायद इस तथ्य के कारण है कि आप कार्य पूरा होने से पहले परिणाम लॉग कर रहे हैं। आपको अतुल्यकालिक कार्य पूरा होने की प्रतीक्षा करनी होगी
 – 
edison16029
11 सितंबर 2020, 05:46
मेरा जवाब देखें stackoverflow.com/a/62214590/13352948
 – 
edison16029
11 सितंबर 2020, 05:51
मैं Async टास्क में थोड़ी देर के बाद एक return result देना भूल गया था
 – 
Prithin Babu
11 सितंबर 2020, 17:22

1 उत्तर

सबसे बढ़िया उत्तर

अपने AsyncTask के अंदर, आपको onPostExecute(String result) विधि को ओवरराइड करना चाहिए और इसके अंदर लॉग इन करना चाहिए:

@Override
protected void onPostExecute(String result) {
   Log.i("Content of URL", result);
}

अपनी doInBackground विधि में, शून्य वापस करने के बजाय, आपको परिणाम वापस करना चाहिए क्योंकि इसका उपयोग onPostExecute विधि में इनपुट के रूप में किया जाएगा:

protected String doInBackground(String... urls) {
   ...
   return result
}

आपका AsyncTask इस तरह दिखना चाहिए:

public static class downloadTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... urls) {
        ...
        return result
    }

    @Override
    protected void onPostExecute(String result) {
        Log.i("Content of URL", result);
    }
}

अंत में, अपनी गतिविधि में, आप इसे इस तरह उपयोग कर सकते हैं:

downloadTask task = new downloadTask();
task.execute("https://www.forbes.com/celebrities/list/")

कृपया ध्यान रखें कि AsyncTask को हटा दिया गया है। अधिक जानकारी यहां

2
fernandospr 13 सितंबर 2020, 03:54
मेरी गलती थी... मैं Asynctask . के तरीकों पर return result प्रदान करना भूल गया
 – 
Prithin Babu
11 सितंबर 2020, 17:20
अगर यह आपके प्रश्न का उत्तर देता है, तो कृपया इसे उत्तर के रूप में स्वीकार करना याद रखें।
 – 
fernandospr
12 सितंबर 2020, 04:00
वह जवाब नहीं था, मैं बयान के बाद return result जोड़ना चाहता हूं।
 – 
Prithin Babu
12 सितंबर 2020, 15:59
आपको AsyncTask execute(...).get() विधि का उपयोग नहीं करना चाहिए, इसके बजाय, आपको AsyncTask में onPostExecute विधि जोड़नी चाहिए और मेरे उत्तर में बताए गए परिणाम को वहां लॉग इन करना चाहिए।
 – 
fernandospr
12 सितंबर 2020, 19:14
मैं एक ट्यूटोरियल का अनुसरण कर रहा था, और उस व्यक्ति ने AsyncTask का उपयोग किया था
 – 
Prithin Babu
13 सितंबर 2020, 02:46