Как получить папку из Интернета с помощью Java в Android Studio?

Я пытаюсь создать чат-бота, используя программу AB и AIML. Я пытаюсь получить файлы AIML из Интернета, чтобы бот мог их читать и использовать. Я написал некоторый код, говорящий о получении текстового файла URL-адреса, но это дает мне необработанное исключение, и да, я добавил разрешение на доступ в Интернет в манифесте. Кстати, я новичок в Java.

Вот MainActivity.java

package com.NautGames.xecta.app;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;

import org.alicebot.ab.Chat;
import org.alicebot.ab.Bot;

import android.view.View;
import android.widget.Button;

import java.io.BufferedReader;
import java.net.MalformedURLException;
import java.io.InputStreamReader;
import java.net.URL;
import java.io.IOException;

public class MainActivity extends ActionBarActivity {

//private EditText botIn = (EditText) findViewById(R.id.botInput);;
//private Button botSubmit = (Button) findViewById(R.id.tellBot);;

//String botString = botIn.getText().toString();
EditText mEdit;
public String botIn;

private String readData()
{
    try
    {
        // Create a URL for the desired page
        URL url = new URL("https://www.dropbox.com/sh/9cyfz0b45mj6szr/7pBuupNz3N");


        // Read all the text returned by the server
        BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
        String str;
        while ((str = in.readLine()) != null)
        {
            // str is one line of text; readLine() strips the newline character(s)
        }
        in.close();
    }
    catch (MalformedURLException e)
    {
        //do nothing
    }
    catch (IOException e)
    {
        //do nothing
    }
    return "URL";
}

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

public void buttonOnClick(View v)
{
    Button button=(Button) v;

    mEdit = (EditText)findViewById(R.id.editText1);

    //Creating bot
    String botname="xecta";
    String path= readData();
    Bot xecta = new Bot(botname, path);

    Chat chatSession = new Chat(xecta);

    String request = mEdit.getText().toString();
    String response = chatSession.multisentenceRespond(request);
    ((Button) v).setText(response);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

}

Вот моя активность_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.NautGames.chatbot.app.MainActivity"
android:background="@drawable/oneiric640x960">

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/editText1"
    android:hint="Talk to Xecta"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Send"
    android:id="@+id/button1"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/editText1"
    android:onClick="buttonOnClick" />

</RelativeLayout>

Я не хочу, чтобы пользователь загружал все файлы AIML, потому что это занимает слишком много времени. Любая помощь будет оценена.


person SnowMatt    schedule 13.04.2014    source источник


Ответы (1)


Ссылка Dropbox, которую вы используете, — это онлайн-просмотрщик файлов Dropbox, который для java выглядит как набор HTML-кода, и он понятия не имеет, что с ним делать. Перейдите по указанной вами ссылке в раскрывающемся списке и нажмите «Загрузить (вертикально)»> «Загрузить как Zip» и вместо этого используйте этот URL-адрес. Но вам придется изменить своего бота, чтобы сначала извлечь все файлы из формата .zip, а затем все будет готово.

Кстати, URL-адрес: dropuserscontent.com. /shz/9cyfz0b45mj6szr/7pBuupNz3N/xecta?token_hash=AAEs9cDFswt98D1IhLnab4dHwhwh5z2Lmhq_N6H-2M0LWg&top_level_offset=6

«Я не хочу, чтобы пользователь загружал все файлы AIML, потому что это занимает слишком много времени. Любая помощь будет принята с благодарностью». -- Если вам нужно загружать каждый файл, когда вы хотите их использовать, это сильно замедлит работу вашего приложения. Было бы намного проще сначала загрузить все это и сохранить в локальном кеше, чтобы им не пришлось загружать его снова позже. К вашему сведению, загрузка занимает менее половины мегабайта в формате zip, так что не должно быть ничего плохого в том, чтобы скачать все это.

person DirkyJerky    schedule 13.04.2014
comment
Разве это не означает, что файлы будут разархивированы на устройстве пользователя? - person SnowMatt; 13.04.2014