2022年5月8日 星期日

App inventor:aix檔練習3,取得網路資料。

 import android.app.Activity;

import android.content.Context;
import com.google.appinventor.components.annotations.*;
import com.google.appinventor.components.common.ComponentCategory;
import com.google.appinventor.components.runtime.AndroidNonvisibleComponent;
import com.google.appinventor.components.runtime.ComponentContainer;
import com.google.appinventor.components.runtime.EventDispatcher;

import com.google.appinventor.components.runtime.AndroidViewComponent;
import android.view.View;
import android.graphics.Bitmap;
import java.io.FileOutputStream;
import android.graphics.Bitmap.CompressFormat;
import android.content.pm.PackageManager;

import java.net.CookieHandler;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.SocketTimeoutException;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;

import android.os.Environment;
import java.io.File;
import com.google.appinventor.components.runtime.util.AsynchUtil;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.HttpURLConnection;
import java.net.URLConnection;

@DesignerComponent(
version = 1,
description = "",
category = ComponentCategory.EXTENSION,
nonVisible = true,
iconName = "")

@SimpleObject(external = true)
//Libraries
@UsesLibraries(libraries = "")
//Permissions
@UsesPermissions(permissionNames = "android.permission.INTERNET"+"android.permission.ACCESS_NETWORK_STATE")

public class TA extends AndroidNonvisibleComponent {

//Activity and Context
private Context context;
private Activity activity;

public TA(ComponentContainer container){
super(container.$form());
this.activity = container.$context();
this.context = container.$context();
}

@SimpleFunction(description = "Sample Function Generated by Niotron")
public void WebsiteContent(final String website) {
AsynchUtil.runAsynchronously(new Runnable() { // Always do get request Asynchronously
@Override
public void run() {
try {
URL url = new URL(website);
URLConnection urlConnection = url.openConnection();
HttpURLConnection connection = null;
if(urlConnection instanceof HttpURLConnection)
{
connection = (HttpURLConnection) urlConnection;
}
else
{
}
BufferedReader readStream = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
// BufferedReader的作用在於用串流的方式讀取資料的,URL()可連接網頁.openStream是它的一種連接方法
String readLine; // 宣告讀取的變數資料名為readLine
StringBuilder data = new StringBuilder(); // 這結果的資將建立於此
//當資料不為空的時間,就將新的資料readLine存到 data這個變數的最後
while (( readLine = readStream.readLine() ) != null)
data.append(readLine); // Read all the lines from the readStream
readStream.close(); //關掉這個readStream
final String finalData = data.toString(); // 將findaData轉為String型態
activity.runOnUiThread(new Runnable() { // Always raise events on UI thread
@Override
public void run() {
//取得資料後,傳到Event中執行
myEvent(finalData); // You're event with data
}
});
} catch (IOException e) {
e.printStackTrace(); // Error occured
}
}
});
}

@SimpleEvent(description = "Test Event Generated by Niotron")
public void myEvent(String Data){
EventDispatcher.dispatchEvent(this, "myEvent",Data);
}
}



參考網頁:https://juejin.cn/post/6844903970649931783



沒有留言:

張貼留言