diff --git a/app/build.gradle b/app/build.gradle
index 662c59d..b19d11e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,7 +11,7 @@ android {
minSdk 29
targetSdk 34
versionCode 1
- versionName "1.6.1"
+ versionName "1.6.1 b"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e00a13f..1baf4a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,15 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/org/astral/findmaimaiultra/ui/home/HomeFragment.java b/app/src/main/java/org/astral/findmaimaiultra/ui/home/HomeFragment.java
index 4b784b8..1590530 100644
--- a/app/src/main/java/org/astral/findmaimaiultra/ui/home/HomeFragment.java
+++ b/app/src/main/java/org/astral/findmaimaiultra/ui/home/HomeFragment.java
@@ -267,8 +267,18 @@ public class HomeFragment extends Fragment {
@SuppressLint("StaticFieldLeak")
private void sendGetRequest() {
OkHttpClient client = new OkHttpClient();
+ String tag = "";
+ String web = "";
+ try {
+ tag = city.split("市")[0];
+ web = "http://mai.godserver.cn:11451/api/mai/v1/search?prompt1=" + tag+ "&status=市";
+ }catch ( Exception e) {
+ tag = "xy("+ x +","+ y +")";
+ web = "http://mai.godserver.cn:11451/api/mai/v1/search?prompt1=" + tag+ "&status=xy";
+ }
+
+ Log.d("WebWebWebWebWebWebWebWebWebWeb ", web);
- String web = "http://mai.godserver.cn:11451/api/mai/v1/search?prompt1=" + city.split("市")[0] + "&status=市";
if (!isFlag) {
web = "http://mai.godserver.cn:11451/api/mai/v1/search?data_place=" + tagplace;
}
@@ -348,55 +358,45 @@ public class HomeFragment extends Fragment {
boolean flag2 = true;
if (flag2) {
- adapter = new PlaceAdapter(a, new PlaceAdapter.OnItemClickListener() {
- @Override
- public void onItemClick(Place place) {
- Intent intent = new Intent(context, PageActivity.class);
- intent.putExtra("id", place.getId());
- intent.putExtra("name", place.getName());
- intent.putExtra("address", place.getAddress());
- intent.putExtra("province", place.getProvince());
- intent.putExtra("city", place.getCity());
- intent.putExtra("area", place.getArea());
- intent.putExtra("x", place.getX());
- intent.putExtra("y", place.getY());
- intent.putExtra("count", place.getCount());
- intent.putExtra("bad", place.getBad());
- intent.putExtra("good", place.getGood());
- intent.putExtra("num", place.getNum());
- intent.putExtra("numJ", place.getNumJ());
- intent.putExtra("meituan", place.getMeituan_link());
- intent.putExtra("douyin", place.getDouyin_link());
- startActivity(intent);
- }
- });
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
+ adapter = new PlaceAdapter(a, new PlaceAdapter.OnItemClickListener() {
+ @Override
+ public void onItemClick(Place place) {
+ Intent intent = new Intent(context, PageActivity.class);
+ intent.putExtra("id", place.getId());
+ intent.putExtra("name", place.getName());
+ intent.putExtra("address", place.getAddress());
+ intent.putExtra("province", place.getProvince());
+ intent.putExtra("city", place.getCity());
+ intent.putExtra("area", place.getArea());
+ intent.putExtra("x", place.getX());
+ intent.putExtra("y", place.getY());
+ intent.putExtra("count", place.getCount());
+ intent.putExtra("bad", place.getBad());
+ intent.putExtra("good", place.getGood());
+ intent.putExtra("num", place.getNum());
+ intent.putExtra("numJ", place.getNumJ());
+ intent.putExtra("meituan", place.getMeituan_link());
+ intent.putExtra("douyin", place.getDouyin_link());
+ startActivity(intent);
+ }
+ });
recyclerView.setAdapter(adapter);
- // 设置 Toolbar 标题
String navHomeLabel = getString(R.string.menu_home);
Toolbar toolbar = ((MainActivity) requireActivity()).findViewById(R.id.toolbar);
if(!(toolbar.getTitle().equals("歌曲成绩") || toolbar.getTitle().equals("地图")|| toolbar.getTitle().equals("设置"))) {
toolbar.setTitle("FindMaimaiDX - " + a.size() + " 店铺" + "\n" + tot);
}
-
- // 更新 SharedViewModel 中的 Map
sharedViewModel.setPlacelist(new ArrayList<>(a));
- // 通知适配器数据已更改
adapter.notifyDataSetChanged();
}
});
- // 设置Toolbar
-
- for (Place p : a) {
- if (p.getX() == 0.0) {
- // Log.i(p.getId() + "", p.getName() + "没有坐标");
- }
- }
}
}
+
private List parseJsonToPlaceList(String jsonString) {
Gson gson = new Gson();
Type placeListType = new TypeToken>() {
diff --git a/app/src/main/java/org/astral/findmaimaiultra/ui/pixiv/PixivFragment.java b/app/src/main/java/org/astral/findmaimaiultra/ui/pixiv/PixivFragment.java
index 371c3d0..3cf621a 100644
--- a/app/src/main/java/org/astral/findmaimaiultra/ui/pixiv/PixivFragment.java
+++ b/app/src/main/java/org/astral/findmaimaiultra/ui/pixiv/PixivFragment.java
@@ -311,11 +311,12 @@ public class PixivFragment extends Fragment {
Log.d("PixivFragment111111111", "onResponse: " + res);
if (response.isSuccessful()) {
PagePixivResponse photoResponse = new Gson().fromJson(res, PagePixivResponse.class);
- TextView user = view.findViewById(R.id.user);
- user.setText(photoResponse.getBody().getUserName());
- TextView des = view.findViewById(R.id.des);
- des.setText(photoResponse.getBody().getDescription());
-
+ requireActivity().runOnUiThread(() -> {
+ TextView user = view.findViewById(R.id.user);
+ user.setText(photoResponse.getBody().getUserName());
+ TextView des = view.findViewById(R.id.des);
+ des.setText(photoResponse.getBody().getDescription());
+ });
}
}
@@ -407,9 +408,11 @@ public class PixivFragment extends Fragment {
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
if (bitmap != null) {
handler.post(() -> {
- imageView.setImageBitmap(bitmap);
- li.addView(imageView);
- snackbar.dismiss();
+ requireActivity().runOnUiThread(() -> {
+ imageView.setImageBitmap(bitmap);
+ li.addView(imageView);
+ snackbar.dismiss();
+ });
});
} else {
handler.post(() -> {
diff --git a/app/src/main/java/org/astral/findmaimaiultra/ui/widget/MyWidgetProvider.java b/app/src/main/java/org/astral/findmaimaiultra/ui/widget/MyWidgetProvider.java
new file mode 100644
index 0000000..82a7058
--- /dev/null
+++ b/app/src/main/java/org/astral/findmaimaiultra/ui/widget/MyWidgetProvider.java
@@ -0,0 +1,40 @@
+package org.astral.findmaimaiultra.ui.widget;
+
+import android.app.PendingIntent;
+import android.appwidget.AppWidgetManager;
+import android.appwidget.AppWidgetProvider;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.widget.RemoteViews;
+import org.astral.findmaimaiultra.R;
+import org.astral.findmaimaiultra.ui.MainActivity;
+
+public class MyWidgetProvider extends AppWidgetProvider {
+ private static final String ACTION_UPDATE = "org.astral.findmaimaiultra.ui.widget.UPDATE_WIDGET";
+
+ @Override
+ public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
+ for (int appWidgetId : appWidgetIds) {
+ RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_2x2);
+
+ // 设置点击事件
+ Intent clickIntent = new Intent(context, MyWidgetProvider.class);
+ clickIntent.setAction(ACTION_UPDATE);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+ views.setOnClickPendingIntent(R.id.widget_container, pendingIntent);
+
+ appWidgetManager.updateAppWidget(appWidgetId, views);
+ }
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ super.onReceive(context, intent);
+ if (ACTION_UPDATE.equals(intent.getAction())) {
+ // 启动 WidgetUpdateService
+ Intent serviceIntent = new Intent(context, WidgetUpdateService.class);
+ context.startService(serviceIntent);
+ }
+ }
+}
diff --git a/app/src/main/java/org/astral/findmaimaiultra/ui/widget/MyWidgetService.java b/app/src/main/java/org/astral/findmaimaiultra/ui/widget/MyWidgetService.java
new file mode 100644
index 0000000..27a83e0
--- /dev/null
+++ b/app/src/main/java/org/astral/findmaimaiultra/ui/widget/MyWidgetService.java
@@ -0,0 +1,80 @@
+package org.astral.findmaimaiultra.ui.widget;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.Intent;
+import android.widget.RemoteViews;
+import android.widget.RemoteViewsService;
+import androidx.annotation.NonNull;
+import org.astral.findmaimaiultra.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MyWidgetService extends RemoteViewsService {
+ @Override
+ public RemoteViewsFactory onGetViewFactory(Intent intent) {
+ return new MyWidgetFactory(this.getApplicationContext(), intent);
+ }
+}
+
+class MyWidgetFactory implements RemoteViewsService.RemoteViewsFactory {
+ private Context context;
+ private List dataList;
+
+ public MyWidgetFactory(Context context, Intent intent) {
+ this.context = context;
+ this.dataList = intent.getStringArrayListExtra("dataList");
+ if (dataList == null) {
+ dataList = new ArrayList<>();
+ }
+ }
+
+ @Override
+ public void onCreate() {
+ // 初始化数据
+ }
+
+ @Override
+ public void onDataSetChanged() {
+ // 数据集发生变化时调用
+ }
+
+ @Override
+ public void onDestroy() {
+ // 清理资源
+ }
+
+ @Override
+ public int getCount() {
+ return dataList.size();
+ }
+
+ @NonNull
+ @Override
+ public RemoteViews getViewAt(int position) {
+ @SuppressLint("RemoteViewLayout") RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_item);
+ views.setTextViewText(R.id.widget_item_text, dataList.get(position));
+ return views;
+ }
+
+ @Override
+ public RemoteViews getLoadingView() {
+ return null;
+ }
+
+ @Override
+ public int getViewTypeCount() {
+ return 1;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public boolean hasStableIds() {
+ return true;
+ }
+}
diff --git a/app/src/main/java/org/astral/findmaimaiultra/ui/widget/WidgetConfigureActivity.java b/app/src/main/java/org/astral/findmaimaiultra/ui/widget/WidgetConfigureActivity.java
new file mode 100644
index 0000000..79348e0
--- /dev/null
+++ b/app/src/main/java/org/astral/findmaimaiultra/ui/widget/WidgetConfigureActivity.java
@@ -0,0 +1,14 @@
+package org.astral.findmaimaiultra.ui.widget;
+
+import android.app.Activity;
+import android.os.Bundle;
+import org.astral.findmaimaiultra.R;
+
+public class WidgetConfigureActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_widget_configure);
+ // 添加配置逻辑
+ }
+}
diff --git a/app/src/main/java/org/astral/findmaimaiultra/ui/widget/WidgetUpdateService.java b/app/src/main/java/org/astral/findmaimaiultra/ui/widget/WidgetUpdateService.java
new file mode 100644
index 0000000..18bc333
--- /dev/null
+++ b/app/src/main/java/org/astral/findmaimaiultra/ui/widget/WidgetUpdateService.java
@@ -0,0 +1,112 @@
+package org.astral.findmaimaiultra.ui.widget;
+
+import android.app.IntentService;
+import android.appwidget.AppWidgetManager;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.util.Log;
+import android.widget.RemoteViews;
+import androidx.annotation.Nullable;
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+import org.astral.findmaimaiultra.R;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class WidgetUpdateService extends IntentService {
+ private static final String TAG = "WidgetUpdateService";
+
+ public WidgetUpdateService() {
+ super("WidgetUpdateService");
+ }
+
+ @Override
+ protected void onHandleIntent(@Nullable Intent intent) {
+ if (intent != null) {
+ fetchDataAndUpdateWidget();
+ }
+ }
+
+ private void fetchDataAndUpdateWidget() {
+ Log.d(TAG + "loading", "Fetching data and updating widget");
+ OkHttpClient client = new OkHttpClient();
+ String url = "http://yourserver.com/api/data"; // 替换为实际的API地址
+
+ Request request = new Request.Builder()
+ .url(url)
+ .build();
+
+ client.newCall(request).enqueue(new Callback() {
+ @Override
+ public void onFailure(Call call, IOException e) {
+ Log.e(TAG, "Error fetching data: " + e.getMessage());
+ AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(WidgetUpdateService.this);
+ ComponentName thisWidget = new ComponentName(WidgetUpdateService.this, MyWidgetProvider.class);
+ int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
+ for (int appWidgetId : appWidgetIds) {
+ RemoteViews views = new RemoteViews(getPackageName(), R.layout.widget_2x2);
+
+ // 将数据列表转换为字符串
+ StringBuilder dataText = new StringBuilder();
+ dataText.append("加载失败");
+ // 设置TextView的文本内容
+ views.setTextViewText(R.id.widget_text, dataText.toString());
+
+ appWidgetManager.updateAppWidget(appWidgetId, views);
+ }
+ }
+
+ @Override
+ public void onResponse(Call call, Response response) throws IOException {
+ if (response.isSuccessful()) {
+ String responseData = response.body().string();
+ List dataList = parseData(responseData);
+
+ AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(WidgetUpdateService.this);
+ ComponentName thisWidget = new ComponentName(WidgetUpdateService.this, MyWidgetProvider.class);
+ int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
+
+ for (int appWidgetId : appWidgetIds) {
+ RemoteViews views = new RemoteViews(getPackageName(), R.layout.widget_2x2);
+
+ // 将数据列表转换为字符串
+ StringBuilder dataText = new StringBuilder();
+ for (String data : dataList) {
+ dataText.append(data).append("\n");
+ }
+
+ // 设置TextView的文本内容
+ views.setTextViewText(R.id.widget_text, dataText.toString());
+
+ appWidgetManager.updateAppWidget(appWidgetId, views);
+ }
+ } else {
+ Log.e(TAG, "Failed to fetch data: " + response.code());
+ }
+ }
+ });
+ }
+
+ private List parseData(String jsonData) {
+ List dataList = new ArrayList<>();
+ try {
+ JSONArray jsonArray = new JSONArray(jsonData);
+ for (int i = 0; i < jsonArray.length(); i++) {
+ JSONObject jsonObject = jsonArray.getJSONObject(i);
+ String data = jsonObject.getString("data_key"); // 替换为实际的JSON键
+ dataList.add(data);
+ }
+ } catch (JSONException e) {
+ Log.e(TAG, "Error parsing JSON: " + e.getMessage());
+ }
+ return dataList;
+ }
+}
diff --git a/app/src/main/java/org/astral/findmaimaiultra/utill/AddressParser.java b/app/src/main/java/org/astral/findmaimaiultra/utill/AddressParser.java
index 6a5e63a..3c28411 100644
--- a/app/src/main/java/org/astral/findmaimaiultra/utill/AddressParser.java
+++ b/app/src/main/java/org/astral/findmaimaiultra/utill/AddressParser.java
@@ -53,6 +53,7 @@ public class AddressParser {
HomeFragment.province = "天津市";
}
}
+
}
}catch (Exception e) {
}
diff --git a/app/src/main/res/drawable/rounded_background.xml b/app/src/main/res/drawable/rounded_background.xml
new file mode 100644
index 0000000..26e50db
--- /dev/null
+++ b/app/src/main/res/drawable/rounded_background.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_update.xml b/app/src/main/res/layout/activity_update.xml
index e000c8f..8c4b4cc 100644
--- a/app/src/main/res/layout/activity_update.xml
+++ b/app/src/main/res/layout/activity_update.xml
@@ -137,25 +137,27 @@
android:text="Re:Mas"
android:textSize="12sp" />
-
+
+ android:text="Save"/>
+ android:text="注册水鱼账号"/>
+ android:text="水鱼数据迁移到落雪"/>
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/widget_2x2.xml b/app/src/main/res/layout/widget_2x2.xml
new file mode 100644
index 0000000..b548fcd
--- /dev/null
+++ b/app/src/main/res/layout/widget_2x2.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/widget_item.xml b/app/src/main/res/layout/widget_item.xml
new file mode 100644
index 0000000..ec22dac
--- /dev/null
+++ b/app/src/main/res/layout/widget_item.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/app/src/main/res/xml/my_widget_info.xml b/app/src/main/res/xml/my_widget_info.xml
new file mode 100644
index 0000000..09cc588
--- /dev/null
+++ b/app/src/main/res/xml/my_widget_info.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+