Как создать контекст в моем классе PortParser - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть класс, который реализует AsyncTask. класс загружает CSV-файл порта и построчно импортирует в таблицу mysqlite. Часть создания базы данных заключается в передаче текущего контекста. и у меня проблемы с созданием контекста. обычно getApplicationContext () делает это для меня. Но не работает в этом случае. Как я могу это сделать? (урок не полностью закончен) Другое дело, что я нахожу Android-студию, заполняющую полный путь для моих занятий. это начало происходить после того, как я создал папку и начал организовывать свои классы внутри папок. Я импортирую org.pctechtips.netdroid. *; но это не работает

package org.pctechtips.netdroid;

import android.os.AsyncTask;
import org.pctechtips.netdroid.*;
import org.pctechtips.netdroid.dbhelper.*;
import org.pctechtips.netdroid.dbhelper.*;
import android.content.Context;

import java.io.*;
import java.net.*;
import java.util.zip.*;

import javax.net.ssl.*;

/**
 * Java class to downloand and parse service-port csv file from iana.org
 */

public class PortParser {
    public static final String PORT_URL = "https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.csv";
    org.pctechtips.netdroid.dbhelper.DatabaseHelper dbHelper;
    Context context;



    public class DownloadPortFile extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            context = (Context) org.pctechtips.netdroid.activity.MainActivity;
            dbHelper = new org.pctechtips.netdroid.dbhelper.DatabaseHelper(context);
        }

        @Override
        protected Void doInBackground(Void... voids) {
            BufferedReader in = null;
            HttpsURLConnection connection = null;

            try {
                URL url = new URL(PORT_URL);
                connection = (HttpsURLConnection) url.openConnection();
                connection.setRequestProperty("Accept-Encoding", "gzip");
                connection.connect();
                if (connection.getResponseCode() != HttpsURLConnection.HTTP_OK) {
                   // publishProgress;
                   //reuturn
                }

                in = new BufferedReader(new InputStreamReader(new GZIPInputStream(connection.getInputStream()), "UTF-8"));
                String line;

                while ((line = in.readLine()) != null) {
                    if (isCancelled()) {
                        return;
                    }

                    /*String[] data = parser.parseLine(line);
                    if (data == null) {
                        continue;
                    }

                    if (parser.saveLine(db, data) == -1) {
                        publishProgress("Failed to insert data into the database. Please run this operation again");

                        return;
                    }*/
                }

            } catch (Exception e) {
//                publishProgress(e.toString());
            } finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ignored) {
                }

                if (connection != null) {
                    connection.disconnect();
                }
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(Void... voids) {

        }

        @Override
        protected void onPostExecute(Void aVoid) {

        }
    }

}

1 Ответ

0 голосов
/ 09 апреля 2019

Вам необходимо передать Context как параметр конструктору этого класса и сохранить его там. Перейдите в контекст приложения. И я предлагаю вам изучить различия между классами и экземплярами, ваш код здесь показывает полное отсутствие понимания Java и ее объектной модели.

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